Skip to content

Commit

Permalink
Merge branch 'main' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
danydudiot committed Nov 8, 2024
2 parents acef7b7 + 5764660 commit f42edf3
Show file tree
Hide file tree
Showing 13 changed files with 10,049 additions and 8,639 deletions.
8,410 changes: 4,736 additions & 3,674 deletions data/INGE.ics

Large diffs are not rendered by default.

9,859 changes: 5,045 additions & 4,814 deletions data/MIAGE.ics

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/Calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from Filter import Filter, TimeFilter, filter_events
from Enums import url, Timing
from Event import *
from sender import send_error_non_async

import os

Expand All @@ -30,8 +31,7 @@ def fetch_calendar(self, url:str, filename:str) -> None:
try:
urlretrieve(url, filename)
except URLError as exception:
print(exception)
sentry_sdk.capture_exception(exception)
send_error_non_async(exception)

def convert_timestamp(self, input: str) -> datetime:
"""Permet de convertir les timestamp en ISO-8601, et les passer en UTC+2.
Expand Down
16 changes: 7 additions & 9 deletions src/Event.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import sentry_sdk

from Enums import Group, subjects_table, weekday
from sender import send_error_non_async


class Event:
Expand Down Expand Up @@ -153,6 +154,8 @@ def get_event_from_data(start:datetime, end:datetime, sum:str, loc:str, desc:str
return Event(start, end, sum, Group.CM, loc, "Équipe Enseignante", False, True,"ADE60323032342d323032352d31333132352d302d30")
elif sum == "Sensibilisation au handicap dans le développement d'application":
return Event(start, end, sum, Group.CM, loc, "Équipe Enseignante", True, True,"ADE60323032342d323032352d39303132382d302d30")
elif sum == "Réunion d'information - Alternance L3 MIAGE":
return Event(start, end, sum, Group.CM, loc, "Équipe Enseignante", False, True,"ADE60323032342d323032352d37353935352d302d30")

# Descsplit contient les informations correspondant à la description de l'événement, séparé par lignes.
# Ex : ['', '', 'Gr TPC', 'Con. Ana. Algo', 'Con. Ana. Algo', 'L3 INFO - INGENIERIE', 'L3 INFORMAT-UPEX MINERVE', 'LIEDLOFF', '(Exporté le : 27/07/2024 20:20)', '\n\n']
Expand Down Expand Up @@ -201,8 +204,7 @@ def get_event_from_data(start:datetime, end:datetime, sum:str, loc:str, desc:str
try:
raise ValueError("Groupe inconnue anglais Miage dans get_event_from_data")
except BaseException as exception:
print(exception)
sentry_sdk.capture_exception(exception)
send_error_non_async(exception)

else:
# ex : Anglais - TD 1
Expand All @@ -222,8 +224,7 @@ def get_event_from_data(start:datetime, end:datetime, sum:str, loc:str, desc:str
try:
raise ValueError("Groupe inconnue anglais ingé dans get_event_from_data")
except BaseException as exception:
print(exception)
sentry_sdk.capture_exception(exception)
send_error_non_async(exception)

else:
if "L3 INFO - INGENIERIE" in descsplit and "MIAGE" not in sum:
Expand Down Expand Up @@ -261,8 +262,7 @@ def get_event_from_data(start:datetime, end:datetime, sum:str, loc:str, desc:str
try:
raise ValueError("Groupe inconnue cours ingé dans get_event_from_data")
except BaseException as exception:
print(exception)
sentry_sdk.capture_exception(exception)
send_error_non_async(exception)

else:
match subject_split[1][:3] : #descsplit[2][3:]:
Expand All @@ -288,9 +288,7 @@ def get_event_from_data(start:datetime, end:datetime, sum:str, loc:str, desc:str
try:
raise ValueError("Groupe inconnue cours Miage dans get_event_from_data")
except BaseException as exception:
print(exception)
sentry_sdk.capture_exception(exception)

send_error_non_async(exception)

if "CC" in sum:
teacher = "équipe enseignante"
Expand Down
5 changes: 2 additions & 3 deletions src/Filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from Enums import Timing, Filiere, Group
from Event import Event

from sender import send_error_non_async

class Filter:
"""Classe de Base pour les filtres."""
Expand Down Expand Up @@ -32,8 +32,7 @@ def filter(self, e: Event) -> bool:
try:
raise ValueError("Timing inconnue dans la classe TimeFilter")
except BaseException as exception:
print(exception)
sentry_sdk.capture_exception(exception)
send_error_non_async(exception)
return False


Expand Down
7 changes: 3 additions & 4 deletions src/MyContextMenus.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from datetime import date, timedelta, datetime

from Tool import get_tool
from sender import send, get_error_log_chan


class MyContextMenus(Extension):
Expand Down Expand Up @@ -47,8 +48,7 @@ async def day_user_modal(self, ctx: ContextMenuContext) -> None:
modal_ctx: ModalContext = await ctx.bot.wait_for_modal(my_modal)

jour = modal_ctx.responses["date_user"]
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send(
f"{ctx.author.display_name} ({ctx.author.id}) à utilise {ctx.command.name} sur {ctx.target} ({ctx.target_id}) pour avoir le jour {jour}, le {datetime.now()}")
await send(get_error_log_chan(), f"{ctx.author.display_name} ({ctx.author.id}) à utilise {ctx.command.name} sur {ctx.target} ({ctx.target_id}) pour avoir le jour {jour}, le {datetime.now()}")
await self.tool.get_day_bt(ctx=modal_ctx, jour=jour, modifier=False, personne=ctx.target)

@user_context_menu(name="week_user")
Expand All @@ -70,6 +70,5 @@ async def week_user_modal(self, ctx: ContextMenuContext) -> None:
modal_ctx: ModalContext = await ctx.bot.wait_for_modal(my_modal)

semaine = modal_ctx.responses["semaine_user"]
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send(
f"{ctx.author.display_name} ({ctx.author.id}) à utilise {ctx.command.name} sur {ctx.target} ({ctx.target_id}) pour avoir la semaine du {semaine}, le {datetime.now()}")
await send(get_error_log_chan(), f"{ctx.author.display_name} ({ctx.author.id}) à utilise {ctx.command.name} sur {ctx.target} ({ctx.target_id}) pour avoir la semaine du {semaine}, le {datetime.now()}")
await self.tool.get_week_bt(ctx=modal_ctx, semaine=semaine, modifier=False, personne=ctx.target)
21 changes: 11 additions & 10 deletions src/MyListen.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from MyTask import MyTask
from Tool import get_tool
from Enums import RoleEnum, Filiere, Group
from sender import send, get_error_log_chan

load_dotenv("keys.env")

Expand All @@ -34,16 +35,17 @@ async def on_ready(self) -> None:
)
await self.bot.synchronise_interactions()
nuke()
await self.tool.userscan(self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")))
await self.tool.userscan(get_error_log_chan())
if not MyTask.daily_morning_update.running:
MyTask.daily_morning_update.start()
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send("Démarrage de la Task `daily_morning_update`")
await send(get_error_log_chan(), "Démarrage de la Task `daily_morning_update`")
if not MyTask.update_calendar.running:
MyTask.update_calendar.start()
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send("Démarrage de la Task `update_calendar`")
await send(get_error_log_chan(), "Démarrage de la Task `update_calendar`")
await MyTask.update_calendar()
print(f"Ready\nThis bot is owned by {self.bot.owner}")
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send("Démarrage du bot v1")
await send(get_error_log_chan(), "Démarrage du bot fini")


@component_callback(re.compile("day|week"))
async def on_component(self, ctx: ComponentContext) -> None:
Expand All @@ -55,7 +57,7 @@ async def on_component(self, ctx: ComponentContext) -> None:
elif pattern_week.search(ctx.custom_id):
await self.tool.get_week_bt(ctx, ctx.custom_id[5:], True)
else:
await ctx.send("Bouton cliqué mais aucune action définie", ephemeral=True)
await send(ctx,"Bouton cliqué mais aucune action définie", ephemeral=True)
raise ValueError("Bouton cliqué mais aucune action définie (on_component)")

@listen(MemberUpdate)
Expand All @@ -71,7 +73,7 @@ async def on_member_update(self, event: MemberUpdate) -> None:
@listen(Error)
async def on_error(self, error: Error) -> None:
"""Permet de faire la gestion des erreurs pour l'ensemble du bot, envoie un message aux admins et prévient l'utilisateur de l'erreur."""
await self.bot.get_channel(os.getenv("ERROR_CHANNEL_ID")).send(
await send(get_error_log_chan(),
f"{(self.tool.get_roles(error.ctx.guild)[RoleEnum.ADMIN]).mention}"
f"```ERREUR dans : {error.source} - {datetime.now()}\n"
f"Erreur de type : {type(error.error)}\n"
Expand All @@ -84,7 +86,7 @@ async def on_error(self, error: Error) -> None:
f" - channel : {error.ctx.channel}\n"
f" - role member : {error.ctx.member.roles}```"
)
await error.ctx.send(embed=Embed("Une erreur est survenu, les admins sont prévenu."), ephemeral=True)
await send(error.ctx,embeds=[Embed("Une erreur est survenu, les admins sont prévenu.")], ephemeral=True)

@component_callback(re.compile("delete-role"))
async def wipe_bt(self, ctx: ComponentContext):
Expand All @@ -100,11 +102,10 @@ async def wipe_bt(self, ctx: ComponentContext):
continue
if user.has_role(self.tool.get_roles(ctx.guild)[group]):
await user.remove_role(self.tool.get_roles(ctx.guild)[group])
await ctx.send("Les membres du serveur n'ont plus de rôle.", ephemeral=False)
await send(ctx,"Les membres du serveur n'ont plus de rôle.", ephemeral=False)

@component_callback(re.compile("stop-bot"))
async def stop_bt(self, ctx: ComponentContext):
"""Permet d'enlever les rôles de Filière et de Groupe à tout le monde"""

await ctx.send("Le bot va s'arreter.", ephemeral=False)
await send(ctx,"Le bot va s'arreter.", ephemeral=False)
await self.bot.stop()
27 changes: 11 additions & 16 deletions src/MySlashCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from Calendar import get_calendar
from Tool import get_tool
from Filter import *
from sender import send


class MySlashCommand(Extension):
Expand Down Expand Up @@ -94,10 +95,7 @@ async def help(self, ctx: SlashContext) -> None:
)

action_row = ActionRow(repo, vincent)
ephemeral = False
if self.tool.is_guild_chan(ctx.author):
ephemeral = not ctx.author.has_role(self.tool.get_roles(ctx.guild)[RoleEnum.PERMA]) # Permanent si la personne à le rôle
await ctx.send(embed=embed, components=action_row, ephemeral=ephemeral)
await send(ctx, embeds=[embed], components=action_row, auto_ephemeral=True)

@slash_command(name="ics", description="Envoie un fichier ICS importable dans la plupart des applications de calendrier.")
@slash_option(
Expand All @@ -119,6 +117,7 @@ async def ics(self, ctx: SlashContext, debut: str, fin: str) -> None:
try:
date_debut = datetime.strptime(debut, "%d-%m-%Y").date()
date_fin = datetime.strptime(fin, "%d-%m-%Y").date()

filename = str(ctx.author.id)
get_ics(filter_events(get_calendar().get_events(),
[TimeFilter(date_debut, Timing.AFTER), TimeFilter(date_fin, Timing.BEFORE),
Expand All @@ -130,10 +129,10 @@ async def ics(self, ctx: SlashContext, debut: str, fin: str) -> None:
if self.tool.is_guild_chan(ctx.author):
ephemeral = not ctx.author.has_role(self.tool.get_roles(ctx.guild)[RoleEnum.PERMA]) # Permanent si la personne a le rôle

await ctx.send("Voici votre fichier ics (:warning: : Le calendrier n'est pas mis a jour dynamiquement)", files=[f"{filename}.ics"], ephemeral=ephemeral)
await send(ctx,"Voici votre fichier ics (:warning: : Le calendrier n'est pas mis a jour dynamiquement)", files=[f"{filename}.ics"], ephemeral=ephemeral)
os.remove(f"{filename}.ics")
except ValueError:
await ctx.send(embeds=[self.tool.create_error_embed(f"La valeur `{debut}` ou `{fin}` ne correspond pas à une date.")], ephemeral=True)
await send(ctx, embeds=[self.tool.create_error_embed(f"La valeur `{debut}` ou `{fin}` ne correspond pas à une date.")], ephemeral=True)

@ics.autocomplete("debut")
async def autocomplete(self, ctx: AutocompleteContext):
Expand Down Expand Up @@ -228,7 +227,7 @@ async def subscribe(self, ctx: SlashContext, service: str = "None", ics: str = "
user_base.user_subscribe_ics(id, Subscription.BOTH_ICS)

if service == "None" and ics == "None":
await ctx.send("Vous devez sélectionner une option pour vous abonner.\n Par exemple : pour recevoir l'emploi du temps de la semaine le lundi, avec un fichier ics, et l'emploi du temps du jour tout les jours, sans ics : `/subscribe service: Both ics: Weekly`", ephemeral=True)
await send(ctx,"Vous devez sélectionner une option pour vous abonner.\n Par exemple : pour recevoir l'emploi du temps de la semaine le lundi, avec un fichier ics, et l'emploi du temps du jour tout les jours, sans ics : `/subscribe service: Both ics: Weekly`", ephemeral=True)
else:
await self.tool.check_subscription(ctx)

Expand Down Expand Up @@ -318,16 +317,12 @@ async def exam(self, ctx: SlashContext, personne: User = None) -> None:
if self.tool.is_guild_chan(ctx.author):
ephemeral = not ctx.author.has_role( self.tool.get_roles(ctx.guild)[RoleEnum.PERMA]) # Permanent si la personne a le rôle

# Au cas où, il y a plus de 10 embeds, ça les envoie en plusieurs messages
cut = embeds
for i in range(0,len(embeds),10):
await ctx.send(embeds=cut[:10], components=universite, ephemeral=ephemeral)
cut = cut[10:]
await send(ctx, embeds=embeds, components=universite, ephemeral=ephemeral)

@slash_command(name="wipe", description="Enlève tout les rôles.", default_member_permissions=Permissions.ADMINISTRATOR, contexts=[ContextType.GUILD])
async def wipe(self, ctx: SlashContext) -> None:
"""Fonction qui permet d'enlever tous les attribués"""
await ctx.send(":warning: Vous êtes sur le point de supprimer les rôles est vous sûr", components=Button(style=ButtonStyle.BLURPLE, custom_id="delete-role", label="OUI"), ephemeral=True)
await send(ctx,":warning: Vous êtes sur le point de supprimer les rôles est vous sûr", components=Button(style=ButtonStyle.BLURPLE, custom_id="delete-role", label="OUI"), ephemeral=True)

@slash_command(name="userscan", description="Permet d'ajouter tout les membres dans la BD.",
default_member_permissions=Permissions.ADMINISTRATOR)
Expand All @@ -342,19 +337,19 @@ async def userscan(self, ctx: SlashContext) -> None:
async def nuke(self, ctx: SlashContext) -> None:
"""Permet de vider la BD."""
nuke()
await ctx.send("La BD à été nuke.", ephemeral=True)
await send(ctx,"La BD à été nuke.", ephemeral=True)

@slash_command(name="bd", description="Permet d'obtenir' BD.",
default_member_permissions=Permissions.ADMINISTRATOR)
@contexts(guild=True, bot_dm=False)
async def bd(self, ctx: SlashContext) -> None:
"""Permet d'obtenir la BD."""
await ctx.send("Voici la BD.", file="data/UserBase.pkl", ephemeral=False)
await send(ctx,"Voici la BD.", files=["data/UserBase.pkl"], ephemeral=False)

@slash_command(name="stop", description="Permet de stoper le bot.",
default_member_permissions=Permissions.ADMINISTRATOR)
@contexts(guild=True, bot_dm=False)
async def stop(self, ctx: SlashContext) -> None:
"""Permet de stopper le bot."""
await ctx.send(":warning: Vous êtes sur le point de stopper le bot est vous sûr", components=Button(style=ButtonStyle.BLURPLE, custom_id="stop-bot", label="OUI"), ephemeral=True)
await send(ctx,":warning: Vous êtes sur le point de stopper le bot est vous sûr", components=Button(style=ButtonStyle.BLURPLE, custom_id="stop-bot", label="OUI"), ephemeral=True)

Loading

0 comments on commit f42edf3

Please sign in to comment.