From 19b1f0eeea0343c3dc8d9cadc9bf4c7f43b6234c Mon Sep 17 00:00:00 2001 From: voXrey <72698969+voXrey@users.noreply.github.com> Date: Sun, 17 Dec 2023 00:33:27 +0100 Subject: [PATCH] - Update edt cog (command removed from main) - Update main - Add a parent class for cogs - Fixes --- .gitignore | 2 +- classes/my_cog.py | 17 ++++++++++ cogs/cog_edt.py | 61 +++++++++++++++++++++++++++++++--- main.py | 85 ++++++++++------------------------------------- 4 files changed, 92 insertions(+), 73 deletions(-) create mode 100644 classes/my_cog.py diff --git a/.gitignore b/.gitignore index 5d381cc..f295d3d 100644 --- a/.gitignore +++ b/.gitignore @@ -158,5 +158,5 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ diff --git a/classes/my_cog.py b/classes/my_cog.py new file mode 100644 index 0000000..9e8423f --- /dev/null +++ b/classes/my_cog.py @@ -0,0 +1,17 @@ +from discord.ext import commands +import discord + + +class MyCog(commands.Cog): + def __init__(self, bot: commands.Bot): + self.bot = bot + + async def cog_load(self): + print(f"{self.__class__.__name__} loaded!") + + async def cog_unload(self): + print(f"{self.__class__.__name__} unloaded!") + + +async def setup(bot): + await bot.add_cog(EDT(bot)) diff --git a/cogs/cog_edt.py b/cogs/cog_edt.py index 11e9535..826782a 100644 --- a/cogs/cog_edt.py +++ b/cogs/cog_edt.py @@ -1,11 +1,64 @@ +import discord +from discord import app_commands +from discord.app_commands import Choice from discord.ext import commands -class EDT: +from classes.my_cog import MyCog +from create_calendar import get_calendar, get_eleves, display +from io import BytesIO + + +class EDT(MyCog): def __init__(self, bot): + super().__init__(bot) + self.eleves = get_eleves() self.bot = bot - print("EDT loaded") + + @app_commands.command(name="edt") + @app_commands.choices(langues=[ + Choice(name='Anglais LV1, Autre ou Pas de LV2', value="EN"), + Choice(name='Anglais LV1, Allemand LV2', value="EN-DE"), + Choice(name='Anglais LV1, Espagnol LV2', value="EN-ES"), + Choice(name='Allemand LV1, Anglais LV2', value="DE-EN"), + Choice(name='Espagnol LV1, Anglais LV2', value="ES-EN") + ] + ) + @app_commands.describe(groupe="Votre groupe de colle, groupe ∈ ⟦1, 15⟧") + @app_commands.describe( + langues="Les options de langue que vous suivez. (Les langues suivies à H4 ne sont pas gérées, mettez 'Autres')") + @app_commands.describe(split="Créer deux fichiers différentes, un pour les colles et un pour le rest de l'EDT.") + async def edt( + self, + interaction: discord.Interaction, + groupe: app_commands.Range[int, 1, 15], + langues: Choice[str], + split: bool = False): + """ + Génère un emploi du temps prenant compte des colles, des langues et de la semaine. + """ + cal_list = get_calendar(str(groupe), langues.value, split) + fichiers = [] + + if split: + fichiers.append(discord.File(fp=BytesIO(cal_list[0]), filename=f"EDT-{groupe}-{langues.value}-WO.ics")) + fichiers.append(discord.File(fp=BytesIO(cal_list[1]), filename=f"Colles-{groupe}.ics")) + + message = f""" + \nVotre emploi du temps (`EDT-{groupe}-{langues.value}-WO.ics`) pour le groupe `{groupe}`, `{langues.name}` au format `.ics` a bien été généré, **sans les colles** + \n\nLes colles ont été généré séparemment pour le groupe `{groupe}` : `Colles-{groupe}.ics` + \n\nVous pouvez importer ces fichiers dans la plupart des calendriers, mais il est recommandé de créer un nouveau sous-calendrier pour facilement pouvoir le changer. + """ + + else: + fichiers.append(discord.File(fp=BytesIO(cal_list[0]), filename=f"EDT-{groupe}-{langues.value}.ics")) + message = f""" + \nVotre emploi du temps (`EDT-{groupe}-{langues.value}.ics`) pour le groupe `{groupe}`, `{langues.name}` au format `.ics` a bien été généré, **avec les colles** + \n\nVous pouvez importer ces fichiers dans la plupart des calendriers, mais il est recommandé de créer un nouveau sous-calendrier pour facilement pouvoir le changer. + """ + + await interaction.response.send_message(message, files=fichiers) -def setup(bot): - bot.add_cog(EDT(bot)) +async def setup(bot): + await bot.add_cog(EDT(bot)) diff --git a/main.py b/main.py index 9371f43..43e54f2 100644 --- a/main.py +++ b/main.py @@ -1,89 +1,38 @@ from typing import Optional, List -from io import BytesIO -from os import getenv +from os import getenv, listdir import discord from discord import app_commands from discord.app_commands import Choice +from discord.ext import commands from dotenv import load_dotenv -from create_calendar import get_calendar, get_eleves, display load_dotenv() -MY_GUILD = discord.Object(id=getenv("GUILD_ID")) # replace with your guild id - -class MyClient(discord.Client): +class MyClient(commands.Bot): def __init__(self): - super().__init__(intents=discord.Intents.none()) - self.tree = app_commands.CommandTree(self) + super().__init__(intents=discord.Intents.none(), command_prefix="!") - self.initial_extensions = ["cogs." + f[:-3] for f in os.listdir("./cogs") if f.endswith(".py") and f.name != "__init__.py"] + self.MY_GUILD = discord.Object(id=getenv("GUILD_ID")) + + self.initial_extensions = ["cogs." + f[:-3] for f in listdir("./cogs") if + f.endswith(".py") and f.__str__() != "__init__.py"] async def setup_hook(self): - # cogs for extension in self.initial_extensions: await self.load_extension(extension) - self.tree.copy_global_to(guild=MY_GUILD) - await self.tree.sync(guild=MY_GUILD) + self.tree.copy_global_to(guild=self.MY_GUILD) + await self.tree.sync(guild=self.MY_GUILD) + + async def on_ready(self): + print(f'Logged in as {self.user} (ID: {self.user.id})') + print('------') -client = MyClient() - -eleves = get_eleves() - - -@client.event -async def on_ready(): - print(f'Logged in as {client.user} (ID: {client.user.id})') - print('------') - - -@client.tree.command() -@app_commands.choices(langues=[ - Choice(name='Anglais LV1, Autre ou Pas de LV2', value="EN"), - Choice(name='Anglais LV1, Allemand LV2', value="EN-DE"), - Choice(name='Anglais LV1, Espagnol LV2', value="EN-ES"), - Choice(name='Allemand LV1, Anglais LV2', value="DE-EN"), - Choice(name='Espagnol LV1, Anglais LV2', value="ES-EN") -] -) -@app_commands.describe(groupe="Votre groupe de colle, groupe ∈ ⟦1, 15⟧") -@app_commands.describe( - langues="Les options de langue que vous suivez. (Les langues suivies à H4 ne sont pas gérées, mettez 'Autres')") -@app_commands.describe(split="Créer deux fichiers différentes, un pour les colles et un pour le rest de l'EDT.") -async def edt( - interaction: discord.Interaction, - groupe: app_commands.Range[int, 1, 15], - langues: Choice[str], - split: bool = False): - """ - Génère un emploi du temps prenant compte des colles, des langues et de la semaine. - """ - cal_list = get_calendar(str(groupe), langues.value, split) - fichiers = [] - - if split: - fichiers.append(discord.File(fp=BytesIO(cal_list[0]), filename=f"EDT-{groupe}-{langues.value}-WO.ics")) - fichiers.append(discord.File(fp=BytesIO(cal_list[1]), filename=f"Colles-{groupe}.ics")) - - message = f""" - \nVotre emploi du temps (`EDT-{groupe}-{langues.value}-WO.ics`) pour le groupe `{groupe}`, `{langues.name}` au format `.ics` a bien été généré, **sans les colles** - \n\nLes colles ont été généré séparemment pour le groupe `{groupe}` : `Colles-{groupe}.ics` - \n\nVous pouvez importer ces fichiers dans la plupart des calendriers, mais il est recommandé de créer un nouveau sous-calendrier pour facilement pouvoir le changer. - """ - - else: - fichiers.append(discord.File(fp=BytesIO(cal_list[0]), filename=f"EDT-{groupe}-{langues.value}.ics")) - message = f""" - \nVotre emploi du temps (`EDT-{groupe}-{langues.value}.ics`) pour le groupe `{groupe}`, `{langues.name}` au format `.ics` a bien été généré, **avec les colles** - \n\nVous pouvez importer ces fichiers dans la plupart des calendriers, mais il est recommandé de créer un nouveau sous-calendrier pour facilement pouvoir le changer. - """ - - await interaction.response.send_message(message, files=fichiers) - - -client.run(getenv("TOKEN")) +if __name__ == "__main__": + client = MyClient() + client.run(getenv("TOKEN"))