def add_lecture_to_shedule(): g_chat, g_text lectures = db.get_all_lecture_infos() shedule = db.get_studentlectures(g_chat) matched_lecture = match_lecture_name(g_text, lectures) message = "" if matched_lecture["title"] in shedule: message = "Die Vorlesung {} ist bereits in deinem Stundenplan eingetragen.".format( matched_lecture["title"]) elif matched_lecture: lecture_id = db.get_lecture_id(matched_lecture["title"]) db.add_lecture(lecture_id, g_chat) message = "Ich habe die Vorlesung {} zu deinem Stundenplan hinzugefügt. Sie ist am {} von {} Uhr bis {} Uhr in {}.".format( matched_lecture["title"], GERMAN_WEEKDAYS[matched_lecture["weekday"]], matched_lecture["start"], matched_lecture["end"], matched_lecture["room_name"]) else: message = ( "Ich habe diese Vorlesung leider nicht gefunden." + EMOJI_SAD + "\nHier sind alle Vorlesungen aufgeführt:" "https://www.uni-due.de/imperia/md/content/vv/vvz_ws_2017-18_due_1011_inkowiss.pdf" ) send_message(message, g_chat) return True
def get_learning_group(): global g_chat answer = "Lerngruppen findest du möglicherweise im komedia-Forum: \n" \ "http://fsr-komedia.zim.uni-due.de/forum/ \n\n" \ "Falls nicht: Geh in die Uni und sprich Kommilitonen an " + EMOJI_NERD send_message(answer, g_chat) return True
def question_where(): global g_chat answer = "Du suchst anscheind einen Ort. Was genau suchst du?" options = [["Wo findet eine Vorlesung statt?"], ["Wo befindet sich ein Raum?"]] _wants_to_know_where.append(g_chat) send_message(answer, g_chat, build_keyboard(options)) return True
def get_lectures(): g_chat lectures = db.get_all_lecture_infos() message = "Das sind alle Vorlesungen:\n" for lecture in lectures: message += "\n " + lecture["title"] + "\n" send_message(message, g_chat) return True
def delete_lecture_from_shedule(): g_chat _wants_to_remove.append(g_chat) lectures = db.get_studentlectures(g_chat) keyboard = build_lecture_keyboard(lectures) send_message("Wähle eine Vorlesung aus, die gelöscht werden soll", g_chat, keyboard) return True
def get_my_shedule(): g_chat lectures = db.get_studentlectures(g_chat) message = "Das sind alle deine Vorlesungen dieses Semester:\n" for lecture in lectures: message += "\n " + lecture + "\n" send_message(message, g_chat) return True
def get_exam_registration(): global g_chat answer = "Die Prüfungsanmeldephase für das Sommersemester 2018 beginnt am 07.05.18 und endet am 18.05.18.\n" \ "Eine Prüfung kann über folgendes Portal angemeldet werden: \n\n" \ "https://campus.uni-due.de/lsf \n\n" \ "Terminpläne für Bachelor und Master sind unter folgendem Link zu finden: \n\n" \ "https://www.uni-due.de/verwaltung/pruefungswesen/d_komed_startseite.php" send_message(answer, g_chat) return True
def get_vpn(): global g_chat answer = "Der Zugriff auf Uni-Dienste von z.B. Zuhause aus kann über eine VPN-Verbindung gewährleistet werden." \ "Windows-Nutzer können hierfür Cisco AnyConnect verwenden: \n" \ "https://www.uni-due.de/zim/services/internetzugang/cisco-vpn-anyconnect \n\n" \ "Für MacOS und Linux bietet sich OpenConnect an: \n" \ "https://www.uni-due.de/zim/services/internetzugang/openconnect.php" send_message(answer, g_chat) return True
def get_certificate_of_study(): global g_chat answer = "Die Studienbescheinigung ist unter folgendem Link verfügbar:\n" \ "https://campus.uni-due.de/cm/ \n \n" \ "Schritte:\n" \ "1.) Mit Unikennung einloggen \n" \ "2.) Auf \"Mein Studium\" -> \"Studienservice\" -> \"Bescheinigungen\" klicken \n" \ "3.) .pdf-Datei mit Studienbescheinigung runterladen " send_message(answer, g_chat) return True
def get_test_subject_hours(): global g_chat answer = "Versuchspersonenstunden (VPS) werden für die Teilnahme an wissenschaftlichen Studien vergeben. \n" \ "Ausschreibungen findest du unter anderem im Komedia-Forum \n" \ "http://fsr-komedia.zim.uni-due.de/forum/ \n" \ "oder bei Facebook im Komedia-Versuchspersonenmarkt\n" \ "https://www.facebook.com/groups/1089565127742196/ \n\n" \ "Neben anderen Veranstaltungen sind 30 VPS die Voraussetzung um das Modul \"Methodologie psychologischer Forschung\" " \ "abzuschließen." send_message(answer, g_chat) return True
def get_bot_information(): global g_chat answer = "Hallo, ich bin der ganz persönliche Chatbot für Erstsemester des Komedia-Studiengangs. \n" \ "Ich habe Informationen über die folgenden Bereiche: \n \n" \ "- Vorlesungen und Zeiten \n" \ "- Räume und Veranstaltungen\n" \ "- Mensa-Speisepläne \n" \ "- Semesterbeiträge \n" \ "- Prüfungsanmeldungen \n" \ "- Studienbescheinigungen \n" \ "\n" \ "...und noch vieles mehr!" send_message(answer, g_chat) return True
def get_room(): global g_chat, g_text rooms = db.get_all_room_infos() matched_room = match_room_name(g_text, rooms) message = "" found = False if matched_room: message = "Der Raum befindet sich hier:" found = True else: message = "Ich kenne diesen Raum leider nicht." send_message(message, g_chat) if found: send_location(g_chat, matched_room["longitude"], matched_room["latitude"]) return True
def get_lecture_time(): global g_chat, g_text lectures = db.get_all_lecture_infos() for lecture in lectures: print(lecture) matched_lecture = match_lecture_name(g_text, lectures) message = "" if matched_lecture: message = "Die Vorlesung {} findet von {} Uhr bis {} Uhr am {} statt.".format( matched_lecture["title"], matched_lecture["start"], matched_lecture["end"], GERMAN_WEEKDAYS[matched_lecture["weekday"]]) else: message = ( "Ich kenne diese Vorlesung leider nicht, oder du hast nicht den richtigen Namen verwendet. Die Bezeichnungen findest du hier:" "https://www.uni-due.de/imperia/md/content/vv/vvz_ws_2017-18_due_1011_inkowiss.pdf" ) send_message(message, g_chat) return True
def get_lecture_place(): global g_chat, g_text lectures = db.get_all_lecture_infos() matched_lecture = match_lecture_name(g_text, lectures) message = "" found = False if matched_lecture: message = "Die Vorlesung {} findet im Raum {} statt.".format( matched_lecture["title"], matched_lecture["room_name"]) found = True else: message = ( "Ich kenne diese Vorlesung leider nicht, oder du hast nicht den richtigen Namen verwendet. Die Bezeichnungen findest du hier:" "https://www.uni-due.de/imperia/md/content/vv/vvz_ws_2017-18_due_1011_inkowiss.pdf" ) send_message(message, g_chat) if found: send_location(g_chat, matched_lecture["room_longitude"], matched_lecture["room_latitude"]) return True
def get_pattern_match(text, chat): if (chat in _wants_to_remove): lectures = db.get_studentlectures(chat) if (text in lectures): db.delete_lecture_by_title(text, chat) _wants_to_remove.remove(chat) message = "Ich habe die Vorlesung {} aus deinem Studenplan gelöscht.".format( text) send_message(message, chat, build_keyboard_remove()) return elif chat in _wants_to_know_where: message = "" if text == "Wo findet eine Vorlesung statt?": message = "Um welche Vorlesung geht es?" _wants_to_know_lecture_room.append(chat) elif text == "Wo befindet sich ein Raum?": message = "Um welchen Raum geht es?" _wants_to_know_room.append(chat) else: message = "Oh dann frag mich doch einfach etwas anderes." _wants_to_know_where.remove(chat) send_message(message, chat, build_keyboard_remove()) return elif chat in _wants_to_know_lecture_room: text = "Wo findet {} statt?".format(text) _wants_to_know_lecture_room.remove(chat) elif chat in _wants_to_know_room: text = "Wo ist Raum {}?".format(text) _wants_to_know_room.remove(chat) cleaned_text = text.strip() removeChars = "_?!.-" for char in removeChars: cleaned_text = cleaned_text.replace(char, "") cleaned_text = cleaned_text.lower() gave_answer = False with open(os.path.join(__location__, 'patterns.dat'), encoding='utf-8') as file: for line in file: if len(line) <= 1: continue skill_name = line.split(' ', 1)[0] skill_text = line.split(' ', 1)[1] skill_text = skill_text.strip() skill_patterns = skill_text.split("_") pattern_match = True for x in range(0, len(skill_patterns)): if len(skill_patterns[x]) == 0: continue skill_patterns[x] = skill_patterns[x].strip() skill_patterns[x] = skill_patterns[x].lower() if x == 0: if not cleaned_text.startswith(skill_patterns[x]): pattern_match = False break elif x == len(skill_patterns) - 1: if not cleaned_text.endswith(skill_patterns[x]): pattern_match = False break else: if skill_patterns[x] not in cleaned_text: pattern_match = False break if pattern_match: if get_skill_match(skill_name, skill_text, cleaned_text, chat): gave_answer = True break if not gave_answer: with open("unknown_requests.txt", "a") as myfile: myfile.write(cleaned_text + "\n") send_message("Das habe ich leider nicht verstanden.", chat)
def check_for_command(cmd, chat, args=None): sargs = "None" if args: sargs = ''.join(args) print("[BOT]:: Checking for command : " + cmd + " with arguments : " + sargs) if cmd == "removelecture": _wants_to_remove.append(chat) lectures = db.get_studentlectures(chat) keyboard = build_lecture_keyboard(lectures) send_message("Wähle eine Vorlesung aus, die gelöscht werden soll", chat, keyboard) elif cmd == "addlecture": if args: print("ARGS = " + args[0]) lectureid = -1 # Check type if type(args[0]) is int: lectureid = args[0] elif type(args[0]) is str: # Find lectureID name = args[0] lectureid = db.get_lecture_id(name) print("[BOT]:: Command detected : ADD LECTURE with ID = " + str(lectureid)) if lectureid >= 0: db.add_lecture(lectureid, chat) lectures = db.get_studentlectures(chat) message = "\n".join(lectures) send_message(message, chat) elif cmd == "getlectures": lectures = db.get_studentlectures(chat) message = ("Diese Vorlesungen hast du " "in deinem Stundenplan:\n") for lecture in lectures: message += '\n' + lecture send_message(message, chat) elif cmd == "showlectures": lectures = db.get_lectures() message = ("Diese Vorlesungen hast du " "in deinem Stundenplan:\n") for lecture in lectures: message += '\n' + lecture send_message(message, chat) elif cmd == "getlectureinfos": if args: lecture_id = -1 try: lecture_id = int(args[0]) except ValueError as err: return lecture_infos = db.get_lecture_infos(lecture_id) if lecture_infos: print("[BOT]:: Command detected : GET LECTURE INFOS = " + lecture_infos["title"] + " on " + lecture_infos["weekday"] + " from " + lecture_infos["start"] + " to " + lecture_infos["end"] + " in room " + lecture_infos["room_name"]) message = "Die Vorlesung {} findet am {} von {} Uhr bis {} Uhr in Raum {} statt.".format( lecture_infos["title"], GERMAN_WEEKDAYS[lecture_infos["weekday"]], lecture_infos["start"], lecture_infos["end"], lecture_infos["room_name"]) send_message(message, chat) else: print( "[BOT]:: Command detected : GET LECTURE INFOS = NO LECTURE FOUND!" ) message = "Tut mir Leid, ich weiß leider nichts über die Vorlesung mit dem Titel {}. Bist du dir sicher, dass sie existiert?".format( args[0]) send_message(message, chat) elif cmd == "getroominfos": if args: room_infos = db.get_room_infos(args[0]) if room_infos: print("[BOT]:: Command detected : GET ROOM INFOS = " + room_infos["name"] + " on floor " + str(room_infos["floor"]) + " at longitude " + room_infos["longitude"] + " and latitude " + room_infos["latitude"]) message = "Der Raum, den du suchst befindet sich hier im {} Stock:".format( str(room_infos["floor"])) send_message(message, chat) send_location(chat, room_infos["longitude"], room_infos["latitude"]) else: print( "[BOT]:: Command detected : GET ROOM INFOS = NO ROOM FOUND!" ) message = "Tut mir Leid, ich weiß leider nicht wo der Raum {} ist. Bist du dir sicher, dass er existiert?".format( args[0]) send_message(message, chat) else: print("[BOT]:: Command not found : " + cmd)
def answer_how_are_you(): global g_chat answer = "Ich bin ein Bot und habe daher keine Gefühle" send_message(answer, g_chat) return True
def answer_hello(): global g_chat answer = "Hallo :)" send_message(answer, g_chat) return True
def get_free_software(): global g_chat send_message("FreeSoftware", g_chat) return True
def get_how_to_use(): global g_chat send_message("HowTo", g_chat) return True
def get_semester_fee(): global g_chat answer = "Der Sozial- und Studierendenschaftsbeitrag beträgt für das Sommersemester 2018 insgesamt 304,62 €.\n" \ "Der Beitrag kann bis zum 02.03.2018 überwiesen werden." send_message(answer, g_chat) return True