from .base import BaseModule import random import time RHYMES_FILE = "rhymes.txt" class RhymesModule(BaseModule): rhymes_keys: dict = {} rhyme_strings: dict = {} cooldown: dict = {} def load(self): with open(RHYMES_FILE, "r", encoding="utf-8") as f: data = f.read() keys_start = data.index("[KEYS]") + len("[KEYS]\n") keys_end = data.index("[RHYMES]") keys_data = data[keys_start:keys_end].split("\n") keys = {} for key_data in keys_data: if key_data: k, v = key_data.split(":") keys[k] = v.split(",") rhymes_start = data.index("[RHYMES]") + len("[RHYMES]\n") rhymes_data = data[rhymes_start:].split("\n") rhymes = {} for rhyme_data in rhymes_data: if rhyme_data: k, v = rhyme_data.split(":") rhymes[k] = v.split(",") self.rhyme_keys = keys self.rhyme_strings = rhymes def get_last_word(self, ch: str) -> str: truncated = ch while True: if len(truncated) < 2 or truncated[-1].isnumeric(): return "" if truncated[-1].isalpha() and truncated[-2].isalpha(): break truncated = truncated[:-1] return truncated def poil_auquel(self, ch: str) -> str: for key in self.rhyme_keys: if ch.endswith(tuple(self.rhyme_keys[key])): return random.choice(self.rhyme_strings[key]) return "" async def handle_message(self, message): message_content = message.content.lower() last_word = self.get_last_word(message_content) if message.author != self._client.user and last_word: poil = self.poil_auquel(last_word) # cooldown = 0 # if message.channel in self.cooldown: # cooldown = self.cooldown[message.channel] cooldown = self.cooldown.get(message.channel, 0) if poil and time.time() - cooldown > 0: wait_time = random.randint(0, 900) if bool(random.getrandbits(1)): wait_time = random.randint(900, 10800) self.cooldown[message.channel] = time.time() + wait_time await message.channel.send(poil) return