Skip to content

Commit

Permalink
add better class compare
Browse files Browse the repository at this point in the history
  • Loading branch information
Katze719 committed May 29, 2024
1 parent 03fb333 commit 794422b
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 49 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
Version 5.0.1 - 2024-05-29

### What's Changed
- Die Klasse kann jetzt unabhängig von Leerzeichen oder Groß- und Kleinschreibung gesetzt werden. Beispiel: `IT 22/5` == `it22/5`.

---

Version 5.0.0 - 2024-05-28

### What's Changed
Expand Down
2 changes: 1 addition & 1 deletion bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
USERNAME = "bsz-et-2324"
PASSWORD = "schulleiter#23"

CURRENT_VERSION = "v5.0.0"
CURRENT_VERSION = "v5.0.1"
CURRENT_VERSION_FILE = f"{os.getenv('SETTINGS_VOLUME')}/version.txt"

if __name__ == '__main__':
Expand Down
2 changes: 1 addition & 1 deletion bsz_bot/commands/news.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ async def news(ctx : discord.Interaction):
msg = ''

for event in parsed_plan:
if GuildSettings(ctx.guild).get("class").replace(" ", "") in event["class"].replace(" ", ""):
if GuildSettings(ctx.guild).get("class").replace(" ", "").lower() in event["class"].replace(" ", "").lower():
msg += f"```txt\nAm {event['date']} {event['day']}\nStunde: {event["hours"]}\nLehrer: {event["teacher"]}\nFach: {event["subject"]}\nRaum: {event["room"]}\nInfo: {event["info"]}\n```\n"

if msg != '':
Expand Down
89 changes: 46 additions & 43 deletions bsz_bot/helpers/parse_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,51 +23,54 @@ def clean_line(line):
def parse_table(pdf_path):
schedule_data = defaultdict(list)

with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
text = page.extract_text()
if not text:
continue

# Split text into lines
lines = text.splitlines()
current_class = None
current_date = None
current_normal_date = None
current_normal_day = None

for line in lines:
cleaned_line = clean_line(line)
try:
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
text = page.extract_text()
if not text:
continue

# Match lines that look like class headers
class_match = re.match(r'^([A-Z_]+\s*\d+/\d+)', cleaned_line)
if class_match:
current_class = class_match.group(1)
elif re.match(r'^\b(Mo|Di|Mi|Do|Fr|Sa|So)\b \d{2}\.\d{2}\.\d{4}', cleaned_line):
current_date = cleaned_line.split() # Split to get date and day
elif "VLehrer Kürzel" in cleaned_line:
continue # Skip header line
elif current_class and current_date:
details = re.split(r'\s{2,}', cleaned_line) # Split on multiple spaces
try:
int(details[0])
except ValueError:
current_normal_date = details[0]
current_normal_day = details[1]
details = details[2:]
# Split text into lines
lines = text.splitlines()
current_class = None
current_date = None
current_normal_date = None
current_normal_day = None

for line in lines:
cleaned_line = clean_line(line)

# Match lines that look like class headers
class_match = re.match(r'^([A-Z_]+\s*\d+/\d+)', cleaned_line)
if class_match:
current_class = class_match.group(1)
elif re.match(r'^\b(Mo|Di|Mi|Do|Fr|Sa|So)\b \d{2}\.\d{2}\.\d{4}', cleaned_line):
current_date = cleaned_line.split() # Split to get date and day
elif "VLehrer Kürzel" in cleaned_line:
continue # Skip header line
elif current_class and current_date:
details = re.split(r'\s{2,}', cleaned_line) # Split on multiple spaces
try:
int(details[0])
except ValueError:
current_normal_date = details[0]
current_normal_day = details[1]
details = details[2:]

if len(details) >= 5:
details_dict = {
'date': current_normal_date,
'day': current_normal_day,
'position': details[0][0],
'teacher': details[1],
'subject': details[2],
'room': details[3],
'class': details[4],
'info': details[5] if len(details) > 5 else '',
}
schedule_data[current_class].append(details_dict)
if len(details) >= 5:
details_dict = {
'date': current_normal_date,
'day': current_normal_day,
'position': details[0][0],
'teacher': details[1],
'subject': details[2],
'room': details[3],
'class': details[4],
'info': details[5] if len(details) > 5 else '',
}
schedule_data[current_class].append(details_dict)
except Exception as e:
print(e)

event_list = [event for data in schedule_data.values() for event in data]

Expand Down
2 changes: 1 addition & 1 deletion bsz_bot/tasks/check_current_hour.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ async def get_news(id):
msg = ''

for event in parsed_plan:
if s.get("class").replace(" ", "") in event["class"].replace(" ", ""):
if s.get("class").replace(" ", "").lower() in event["class"].replace(" ", "").lower():
if is_today(event["date"]) and f"{event["position"]}" == f"{id}":
msg += f"Stunde: {event['hours']}\nLehrer: {event['teacher']}\nFach: {event['subject']}\nRaum: {event['room']}\nInfo: {event['info']}\n\n"

Expand Down
2 changes: 1 addition & 1 deletion bsz_bot/tasks/check_parsed_plan_beta.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ async def get_news():
msg = ''

for event in parsed_plan:
if s.get("class").replace(" ", "") in event["class"].replace(" ", ""):
if s.get("class").replace(" ", "").lower() in event["class"].replace(" ", "").lower():
if is_tomorrow(event["date"]):
msg += f"Stunde: {event["hours"]}\nLehrer: {event["teacher"]}\nFach: {event["subject"]}\nRaum: {event["room"]}\nInfo: {event["info"]}\n\n"

Expand Down
14 changes: 12 additions & 2 deletions bsz_bot/tasks/check_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,16 @@ async def check_plan__new(guild):
return

plan = Plan(guild)

parsed_plan_old = parse_table(f'{os.getenv("SETTINGS_VOLUME")}/{Plan(guild).get_file_name()}.pdf')

msg_old = ''

for event in parsed_plan_old:
if s.get("class").replace(" ", "").lower() in event["class"].replace(" ", "").lower():
msg_old += f"```txt\nAm {event['date']} {event['day']}\nStunde: {event["hours"]}\nLehrer: {event["teacher"]}\nFach: {event["subject"]}\nRaum: {event["room"]}\nInfo: {event["info"]}\n```\n"



if not await plan.new_plan_available():
if plan.any_errors():
Expand Down Expand Up @@ -88,10 +98,10 @@ async def check_plan__new(guild):
msg = ''

for event in parsed_plan:
if s.get("class").replace(" ", "") in event["class"].replace(" ", ""):
if s.get("class").replace(" ", "").lower() in event["class"].replace(" ", "").lower():
msg += f"```txt\nAm {event['date']} {event['day']}\nStunde: {event["hours"]}\nLehrer: {event["teacher"]}\nFach: {event["subject"]}\nRaum: {event["room"]}\nInfo: {event["info"]}\n```\n"

if msg != '':
if msg != '' and msg != msg_old:
await channel.send(embed=simple_embed(f'News for class `{s.get("class")}`', f"{msg}"))

@tasks.loop(minutes=5)
Expand Down

0 comments on commit 794422b

Please sign in to comment.