diff --git a/betterhelp.json b/commands.json similarity index 76% rename from betterhelp.json rename to commands.json index a9ea0f6c44c2dfec221c6fa77d497ff30d7f0f25..b7768230f1d3524379a3b87cacfa1aceef3d0300 100644 --- a/betterhelp.json +++ b/commands.json @@ -12,7 +12,8 @@ ".schwirbel" ], "Description": "A simple answer by the bot.", - "_Func": "echo" + "_Func": "echo", + "allowedGroups":["Testung", "ntp", "Die_"] } ], "Static Texts": [ @@ -22,42 +23,48 @@ ".list" ], "Description": "Get a list of all available commands. Type .help <command> for more information.", - "_Func": "echo" + "_Func": "help_func", + "allowedGroups":[] }, { "Names": [ ".credits" ], "Description": "Who made this", - "_Func": "echo" + "_Func": "credits", + "allowedGroups":[] }, { "Names": [ ".remusFeinste" ], "Description": "Get a recipe for sangria.", - "_Func": "echo" + "_Func": "remus_feinste", + "allowedGroups":[] }, { "Names": [ ".links" ], "Description": "Get a list of all important links for various signal groups and community discords. Password protected. Type .links <password>.", - "_Func": "echo" + "_Func": "links", + "allowedGroups":[] }, { "Names": [ ".trueamerican" ], "Description": "True American Rules: How to play the game from New Girl", - "_Func": "echo" + "_Func": "true_american", + "allowedGroups":[] }, { "Names": [ ".kingscup" ], "Description": "Kings Cup Rules", - "_Func": "echo" + "_Func": "get_kings_cup", + "allowedGroups":[] } @@ -69,21 +76,24 @@ ".yn" ], "Description": "Replies with a GIF and an answer that is either \"yes\" or \"no\"", - "_Func": "yesno" + "_Func": "yes_no_wtf", + "allowedGroups":[] }, { "Names": [ ".dadjoke" ], "Description": "Make a really good pun", - "_Func": "yesno" + "_Func": "dadjoke", + "allowedGroups":[] }, { "Names": [ ".deepl" ], "Description": "Syntax: .deepl <Language>, <String>. Translate a word, sentence or even small texts with DeepL translator. Type: .deepl ES, Where is the library?", - "_Func": "yesno" + "_Func": "get_deepl_translation", + "allowedGroups":[] } ], "Crawlers": [ @@ -93,21 +103,24 @@ ".gn" ], "Description": "Syntax: .gn <German String>. Looks if a string (can be more than one sentence) is genderneutral and displays alternatives for genderspecific words. Powered by geschicktgendern.de", - "_Func": "yesno" + "_Func": "genderneutral", + "allowedGroups":[] }, { "Names": [ ".freegames" ], "Description": "Displays video games that are currently free, but usually not. Powered by freegamesyo.com", - "_Func": "yesno" + "_Func": "free_games", + "allowedGroups":[] }, { "Names": [ ".today" ], "Description": "Random facts and events about today", - "_Func": "echo" + "_Func": "get_today", + "allowedGroups":[] } ], "Databases": [ @@ -118,14 +131,16 @@ ".createQuote" ], "Description": "Syntax: .saveQuote <\"Quote\">, <Person>, <Year>. Save a quote. Type .savequote \"640 kB ought to be enough for anybody.\", Not Gates, 1981", - "_Func": "yesno" + "_Func": "save_quote", + "allowedGroups":[] }, { "Names": [ ".randomQuote" ], "Description": "Take a random Quote and display it.", - "_Func": "yesno" + "_Func": "random_quote", + "allowedGroups":[] }, { "Names": [ @@ -134,21 +149,24 @@ ".createEvent" ], "Description": "Syntax: .saveEvent <Headline>; <Date>; <optional description>. Save an event. The bot will remind you one day before the event and at the actual day, each at 9 o'clock. To delete an event use .request!", - "_Func": "yesno" + "_Func": "save_event", + "allowedGroups":[] }, { "Names": [ ".nextEvent" ], "Description": "Display an upcoming event.", - "_Func": "yesno" + "_Func": "get_next_event", + "allowedGroups":[] }, { "Names": [ ".allEvents" ], "Description": "Get a list of all events.", - "_Func": "yesno" + "_Func": "get_all_events", + "allowedGroups":[] }, { "Names": [ @@ -157,21 +175,24 @@ ".createBirthday" ], "Description": "Syntax: .saveBirthday <Name>, <Date>. Save a birthday. The bot will congratulate on that day. To delete a birthday use .request!", - "_Func": "yesno" + "_Func": "save_birthday", + "allowedGroups":[] }, { "Names": [ ".nextBirthday" ], "Description": "Display the next birthday.", - "_Func": "yesno" + "_Func": "get_next_birthday", + "allowedGroups":[] }, { "Names": [ ".allBirthdays" ], "Description": "Get a list of all birthdays.", - "_Func": "yesno" + "_Func": "get_all_birthdays", + "allowedGroups":[] } ], "Miscellanious": [ @@ -180,35 +201,40 @@ ".tex" ], "Description": "Syntax: .tex <equation> Convert a typed equation into a rendered formula.", - "_Func": "yesno" + "_Func": "get_tex_formula", + "allowedGroups":[] }, { "Names": [ ".sips" ], "Description": "A simple drinking game. Hand out a number of sips. But be aware of backfiring.", - "_Func": "yesno" + "_Func": "sips", + "allowedGroups":[] }, { "Names": [ ".challenge" ], "Description": "Bored? Stuck in your own comfort-zone? Get a random challenge for the day! In cooperation with Jugendkirche Düsseldorf. Link: https://ejdus.de/einricht_gemeinden/jugendkirche/", - "_Func": "yesno" + "_Func": "get_random_challenge", + "allowedGroups":[] }, { "Names": [ ".roll" ], "Description": "Syntax: .roll <Range>. Roll a number in a set range. If no range is stated it will generate an integer in the interval 1 <= x < 100", - "_Func": "yesno" + "_Func": "roll", + "allowedGroups":[] }, { "Names": [ ".request" ], "Description": "Syntax: .request <String>. Do you wish for anything else? Request it!", - "_Func": "yesno" + "_Func": "request", + "allowedGroups":[] } ] } \ No newline at end of file diff --git a/mod_commands.py b/mod_commands.py new file mode 100644 index 0000000000000000000000000000000000000000..5dee6657dc2cf33eaba9634a3ee19c212da0b27c --- /dev/null +++ b/mod_commands.py @@ -0,0 +1,99 @@ +import json + + +class ModuleCommands: + def __init__(self, filename, FUN_DICT, log): + self.tag = "%20s - " % "mcommands" + self.log = log + self.filename = filename + self.FUN_DICT = FUN_DICT + self.help_dict = self.load_db() + + self.log.debug(f"{self.tag}Modul Commands geladen") + + def load_db(self): + help_dict = {} + try: + with open(self.filename, 'r', encoding='utf8') as f: + help_dict = json.load(f) + + except Exception as ex: + self.log.error( + f"{self.tag}Failed loading commands dict {self.filename}: {ex}") + + return help_dict + + def get_help_description(self, action, groupInfo): + answer =f'There is no entry for {action}' + try: + command = self.search_command(action, groupInfo) + if(command): + answer = f'Name(s): {", ".join(str(x) for x in command["Names"])}\n' + answer += f'Description: \n{command["Description"]}' + + except Exception as ex: + self.log.error( + f"{self.tag}Fucked up reading description of action:{action} - Exception:{ex}") + answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !" + + return answer + + def search_command(self, action, groupInfo): + try: + action = action.strip().lower() + if action[0]!= ".": + action =f".{action}" + + for category in self.help_dict: + for command in self.help_dict[category]: + if action in [x.lower() for x in command["Names"]] and (groupInfo is None or groupInfo["NAME"] in command["allowedGroups"] or command["allowedGroups"]==[]): + return command + + if not "echo" in action and action[1:] in self.FUN_DICT: + return self.search_command("echo", groupInfo) + + except Exception as ex: + self.log.error( + f"{self.tag}Fucked up checking for action:{action} - Exception:{ex}") + + return None + + def get_all_commands(self, groupInfo): + answer = '' + try: + for category in self.help_dict: + cmdList='' + for command in self.help_dict[category]: + cmds = [] + for cmd in command["Names"]: + if (groupInfo is None or groupInfo["NAME"] in command["allowedGroups"] or command["allowedGroups"]==[]): + cmds.append(cmd) + if len(cmds)>0: + cmdList += f'{", ".join(str(x) for x in cmds)}\n' + if len(cmdList) >0: + answer += f'## {category} ##\n' + answer+= cmdList + answer += '\n' + + if answer == '': + answer += f'There is no help!' + + except Exception as ex: + self.log.error( + f"{self.tag}Fucked up checking for all commands - Exception:{ex}") + answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !" + + return answer + + def get_function(self, msgDict): + try: + command = self.search_command(msgDict["action"], msgDict["groupInfo"]) + if command: + return command["_Func"] + return "unknown_command" + + + except Exception as ex: + self.log.error( + f"{self.tag}Fucked up getting function of action:{action} - Exception:{ex}") + return "unknown_command" \ No newline at end of file diff --git a/mod_help.py b/mod_help.py deleted file mode 100644 index a39fe3755cf419c59c320b392ef67996fb9d83f3..0000000000000000000000000000000000000000 --- a/mod_help.py +++ /dev/null @@ -1,75 +0,0 @@ -import json - - -class ModuleHelp: - def __init__(self, filename, log): - self.tag = "%20s - " % "mhelp" - self.log = log - self.filename = filename - - self.help_dict = self.load_db() - - self.log.debug(f"{self.tag}Modul Help geladen") - - def load_db(self): - help_dict = {} - try: - with open(self.filename, 'r', encoding='utf8') as f: - help_dict = json.load(f) - - except Exception as ex: - self.log.error( - f"{self.tag}Failed loading help dict {self.filename}: {ex}") - - return help_dict - - def search_command(self, keyword, groupInfo): - answer = '' - try: - keyword = keyword.strip().lower() - if keyword[0]!= ".": - keyword =f".{keyword}" - - for category in self.help_dict: - for command in self.help_dict[category]: - if keyword in [x.lower() for x in command["Names"]] and (groupInfo is None or keyword[1:].lower() in groupInfo["COMMANDS"]): - answer += f'Name(s): {", ".join(str(x) for x in command["Names"])}\n' - answer += f'Description: \n{command["Description"]}' - break - - if answer == '': - answer += f'There is no entry for {keyword}' - - except Exception as ex: - self.log.error( - f"{self.tag}Fucked up checking for keyword:{keyword} Exception:{ex}") - answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !" - - return answer - - def get_all_commands(self, groupInfo): - answer = '' - try: - for category in self.help_dict: - cmdList='' - for command in self.help_dict[category]: - cmds = [] - for cmd in command["Names"]: - if (groupInfo is None or cmd[1:].lower() in groupInfo["COMMANDS"]): - cmds.append(cmd) - if len(cmds)>0: - cmdList += f'{", ".join(str(x) for x in cmds)}\n' - if len(cmdList) >0: - answer += f'## {category} ##\n' - answer+= cmdList - answer += '\n' - - if answer == '': - answer += f'There is no help!' - - except Exception as ex: - self.log.error( - f"{self.tag}Fucked up checking for keyword:{keyword} Exception:{ex}") - answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !" - - return answer diff --git a/signalbot.py b/signalbot.py index 8164cbdea90330b1522b02553f6513356e16e03d..09e955b042e6331f9fd6034c8382d8c12deda128 100755 --- a/signalbot.py +++ b/signalbot.py @@ -20,7 +20,7 @@ from mod_birthdayreminder import ModuleBirthdayReminder from mod_challenge import ModuleChallenge from mod_freegames import ModuleFreeGames from mod_genderneutral import ModuleGenderneutral -from mod_help import ModuleHelp +from mod_commands import ModuleCommands from mod_quotes import ModuleQuotes from mod_tex import ModuleTex from mod_eventreminder import ModuleEventReminder @@ -62,7 +62,7 @@ games = None challenges = None birthday_reminder = None tex = None -help = None +commands = None event_reminder = None translator = None today = None @@ -131,22 +131,47 @@ def handle_action(timestamp, source, groupID, message, attachments): print(groupID) print(message) print(attachments) - receiver = source + + msgDict={ + "timestamp":timestamp, + "source":source, + "groupID":groupID, + "attachments":attachments, + "receiver":source + } groupInfo = None if len(groupID) > 0: - receiver = groupID + msgDict["receiver"]=groupID # wenn gruppe, dann berechtigungsobjekt suchen um die rechte zu beschneiden for group in GROUPS: if group["ID"] == groupID: - groupInfo = group + msgDict["groupInfo"] = group break + try: + message = message[1:].strip() + msg_splitted = message.split(" ") + msgDict["action"] = msg_splitted[0].lower() + msgDict["content"] = " ".join(str(x) for x in msg_splitted[1:]).strip() + if len(msgDict["action"]) == 0: + return + + globals()[commands.get_function(msgDict)](msgDict) + + except Exception as ex: + log.critical(f'Unknown error:"{ex}", timestamp="{timestamp}", source="{source}", groupID="{groupID}", ' + f'message="{message}", attachments="{attachments}"') + + ######## + + ''' try: message = message[1:].strip() msg_splitted = message.split(" ") action = msg_splitted[0].lower() if len(action) == 0: return + if action in ["help", "list"]: help_func(receiver, " ".join(str(x) for x in msg_splitted[1:]).strip(), groupInfo) elif action == "remusfeinste" and (groupInfo is None or action in groupInfo["COMMANDS"]): @@ -160,7 +185,7 @@ def handle_action(timestamp, source, groupID, message, attachments): elif action == "links" and (groupInfo is not None and action in groupInfo["COMMANDS"]): links(receiver, groupInfo) elif action in FUN_DICT: - send(FUN_DICT[action], receiver) + echo(action, receiver) elif (action in ["savequote", "addquote", "createquote"]) and ( groupInfo is not None and action in groupInfo["COMMANDS"]): save_quote(receiver, " ".join(str(x) for x in msg_splitted[1:]), groupInfo) @@ -208,7 +233,7 @@ def handle_action(timestamp, source, groupID, message, attachments): except Exception as ex: log.critical(f'Unknown error:"{ex}", timestamp="{timestamp}", source="{source}", groupID="{groupID}", ' f'message="{message}", attachments="{attachments}"') - + ''' def send(message, receiver): if not receiver: @@ -251,16 +276,20 @@ def send_a(message, receiver, attachment): break send(err_message, request_group["ID"]) -def help_func(receiver, message, groupInfo): + +def echo (msgDict): + send(FUN_DICT[msgDict["action"]], msgDict["receiver"]) + +def help_func(msgDict): answer = "" - if len(message) > 0: - answer = help.search_command(message, groupInfo) + if len(msgDict["content"]) > 0: + answer = commands.get_help_description(msgDict["content"], msgDict["groupInfo"]) else: - answer = help.get_all_commands(groupInfo) - send(answer, receiver) + answer = commands.get_all_commands(msgDict["groupInfo"]) + send(answer, msgDict["receiver"]) -def remus_feinste(receiver): +def remus_feinste(msgDict): message = "- 1,5l Weißwein\n" \ "- 2,5l Rotwein\n" \ "- Obst nach Geschmack (bspw.: grüne Äpfel und Orangen)\n" \ @@ -269,10 +298,10 @@ def remus_feinste(receiver): "- Gran Manier (Orangenlikör) is beste\n" \ "- Fanta / O-Saft\n" \ "Originalrezept von Onkel Remus\n" - send(message, receiver) + send(message, msgDict["receiver"]) -def true_american(receiver): +def true_american(msgDict): message = "True American Regeln: So funktioniert das Spiel aus New Girl\n\n" \ "- Sie nun folgende Utensilien: Mindestens zwei weitere Mitspieler, drei Dosen Bier pro Spieler, eine Flasche Schnaps, einen Mülleimer, sowie einen Raum mit Möbeln und einem großen Tisch, den Sie am nächsten Tag mit Sicherheit putzen müssen. \n\n" \ "- Stellen Sie die Schnapsflasche, den \"König\", in die Mitte des Tisches und die Dosenbiere (die \"Soldaten\") um den König herum, um ihn zu beschützen. Platzieren Sie die Möbel im Raum in vier Zonen kreisförmig um den Tisch herum, sodass Sie sich bewegen können, ohne den Boden zu berühren, denn: Der Boden ist Lava! \n\n" \ @@ -290,33 +319,29 @@ def true_american(receiver): "-Die wichtigste Regeln bei True American: Alles was bei True American gesagt wird, ist angeblich eine Lüge und es geht nicht um das Gewinnen, sondern darum, ein richtiger Amerikaner zu sein. \n\n\n" \ "#DankeFocus: https://praxistipps.focus.de/true-american-regeln-so-funktioniert-das-spiel-aus-new-girl_126279\n\n" \ "https://www.trueamericanrules.com/working-rules/" - send_a(message, receiver, '/home/pi/signalbot/true_american_layout.png') + send_a(message, msgDict["receiver"], '/home/pi/signalbot/true_american_layout.png') -def yes_no_wtf(receiver, action): +def yes_no_wtf(msgDict): response = str(requests.get("https://yesno.wtf/api").content) result = response[2:-1] json_response = json.loads(result) img_data = requests.get(json_response["image"]).content with open('yn.gif', 'wb') as handler: handler.write(img_data) - send_a(json_response["answer"], receiver, '/home/pi/signalbot/yn.gif') + send_a(json_response["answer"], msgDict["receiver"], '/home/pi/signalbot/yn.gif') -def dadjoke(receiver): +def dadjoke(msgDict): response = requests.get(f"https://icanhazdadjoke.com", headers={"Accept": "application/json"}) result = response.json() - send(result["joke"], receiver) - + send(result["joke"], msgDict["receiver"]) -def next_event(receiver): - send("", receiver) - -def links(receiver, groupInfo): +def links(msgDict): links = {} - if groupInfo is not None and "LINKS" in groupInfo: - links = groupInfo["LINKS"] + if msgDict["groupInfo"] is not None and "LINKS" in msgDict["groupInfo"]: + links = msgDict["groupInfo"]["LINKS"] if len(links) == 0: message = "Keine Links hinterlegt!" @@ -336,36 +361,36 @@ def links(receiver, groupInfo): message += "\n" message += "\n" - send(message, receiver) + send(message, msgDict["receiver"]) -def save_quote(receiver, quote_line, groupInfo): - send(quotes.save_quote(quote_line, groupInfo), receiver) +def save_quote(msgDict): + send(quotes.save_quote(msgDict["content"], msgDict["groupInfo"]), msgDict["receiver"]) -def random_quote(receiver, groupInfo): - send(quotes.get_random_quote(groupInfo), receiver) +def random_quote(msgDict): + send(quotes.get_random_quote(msgDict["groupInfo"]), msgDict["receiver"]) -def credits(receiver): +def credits(msgDict): message = "Made with ☕ and ❤️\n" \ "by Frederic Aust & Philip Maas\n" \ "Git: https://gitlab.cvh-server.de/faust/signalbot \n" \ "Licence: AGPL v3" - send(message, receiver) + send(message, msgDict["receiver"]) -def free_games(receiver): - games.freegames(receiver) +def free_games(msgDict): + games.freegames(msgDict["receiver"]) -def genderneutral(receiver, badstring): +def genderneutral(msgDict): global gn - message = gn.search_in_db(badstring) - send(message, receiver) + message = gn.search_in_db(msgDict["content"]) + send(message, msgDict["receiver"]) -def sips(receiver): +def sips(msgDict): ex = random.randrange(0, 33) amount_sips = random.randrange(1, 10) @@ -381,11 +406,12 @@ def sips(receiver): message += "einen Schluck!" else: message += f"{amount_sips} Schlücke!" - send(message, receiver) + send(message, msgDict["receiver"]) -def roll(receiver, range): +def roll(msgDict): message = "" + range = msgDict["content"] if not range: range = "1-100" try: @@ -400,10 +426,10 @@ def roll(receiver, range): except Exception: message = "Rangesyntax invalid! exp.: 1-100" - send(message, receiver) + send(message, msgDict["receiver"]) -def request(receiver, message): +def request(msgDict): answer = "" request_group = None for group in GROUPS: @@ -411,70 +437,70 @@ def request(receiver, message): request_group = group break - if not message: + if not msgDict["content"]: answer = "Was soll denn hinzugefügt werden?" else: answer = "Besten Dank! Die Anfrage wurde weitergeleitet." - send(answer, receiver) - send(message, request_group["ID"]) + send(answer, msgDict["receiver"]) + send(msgDict["content"], request_group["ID"]) -def get_random_challenge(receiver): +def get_random_challenge(msgDict): global challenges message = "Keine Challenge verfügbar - bitte melde dich bei uns per .request !" if challenges: message = challenges.get_random_challenge() - send(message, receiver) + send(message, msgDict["receiver"]) -def save_birthday(receiver, birthday_line, groupInfo): - send(birthday_reminder.save_birthday(birthday_line, groupInfo), receiver) +def save_birthday(msgDict): + send(birthday_reminder.save_birthday(msgDict["content"], msgDict["groupInfo"]), msgDict["receiver"]) -def get_all_birthdays(receiver, groupInfo): - send(birthday_reminder.get_birthdaylist(groupInfo), receiver) +def get_all_birthdays(msgDict): + send(birthday_reminder.get_birthdaylist(msgDict["groupInfo"]), msgDict["receiver"]) -def get_next_birthday(receiver, groupInfo): - send(birthday_reminder.get_next_birthday(groupInfo), receiver) +def get_next_birthday(msgDict): + send(birthday_reminder.get_next_birthday(msgDict["groupInfo"]), msgDict["receiver"]) -def save_event(receiver, event_line, groupInfo): - send(event_reminder.save_event(event_line, groupInfo), receiver) +def save_event(msgDict): + send(event_reminder.save_event(msgDict["content"], msgDict["groupInfo"]), msgDict["receiver"]) -def get_all_events(receiver, groupInfo): - send(event_reminder.get_eventlist(groupInfo), receiver) +def get_all_events(msgDict): + send(event_reminder.get_eventlist(msgDict["groupInfo"]), msgDict["receiver"]) -def get_next_event(receiver, groupInfo): - send(event_reminder.get_next_event(groupInfo), receiver) +def get_next_event(msgDict): + send(event_reminder.get_next_event(msgDict["groupInfo"]), msgDict["receiver"]) -def unknown_command(receiver, message): - log.debug(f'Unknown action: {message} from: {receiver}') - send(f'Das habe ich nicht verstanden: "{message}"', receiver) +def unknown_command(msgDict): + log.debug(f'Unknown action: {msgDict["action"]} {msgDict["content"]} from: {msgDict["receiver"]}') + send(f'Das habe ich nicht verstanden: "{msgDict["action"]} {msgDict["content"]}" ', msgDict["receiver"]) -def get_tex_formula(receiver, message): - send_a(message, receiver, tex.create_formula(message)) +def get_tex_formula(msgDict): + send_a(msgDict["content"], msgDict["receiver"], tex.create_formula(msgDict["content"])) -def get_deepl_translation(receiver, message): +def get_deepl_translation(msgDict): if translator is None: - send("There is no translator available!", receiver) + send("There is no translator available!", msgDict["receiver"]) return - splitted = message.strip().split(",") + splitted = msgDict["content"].strip().split(",") lang = splitted[0].upper() text = ",".join(str(x) for x in splitted[1:]).strip() try: result = translator.translate_text(text, target_lang=lang) except Exception as ex: - send(f'{ex}', receiver) + send(f'{ex}', msgDict["receiver"]) return answer = "Computer says no" @@ -483,14 +509,14 @@ def get_deepl_translation(receiver, message): answer += text + "\n\n" answer += result.text - send(answer, receiver) + send(answer, msgDict["receiver"]) -def get_kings_cup(receiver): - send_a("Don't drink and derive!",receiver, "/home/pi/signalbot/kings_cup_regeln.png") +def get_kings_cup(msgDict): + send_a("Don't drink and derive!",msgDict["receiver"], "/home/pi/signalbot/kings_cup_regeln.png") -def get_today(receiver): - send(today.getTodayMessage(), receiver) +def get_today(msgDict): + send(today.getTodayMessage(), msgDict["receiver"]) def on_mqtt_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) @@ -503,7 +529,7 @@ def mqtt_client(): client2.username_pw_set(MQTT_USER, MQTT_PWD) client2.connect(MQTT_IP, MQTT_PORT, MQTT_TIMEOUT) # TODO Topics und receiver in config auslagern, um dynamischer zu subscriben - client2.subscribe("test/temperature") + client2.subscribe("Sensoren/Arbeitszimmer/temperature") client2.loop_forever() @@ -521,7 +547,7 @@ def init_schedule_jobs(): schedule.every().day.at("09:00").do(run_threaded, event_reminder.check_for_events) schedule.every().tuesday.at("10:00").do(run_threaded, gg_remind_schichten) schedule.every().day.at("11:00").do(run_threaded, gg_remind_stundenzettel) - schedule.every().day.at("04:00").do(run_threaded,today.update()) + schedule.every().day.at("13:00").do(run_threaded,today.update) # schedule.every(10).seconds.do(run_threaded, birthday_reminder.check_for_birthdays) @@ -545,7 +571,6 @@ def gg_remind_stundenzettel(): elif today == 30: send("too late suckaaa", gg_group["ID"]) - def start_schedule(): while True: schedule.run_pending() @@ -566,7 +591,7 @@ if __name__ == "__main__": challenges = ModuleChallenge('/home/pi/signalbot/challenge.json', log) birthday_reminder = ModuleBirthdayReminder(GROUPS, send, log) tex = ModuleTex(log) - help = ModuleHelp('/home/pi/signalbot/betterhelp.json', log) + commands = ModuleCommands('/home/pi/signalbot/commands.json',FUN_DICT, log) event_reminder = ModuleEventReminder(GROUPS, send, log) today = ModuleToday(log) loop = GLib.MainLoop() @@ -575,9 +600,9 @@ if __name__ == "__main__": signal = bus.get('org.asamk.Signal') signal.onMessageReceived = handle_action - mqtt_thread = Thread(target=mqtt_client) - mqtt_thread.start() - print("mqtt_thread started") + # mqtt_thread = Thread(target=mqtt_client) + # mqtt_thread.start() + # print("mqtt_thread started") init_schedule_jobs() schedule_thread = Thread(target=start_schedule)