From 01e1f4db22727c452ad3622fc7084fd1a16fe0b4 Mon Sep 17 00:00:00 2001 From: yannickreiss Date: Sat, 10 Feb 2024 20:49:15 +0100 Subject: [PATCH 1/4] Botties Bastelstunde, jetzt in Farbe --- FaustBot/Modules/BastelObserver.py | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 FaustBot/Modules/BastelObserver.py diff --git a/FaustBot/Modules/BastelObserver.py b/FaustBot/Modules/BastelObserver.py new file mode 100644 index 0000000..08b733d --- /dev/null +++ b/FaustBot/Modules/BastelObserver.py @@ -0,0 +1,47 @@ +from time import sleep +from wikipedia import wikipedia +from FaustBot.Communication import Connection +from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype + + +class JokeObserver(PrivMsgObserverPrototype): + @staticmethod + def cmd(): + """ + @name cmd + @brief Register the commands to act on + + Args: + @param + Returns: + listener Python list with strings to listen for. + """ + listener = [".basteln", ".craft"] + + return listener + + @staticmethod + def help(): + return ".basteln - 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 + connection.send_back("/me rennt in die Werkstatt!", data) + sleep(5) + connection.send_back("/me poltert herum!", data) + + # Determine, what Botty has built (random wikipedia article) + erdbeerstreusel = wikipedia.random(1) + sleep(5) + connection.send_back( + f"/me kommt zurück und hat {erdbeerstreusel} gebastelt.", data) From 2863742be6817680de58adeb053b9c4ec4ff9629 Mon Sep 17 00:00:00 2001 From: yannickreiss Date: Sat, 10 Feb 2024 21:03:54 +0100 Subject: [PATCH 2/4] Now with correct Actions --- FaustBot/Modules/BastelObserver.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/FaustBot/Modules/BastelObserver.py b/FaustBot/Modules/BastelObserver.py index 08b733d..e3bca70 100644 --- a/FaustBot/Modules/BastelObserver.py +++ b/FaustBot/Modules/BastelObserver.py @@ -36,12 +36,12 @@ class JokeObserver(PrivMsgObserverPrototype): """ if data['message'].find('.craft') == -1: return - connection.send_back("/me rennt in die Werkstatt!", data) + connection.send_back("\001ACTION rennt in die Werkstatt!\001", data) sleep(5) - connection.send_back("/me poltert herum!", data) + connection.send_back("\001ACTION poltert herum!", data) # Determine, what Botty has built (random wikipedia article) - erdbeerstreusel = wikipedia.random(1) + spiegelei = wikipedia.random(1) sleep(5) connection.send_back( - f"/me kommt zurück und hat {erdbeerstreusel} gebastelt.", data) + f"\001ACTION kommt zurück und hat {spiegelei} gebastelt.\001", data) From 692772816e80b2c614ba0a2275f0f6fb9fbf6d3a Mon Sep 17 00:00:00 2001 From: yannickreiss Date: Sun, 11 Feb 2024 12:11:39 +0100 Subject: [PATCH 3/4] Connect module to FaustBot --- FaustBot/FaustBot.py | 5 +++-- FaustBot/Modules/BastelObserver.py | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) 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 index e3bca70..a6db6f7 100644 --- a/FaustBot/Modules/BastelObserver.py +++ b/FaustBot/Modules/BastelObserver.py @@ -4,7 +4,7 @@ from FaustBot.Communication import Connection from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype -class JokeObserver(PrivMsgObserverPrototype): +class BastelObserver(PrivMsgObserverPrototype): @staticmethod def cmd(): """ @@ -16,13 +16,13 @@ class JokeObserver(PrivMsgObserverPrototype): Returns: listener Python list with strings to listen for. """ - listener = [".basteln", ".craft"] + listener = [".craft"] return listener @staticmethod def help(): - return ".basteln - Botty bastelt etwas" + return ".craft - Botty bastelt etwas" def update_on_priv_msg(self, data: dict, connection: Connection): """ @@ -41,7 +41,7 @@ class JokeObserver(PrivMsgObserverPrototype): connection.send_back("\001ACTION poltert herum!", data) # Determine, what Botty has built (random wikipedia article) - spiegelei = wikipedia.random(1) + crafted_object = wikipedia.random(1) sleep(5) connection.send_back( - f"\001ACTION kommt zurück und hat {spiegelei} gebastelt.\001", data) + f"\001ACTION kommt zurück und hat {crafted_object} gebastelt.\001", data) From 193bac751277cd55d07bdd1741c3aef5451b462c Mon Sep 17 00:00:00 2001 From: yannickreiss Date: Sun, 11 Feb 2024 12:34:24 +0100 Subject: [PATCH 4/4] DDOS/Spam protection --- FaustBot/Modules/BastelObserver.py | 40 ++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/FaustBot/Modules/BastelObserver.py b/FaustBot/Modules/BastelObserver.py index a6db6f7..58aeebe 100644 --- a/FaustBot/Modules/BastelObserver.py +++ b/FaustBot/Modules/BastelObserver.py @@ -5,6 +5,10 @@ from FaustBot.Modules.PrivMsgObserverPrototype import PrivMsgObserverPrototype class BastelObserver(PrivMsgObserverPrototype): + def __init__(self): + super().__init__() + self.annoyed: int = 0 + @staticmethod def cmd(): """ @@ -36,12 +40,32 @@ class BastelObserver(PrivMsgObserverPrototype): """ if data['message'].find('.craft') == -1: return - connection.send_back("\001ACTION rennt in die Werkstatt!\001", data) - sleep(5) - connection.send_back("\001ACTION poltert herum!", data) - # Determine, what Botty has built (random wikipedia article) - crafted_object = wikipedia.random(1) - sleep(5) - connection.send_back( - f"\001ACTION kommt zurück und hat {crafted_object} gebastelt.\001", data) + # 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