diff --git a/FaustBot/FaustBot.py b/FaustBot/FaustBot.py index 4b12fff..1d42381 100644 --- a/FaustBot/FaustBot.py +++ b/FaustBot/FaustBot.py @@ -6,7 +6,7 @@ from FaustBot.Modules import ActivityObserver, IdentNickServObserver, GiveCookie UserList, WikiObserver, GiveDrinkObserver, GiveFoodObserver, ComicObserver, HelpObserver, \ IntroductionObserver, HangmanObserver, DuckObserver, AllSeenObserver, JokeObserver,TellObserver, WordRunObserver,\ GiveIceObserver, GiveDrinkToObserver, Greeter, MathRunObserver, PartyObserver, PrideObserver, SnacksObserver, \ - BlockObserver, LetterObserver, DiceObserver, First_Greeter, CharactersCountObserver + BlockObserver, LetterObserver, DiceObserver, First_Greeter, CharactersCountObserver, BastelObserver from FaustBot.Modules.CustomUserModules import GlossaryModule, ICDObserver, ModmailObserver from FaustBot.Modules.ModuleType import ModuleType @@ -63,6 +63,7 @@ class FaustBot(object): self.add_module(LetterObserver.LetterObserver()) self.add_module(DiceObserver.DiceObserver()) self.add_module(CharactersCountObserver.CharactersCountObserver()) + self.add_module(BastelObserver.BastelObserver()) def run(self): self._setup() running = True @@ -100,6 +101,6 @@ class FaustBot(object): if module_type == ModuleType.ON_NOTICE: return self._connection.notice_observable - + if module_type == ModuleType.ON_MAGIC_NUMBER: return self._connection.magic_number_observable diff --git a/FaustBot/Modules/BastelObserver.py b/FaustBot/Modules/BastelObserver.py new file mode 100644 index 0000000..58aeebe --- /dev/null +++ b/FaustBot/Modules/BastelObserver.py @@ -0,0 +1,71 @@ +from time import sleep +from wikipedia import wikipedia +from FaustBot.Communication import Connection +from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype + + +class BastelObserver(PrivMsgObserverPrototype): + def __init__(self): + super().__init__() + self.annoyed: int = 0 + + @staticmethod + def cmd(): + """ + @name cmd + @brief Register the commands to act on + + Args: + @param + Returns: + listener Python list with strings to listen for. + """ + listener = [".craft"] + + return listener + + @staticmethod + def help(): + return ".craft - Botty bastelt etwas" + + def update_on_priv_msg(self, data: dict, connection: Connection): + """ + @name update_on_priv_msg + @brief Handle botty's crafting process + + Args: + @param self@param data: dict@param connection: Connection + Returns: + + """ + if data['message'].find('.craft') == -1: + return + + # Start not more than one process with a longer iteration (15 seconds) + if self.annoyed > 0: + if self.annoyed == 1: + connection.send_back("Lass mich in Ruhe arbeiten!", data) + elif self.annoyed == 2: + connection.send_back("Ich muss mich konzentrieren!", data) + elif self.annoyed == 3: + connection.send_back("So kann ich nicht arbeiten!", data) + else: + connection.send_back("\001ACTION wirft mit Werkzeug um sich!\001", data) + + # Bot is getting more annoyed when hit on multiple times + # self.annoyed is again checked against zero, as it's more likely to prevent a deadlock + if self.annoyed > 0: + self.annoyed = self.annoyed + 1 + else: + self.annoyed = 1 + connection.send_back("\001ACTION rennt in die Werkstatt.\001", data) + sleep(10) + connection.send_back("\001ACTION poltert herum.", data) + + # Determine, what Botty has built (random wikipedia article) + wikipedia.set_lang('de') + crafted_object = wikipedia.random(1) + sleep(5) + connection.send_back( + f"\001ACTION kommt zurück und hat {crafted_object} gebastelt.\001", data) + self.annoyed = 0