From 03d41b4104454b6ef3a069d149c5f85dec88e551 Mon Sep 17 00:00:00 2001 From: Lendemor Date: Sat, 17 Jun 2023 16:20:30 +0200 Subject: [PATCH] further improvement --- main.py | 15 +-- modules/__init__.py | 2 + modules/base.py | 7 +- modules/fouras.py | 29 ++++- modules/rhymes.py | 34 +---- parser_txt_to_json.py | 18 +++ rhymes.json | 290 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 348 insertions(+), 47 deletions(-) create mode 100644 parser_txt_to_json.py create mode 100644 rhymes.json diff --git a/main.py b/main.py index cc0f81d..ff6c3e5 100644 --- a/main.py +++ b/main.py @@ -1,14 +1,5 @@ -from discord.ext import tasks -from datetime import datetime, timedelta, timezone from dotenv import load_dotenv import discord -import os -import asyncio -import random -import re -import json -import time -import unidecode from modules.base import BaseModule from modules import FourasModule, RhymesModule @@ -49,11 +40,13 @@ async def on_message(message): message.author == client.user and message.channel in client.ongoing_riddles ): # need to move a part of that block in FourasModule current_riddle = client.ongoing_riddles[message.channel] - if not ("message" in current_riddle): + if "message" not in current_riddle: current_riddle["message"] = message return - if isinstance(message.channel, (discord.DMChannel, discord.TextChannel, discord.Thread)): + if isinstance( + message.channel, (discord.DMChannel, discord.TextChannel, discord.Thread) + ): for m in client.modules: await m.handle_message(message) diff --git a/modules/__init__.py b/modules/__init__.py index 55aaac1..1958e88 100644 --- a/modules/__init__.py +++ b/modules/__init__.py @@ -1,2 +1,4 @@ from .fouras import FourasModule from .rhymes import RhymesModule + +ALL = [FourasModule, RhymesModule] diff --git a/modules/base.py b/modules/base.py index 4e760dd..5f0e647 100644 --- a/modules/base.py +++ b/modules/base.py @@ -1,6 +1,7 @@ -ENCODING = "utf-8" import discord +ENCODING = "utf-8" + class BaseModule: _client = None @@ -19,4 +20,6 @@ class BaseModule: dm_channel = await self._client.fetch_channel(channel.id) return "[DM={0}]".format(dm_channel.recipient.name) else: - return "[Server={0}] => [Channel={1}]".format(channel.guild.name, channel.name) + return "[Server={0}] => [Channel={1}]".format( + channel.guild.name, channel.name + ) diff --git a/modules/fouras.py b/modules/fouras.py index 23274cb..2d5adb2 100644 --- a/modules/fouras.py +++ b/modules/fouras.py @@ -5,6 +5,19 @@ import time import json from unidecode import unidecode +API_URL = "".join( + [ + "https://discord.com/api/oauth2/authorize?", + "client_id=1110208055171367014&permissions=274877975552&scope=bot", + ] +) + +ABOUT = """ +Ce bot a été développé par {user} +Code Source : https://gitlab.epicsparrow.com/Anselme/perefouras +Ajouter ce bot à votre serveur : {url} +""" + class FourasModule(BaseModule): def load(self): @@ -83,7 +96,8 @@ class FourasModule(BaseModule): await message.channel.send(self.new_riddle(message.channel, index)) else: await message.channel.send( - f"Numéro d'énigme invalide, merci de saisir un numéro entre 1 et {len(self._client.riddles)}" + "Numéro d'énigme invalide, merci de saisir un numéro ", + f"entre 1 et {len(self._client.riddles)}", ) return if message_content == "fouras": @@ -101,16 +115,14 @@ class FourasModule(BaseModule): return if message_content == "about fouras": - author_user = await self.client.fetch_user(151626081458192384) - await message.channel.send( - f"Ce bot a été développé par {author_user.mention}\nCode Source : https://gitlab.epicsparrow.com/Anselme/perefouras\nAjouter ce bot à votre serveur : https://discord.com/api/oauth2/authorize?client_id=1110208055171367014&permissions=274877975552&scope=bot" - ) + author_user = await self._client.fetch_user(151626081458192384) + await message.channel.send(ABOUT.format(user=author_user.mention, url=API_URL)) return if message_content == "debug fouras": dump = {} cooldowns = {} - for key, value in self.client.cooldown.items(): + for key, value in self._client.cooldown.items(): channel_name = await self.get_channel_name(key) cooldowns[channel_name] = value - time.time() dump["poil_au_cooldown"] = cooldowns @@ -132,7 +144,10 @@ class FourasModule(BaseModule): if unidecode(answer.lower()) in unidecode(message_content): current_riddle["solver"] = message.author - await message.channel.send(f"Bravo {message.author.mention} ! La réponse était bien `{answer}`.") + await message.channel.send( + f"Bravo {message.author.mention} ! ", + f"La réponse était bien `{answer}`.", + ) await current_riddle["message"].edit(content=self.format_message(current_riddle)) self.finish_riddle(message.channel) return diff --git a/modules/rhymes.py b/modules/rhymes.py index f3a0cb8..861ce4f 100644 --- a/modules/rhymes.py +++ b/modules/rhymes.py @@ -1,38 +1,18 @@ from .base import BaseModule import random import time +import json RHYMES_FILE = "rhymes.txt" class RhymesModule(BaseModule): - rhymes_keys: dict = {} - rhyme_strings: dict = {} + rhymes: 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 + with open("rhymes.json", "r") as f: + self.rhymes = json.load(f) def get_last_word(self, ch: str) -> str: truncated = ch @@ -45,9 +25,9 @@ class RhymesModule(BaseModule): 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]) + for key in self.rhymes: + if ch.endswith(tuple(self.rhymes[key]["keys"])): + return random.choice(self.rhymes[key]["rhymes"]) return "" async def handle_message(self, message): diff --git a/parser_txt_to_json.py b/parser_txt_to_json.py new file mode 100644 index 0000000..f13b907 --- /dev/null +++ b/parser_txt_to_json.py @@ -0,0 +1,18 @@ +import json + +with open("rhymes.txt", "r") as f: + key = "" + res = {} + lines = [line.strip("\n") for line in f.readlines()] + for line in lines: + if line == "[KEYS]": + key = "keys" + elif line == "[RHYMES]": + key = "rhymes" + else: + k, v = line.split(":") + res.setdefault(k, {})[key] = v.split(",") + + +with open("rhymes.json", "w") as f: + json.dump(res, f, indent=2, ensure_ascii=False) diff --git a/rhymes.json b/rhymes.json new file mode 100644 index 0000000..8fe5ba8 --- /dev/null +++ b/rhymes.json @@ -0,0 +1,290 @@ +{ + "E": { + "keys": [ + "eu", + "eux" + ], + "rhymes": [ + "Poil aux cheveux." + ] + }, + "OUS": { + "keys": [ + "ous", + "ousse", + "ouce", + "ousses", + "ouces" + ], + "rhymes": [ + "Poil au pouce." + ] + }, + "US": { + "keys": [ + "us", + "+" + ], + "rhymes": [ + "Poil à l'anus." + ] + }, + "OU": { + "keys": [ + "ou", + "où", + "oo" + ], + "rhymes": [ + "Poil au cou.", + "Poil au genou." + ] + }, + "O": { + "keys": [ + "au", + "aux", + "o", + "os", + "oh", + "ho" + ], + "rhymes": [ + "Poil au dos." + ] + }, + "OL": { + "keys": [ + "ol", + "ols", + "ole", + "oles", + "olle", + "ollesaul", + "auls" + ], + "rhymes": [ + "Poil aux guiboles." + ] + }, + "OUL": { + "keys": [ + "oule", + "oules", + "oul", + "ouls" + ], + "rhymes": [ + "Poil à la moule.", + "Poil aux boules." + ] + }, + "ULVE": { + "keys": [ + "ulve", + "ulves" + ], + "rhymes": [ + "Poil à la vulve." + ] + }, + "OR": { + "keys": [ + "or", + "ors", + "ore", + "ores", + "aur", + "aurs" + ], + "rhymes": [ + "Poil au corps." + ] + }, + "IER": { + "keys": [ + "ier", + "iers", + "ierre", + "ierres", + "ayé" + ], + "rhymes": [ + "Poil au derrière." + ] + }, + "IEN": { + "keys": [ + "ien", + "iens", + "ient" + ], + "rhymes": [ + "Poil de chien." + ] + }, + "ET": { + "keys": [ + "et", + "é", + "er", + "è", + "ait", + "ais", + "ai", + "ez", + "ied", + "ieds" + ], + "rhymes": [ + "Poil au nez.", + "Poil aux pieds." + ] + }, + "OI": { + "keys": [ + "oi", + "oie", + "ois", + "oit", + "oa" + ], + "rhymes": [ + "Poil aux doigts." + ] + }, + "AN": { + "keys": [ + "an", + "ant", + "ants", + "en", + "ment", + "ments" + ], + "rhymes": [ + "Poil aux dents. " + ] + }, + "ESSE": { + "keys": [ + "esse", + "esses", + "aisse", + "aisses" + ], + "rhymes": [ + "Poil aux fesses." + ] + }, + "EL": { + "keys": [ + "el", + "els", + "elle", + "elles", + "aile", + "ailes" + ], + "rhymes": [ + "Poil aux aisselles." + ] + }, + "ACHE": { + "keys": [ + "ache", + "ach", + "ash" + ], + "rhymes": [ + "Poil de moustache." + ] + }, + "IN": { + "keys": [ + "in" + ], + "rhymes": [ + "Poil aux mains." + ] + }, + "TON": { + "keys": [ + "ton", + "tons", + "thons", + "thons" + ], + "rhymes": [ + "Poil au menton." + ] + }, + "ON": { + "keys": [ + "on", + "ont", + "onts", + "ons", + "ond", + "onds" + ], + "rhymes": [ + "Poil au fion." + ] + }, + "OUILLE": { + "keys": [ + "ouille", + "ouilles" + ], + "rhymes": [ + "Poil aux couilles." + ] + }, + "ATTE": { + "keys": [ + "atte", + "ate", + "ates", + "attes", + "âte", + "âtes", + "blyat" + ], + "rhymes": [ + "Poil à la chatte." + ] + }, + "A": { + "keys": [ + "a", + "à", + "ah", + "ha" + ], + "rhymes": [ + "Poil au bras." + ] + }, + "I": { + "keys": [ + "i", + "is", + "it" + ], + "rhymes": [ + "Poil à la vessie.", + "Poil au zizi." + ] + }, + "U": { + "keys": [ + "u", + "hu", + "uh" + ], + "rhymes": [ + "Poil au cul." + ] + } +} \ No newline at end of file