staticky-bot/main.py

83 lines
3.1 KiB
Python

from typing import Optional, List
from io import BytesIO
from os import getenv
import discord
from discord import app_commands
from discord.app_commands import Choice
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):
def __init__(self):
super().__init__(intents=None)
self.tree = app_commands.CommandTree(self)
async def setup_hook(self):
self.tree.copy_global_to(guild=MY_GUILD)
await self.tree.sync(guild=MY_GUILD)
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"))