commit
2cc58c953e
|
@ -158,5 +158,5 @@ cython_debug/
|
||||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
# 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
|
# 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.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
.idea/
|
||||||
|
|
||||||
|
|
34
README.md
34
README.md
|
@ -1,3 +1,35 @@
|
||||||
# staticky-bot
|
# staticky-bot
|
||||||
|
|
||||||
Code du bot privé des MP2I de SL
|
Code du bot privé des MP2I de SL
|
||||||
|
|
||||||
|
### Librairies:
|
||||||
|
- discord.py
|
||||||
|
- dotenv
|
||||||
|
|
||||||
|
Le fichier `.env` doit être renseigné avec
|
||||||
|
```
|
||||||
|
# Le token du bot discord
|
||||||
|
TOKEN=
|
||||||
|
# L'ID du serveur
|
||||||
|
GUILD_ID=
|
||||||
|
```
|
||||||
|
## EDT Generator
|
||||||
|
Voici la description du module de générateur d'EDT au format `.ics`, importable dans tous les calendriers numériques, depuis l'EDT de la classe et le colloscope
|
||||||
|
|
||||||
|
### Librairies supplémentaires nécessaires:
|
||||||
|
- icalendar
|
||||||
|
- pandas
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Traitement des données au prélable
|
||||||
|
A l'aide d'un site tel que [I love PDF](https://www.ilovepdf.com/fr/pdf_en_excel), il faut transormer le colloscope en format tableur. Il faut ensuite générer le fichier `eleves.csv`, qui contient la liste des élèves, leur groupe et leur demi-classe, puis `colles.csv`, qui contient les colles ainsi que les groupes pour la SI uniquement. (Le reste des infos sur les demi-groupes n'est pas nécessaire).
|
||||||
|
|
||||||
|
Il faut ensuite générer les fichiers communs d'EDT, avec plus ou moins d'automatisation (en vrai c'est pas si long, 1h pour les 4 fichiers quand on sait faire).
|
||||||
|
|
||||||
|
### Fonctionnement
|
||||||
|
Le bot génère ensuie l'edt en récupérant les colles du groupe, les cours de SI, et les cours de langue correspondant à l'entrée utilisateur
|
||||||
|
|
||||||
|
### TOUDOUX
|
||||||
|
- Créer un ou deux scripts d'automatisation de création d'emploi du temps, pour qu'il n'y ait besoin que de créer un seul EDT de groupe, et que le 2nd soit créé en décalant d'une semaine, et enfin pour que les vacances soient gérées uniquement en mettant leur date
|
||||||
|
- Moins prioritaire / pas forcément utile: le fichier `.ics` est mis en ligne sur `mp2i-vms.fr`, pour qu'il soit syncronisé avec le client, et qu'il n'y ait besoin de modifier que sur un seul EDT pour que les changements se propagent.
|
|
@ -0,0 +1,26 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
PRODID:-//mp2i-vms//Stackity Bot Inc//EN
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
METHOD:PUBLISH
|
||||||
|
X-WR-CALNAME:EDT
|
||||||
|
X-WR-TIMEZONE:Europe/Paris
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Paris
|
||||||
|
X-LIC-LOCATION:Europe/Paris
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
END:VCALENDAR
|
Binary file not shown.
|
@ -0,0 +1,227 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
PRODID:-//Google Inc//Google Calendar 70.9054//EN
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
METHOD:PUBLISH
|
||||||
|
X-WR-CALNAME:EDT A
|
||||||
|
X-WR-TIMEZONE:Europe/Paris
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Paris
|
||||||
|
X-LIC-LOCATION:Europe/Paris
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231016T093000
|
||||||
|
DTEND;TZID=Europe/Paris:20231016T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T093000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T093000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:6tksnmkvqa2ofqmiu8ava7tqp4@google.com
|
||||||
|
CREATED:20231208T211618Z
|
||||||
|
DESCRIPTION:C154 M.Halfon
|
||||||
|
LAST-MODIFIED:20231208T211618Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231016T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231016T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T110000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:6p43b7rpcaan0hq4d9mvgdh887@google.com
|
||||||
|
CREATED:20231208T211654Z
|
||||||
|
DESCRIPTION:C154 M.Halfon
|
||||||
|
LAST-MODIFIED:20231208T211654Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231016T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231016T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T120000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T120000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:2iu71o08u87hvdcds6oemknqko@google.com
|
||||||
|
CREATED:20231208T211730Z
|
||||||
|
DESCRIPTION:R105 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T211730Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231016T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231016T093000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T080000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:05c3l6f99s6qmni5dkhrh76i93@google.com
|
||||||
|
CREATED:20231208T211517Z
|
||||||
|
DESCRIPTION:R417 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T211748Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231019T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231019T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231102T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T110000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:43l8ed3fpplah0ru587eb86uch@google.com
|
||||||
|
CREATED:20231208T211836Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T211836Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231019T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231019T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231102T120000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T120000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:7d3rj0tbhr03d9lla61138a217@google.com
|
||||||
|
CREATED:20231208T211903Z
|
||||||
|
DESCRIPTION:M101 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T211924Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231020T140000
|
||||||
|
DTEND;TZID=Europe/Paris:20231020T150000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;INTERVAL=2;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20231103T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231229T140000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:0iepm152dmqecobb7r8b57o6ml@google.com
|
||||||
|
CREATED:20231208T212004Z
|
||||||
|
DESCRIPTION:M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T212004Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T093000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T093000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:2kfttah24ae4pr27kofkf237n4@google.com
|
||||||
|
CREATED:20231208T212242Z
|
||||||
|
DESCRIPTION:R417 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T212242Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T110000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:0t6le1spjav4e8tcqtn9gt99ll@google.com
|
||||||
|
CREATED:20231208T212319Z
|
||||||
|
DESCRIPTION:R105 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T212319Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T120000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:244mt1li8fvcj5mduvs2m6cmfo@google.com
|
||||||
|
CREATED:20231208T212348Z
|
||||||
|
LAST-MODIFIED:20231208T212348Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231110T150000
|
||||||
|
DTEND;TZID=Europe/Paris:20231110T160000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;INTERVAL=2;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20240105T150000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:1kvsrj6sgnkjpgf3l4fp4u7b4m@google.com
|
||||||
|
CREATED:20231208T212453Z
|
||||||
|
DESCRIPTION:C154 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T212515Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231109T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231109T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T110000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:46lkfuetibmt64ah8042mf0ern@google.com
|
||||||
|
CREATED:20231208T212409Z
|
||||||
|
DESCRIPTION:M101 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T212558Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231109T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231109T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T120000
|
||||||
|
DTSTAMP:20231208T214231Z
|
||||||
|
UID:4oue8sl05i1n4tu5tt1g8glagu@google.com
|
||||||
|
CREATED:20231208T212439Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T212609Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,220 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
PRODID:-//Google Inc//Google Calendar 70.9054//EN
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
METHOD:PUBLISH
|
||||||
|
X-WR-CALNAME:EDT B
|
||||||
|
X-WR-TIMEZONE:Europe/Paris
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Paris
|
||||||
|
X-LIC-LOCATION:Europe/Paris
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T093000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T093000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:38m2tjmnuvcp6as7ubihkva1qp@google.com
|
||||||
|
CREATED:20231208T212830Z
|
||||||
|
DESCRIPTION:R417 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T212830Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T110000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:57s3rt8dn36smk6fjevjt8mc3j@google.com
|
||||||
|
CREATED:20231208T212914Z
|
||||||
|
DESCRIPTION:R105 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T212914Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231109T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231109T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T110000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:3nsq6jor4sslmfr9sc8lvd04tl@google.com
|
||||||
|
CREATED:20231208T213100Z
|
||||||
|
DESCRIPTION:M101 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213100Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231109T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231109T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T120000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:4f8bam5qhqq2c2ai8dnfq1m8uk@google.com
|
||||||
|
CREATED:20231208T213240Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T213240Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231110T150000
|
||||||
|
DTEND;TZID=Europe/Paris:20231110T160000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;INTERVAL=2;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20240105T150000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:2c2s2lqvt1u52tfumt8hokq16o@google.com
|
||||||
|
CREATED:20231208T213318Z
|
||||||
|
DESCRIPTION:C154 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213338Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231113T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231113T093000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T080000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:6evs2c8ndhdriv3t4nml340nfl@google.com
|
||||||
|
CREATED:20231208T213435Z
|
||||||
|
DESCRIPTION:R417 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T213435Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231113T093000
|
||||||
|
DTEND;TZID=Europe/Paris:20231113T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T093000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:1m1sdklqirohe5bnj9r8a6f5bt@google.com
|
||||||
|
CREATED:20231208T213508Z
|
||||||
|
DESCRIPTION:C154 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213508Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TP Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231113T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231113T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T110000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:4raatd1u2pgn9kq846ocrttgav@google.com
|
||||||
|
CREATED:20231208T213530Z
|
||||||
|
LAST-MODIFIED:20231208T213530Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231113T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231113T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T120000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:27s33min11sj6bubdgqgbru8s2@google.com
|
||||||
|
CREATED:20231208T213658Z
|
||||||
|
DESCRIPTION:R105 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T213658Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231116T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231116T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T110000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:6g9cp51p3nph1cm61b73gv7cco@google.com
|
||||||
|
CREATED:20231208T213741Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T213741Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231116T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231116T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;INTERVAL=2;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T120000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:66bjc3nkr39uejqv558jepfek6@google.com
|
||||||
|
CREATED:20231208T213801Z
|
||||||
|
DESCRIPTION:M101 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213811Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231117T140000
|
||||||
|
DTEND;TZID=Europe/Paris:20231117T150000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;INTERVAL=2;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20231229T140000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:3dt3pt2s2e3vipg6gucgrgqakp@google.com
|
||||||
|
CREATED:20231208T213840Z
|
||||||
|
DESCRIPTION:C154 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213840Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T120000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;INTERVAL=2;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T120000
|
||||||
|
DTSTAMP:20231208T214107Z
|
||||||
|
UID:79poqj528ega8337l2ejk7ri95@google.com
|
||||||
|
CREATED:20231208T212938Z
|
||||||
|
DESCRIPTION:C154 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T213941Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,269 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
PRODID:-//Google Inc//Google Calendar 70.9054//EN
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
METHOD:PUBLISH
|
||||||
|
X-WR-CALNAME:EDT Base
|
||||||
|
X-WR-TIMEZONE:Europe/Paris
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Paris
|
||||||
|
X-LIC-LOCATION:Europe/Paris
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231017T100000
|
||||||
|
DTEND;TZID=Europe/Paris:20231017T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240130T225959Z;BYDAY=TU
|
||||||
|
EXDATE;TZID=Europe/Paris:20231031T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231024T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231226T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240102T100000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:5i1f6g2kb66dc66ulie1sv4jn9@google.com
|
||||||
|
CREATED:20231014T145711Z
|
||||||
|
DESCRIPTION:R415 M. Dérumaux
|
||||||
|
LAST-MODIFIED:20231014T145711Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:SI
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231020T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231020T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20231103T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231027T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240105T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231229T110000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:3ob8c00mn8rggnqotq4js7ru5b@google.com
|
||||||
|
CREATED:20231014T151115Z
|
||||||
|
DESCRIPTION:M103 M. Halfon
|
||||||
|
LAST-MODIFIED:20231014T151133Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231009T160000
|
||||||
|
DTEND;TZID=Europe/Paris:20231009T180000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240129T225959Z;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231023T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231009T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T160000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:026n391dj8ktovl9dhuttnuc7q@google.com
|
||||||
|
CREATED:20231014T150838Z
|
||||||
|
DESCRIPTION:M103 Mullaert
|
||||||
|
LAST-MODIFIED:20231014T151900Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231009T140000
|
||||||
|
DTEND;TZID=Europe/Paris:20231009T160000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240204T225959Z;BYDAY=MO
|
||||||
|
EXDATE;TZID=Europe/Paris:20231023T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231030T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240101T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231225T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231009T140000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:Ical6c740b854d8d69f261a8c557224a868d
|
||||||
|
CREATED:20231013T150304Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T210018Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231106T160000
|
||||||
|
DTEND;TZID=Europe/Paris:20231106T180000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:026n391dj8ktovl9dhuttnuc7q@google.com
|
||||||
|
RECURRENCE-ID;TZID=Europe/Paris:20231106T160000
|
||||||
|
CREATED:20231014T150838Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T210036Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:TD Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231017T140000
|
||||||
|
DTEND;TZID=Europe/Paris:20231017T160000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240130T225959Z;BYDAY=TU
|
||||||
|
EXDATE;TZID=Europe/Paris:20231024T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231031T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231226T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240102T140000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:2trqqfv4cm64oj8aec9gdoi7ki@google.com
|
||||||
|
CREATED:20231014T145958Z
|
||||||
|
DESCRIPTION:R103 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T210051Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231019T140000
|
||||||
|
DTEND;TZID=Europe/Paris:20231019T160000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231026T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231102T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T140000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T140000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:5jdpl8ej5okmm8f1dk7i6c1fe5@google.com
|
||||||
|
CREATED:20231014T150034Z
|
||||||
|
DESCRIPTION:R011 Mme Chevalier
|
||||||
|
LAST-MODIFIED:20231208T210120Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Physique
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231019T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231019T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231026T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231102T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T080000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:10ferd1njg5al2jn636mplhu04@google.com
|
||||||
|
CREATED:20231014T150236Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T210138Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231020T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231020T110000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240202T225959Z;BYDAY=FR
|
||||||
|
EXDATE;TZID=Europe/Paris:20231027T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231103T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231229T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240105T080000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:0gmrlbiololsmt5f1fig96laj6@google.com
|
||||||
|
CREATED:20231014T150941Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T210150Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231020T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231020T110000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:0gmrlbiololsmt5f1fig96laj6@google.com
|
||||||
|
RECURRENCE-ID;TZID=Europe/Paris:20231020T080000
|
||||||
|
CREATED:20231014T150941Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T210150Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231110T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231110T130000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:3ob8c00mn8rggnqotq4js7ru5b@google.com
|
||||||
|
RECURRENCE-ID;TZID=Europe/Paris:20231110T110000
|
||||||
|
CREATED:20231014T151115Z
|
||||||
|
DESCRIPTION:M103 M. Halfon
|
||||||
|
LAST-MODIFIED:20231208T210202Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Info
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231019T160000
|
||||||
|
DTEND;TZID=Europe/Paris:20231019T180000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240201T225959Z;BYDAY=TH
|
||||||
|
EXDATE;TZID=Europe/Paris:20231026T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231102T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231228T160000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240104T160000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:1rmvg62fjpeg1bco9mue2eqto5@google.com
|
||||||
|
CREATED:20231014T150105Z
|
||||||
|
DESCRIPTION:Gymnase M. Torres-Lacaz
|
||||||
|
LAST-MODIFIED:20231208T210242Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:EPS
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231018T100000
|
||||||
|
DTEND;TZID=Europe/Paris:20231018T120000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240131T225959Z;BYDAY=WE
|
||||||
|
EXDATE;TZID=Europe/Paris:20231025T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231101T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231227T100000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240103T100000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:0g633d5rmneem0svc7tagl421g@google.com
|
||||||
|
CREATED:20231014T145824Z
|
||||||
|
DESCRIPTION:M103 Mme Chapiro
|
||||||
|
LAST-MODIFIED:20231208T210305Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Français
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231010T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231010T100000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240130T225959Z;BYDAY=TU
|
||||||
|
EXDATE;TZID=Europe/Paris:20231010T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231024T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231031T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231226T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240102T080000
|
||||||
|
DTSTAMP:20231208T214314Z
|
||||||
|
UID:0idrr2fvn053pera1598qsl6pi@google.com
|
||||||
|
CREATED:20231014T145346Z
|
||||||
|
DESCRIPTION:M103 Mme Mullaert
|
||||||
|
LAST-MODIFIED:20231208T214008Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Maths
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,122 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
PRODID:-//Google Inc//Google Calendar 70.9054//EN
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
METHOD:PUBLISH
|
||||||
|
X-WR-CALNAME:EDT Langues
|
||||||
|
X-WR-TIMEZONE:Europe/Paris
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Paris
|
||||||
|
X-LIC-LOCATION:Europe/Paris
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231017T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231017T130000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240130T225959Z;BYDAY=TU
|
||||||
|
EXDATE;TZID=Europe/Paris:20231024T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231031T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20231226T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240102T110000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:08ih4mv3sfe0so9bt3016kdou4@google.com
|
||||||
|
CREATED:20231018T160030Z
|
||||||
|
LAST-MODIFIED:20231208T214519Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Anglais LV1
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231107T110000
|
||||||
|
DTEND;TZID=Europe/Paris:20231107T123000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240130T225959Z;BYDAY=TU
|
||||||
|
EXDATE;TZID=Europe/Paris:20231226T110000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240102T110000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:6tdhe8vsvc6drfb3skq8gij9e0@google.com
|
||||||
|
CREATED:20231208T214507Z
|
||||||
|
DESCRIPTION:C180
|
||||||
|
LAST-MODIFIED:20231208T214531Z
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Anglais LV2
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231108T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231108T100000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240131T225959Z;BYDAY=WE
|
||||||
|
EXDATE;TZID=Europe/Paris:20231227T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240103T080000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:14rig76ee7hsp2hdlihe5svhff@google.com
|
||||||
|
CREATED:20231208T214610Z
|
||||||
|
DESCRIPTION:M103
|
||||||
|
LAST-MODIFIED:20231208T214610Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Espagnol LV1
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231108T083000
|
||||||
|
DTEND;TZID=Europe/Paris:20231108T100000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240131T225959Z;BYDAY=WE
|
||||||
|
EXDATE;TZID=Europe/Paris:20231227T083000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240103T083000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:5t3s6b0g2m0d64gcpn84gmc35e@google.com
|
||||||
|
CREATED:20231208T214648Z
|
||||||
|
DESCRIPTION:C452
|
||||||
|
LAST-MODIFIED:20231208T214656Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Espagnol LV2
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231108T080000
|
||||||
|
DTEND;TZID=Europe/Paris:20231108T100000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240131T225959Z;BYDAY=WE
|
||||||
|
EXDATE;TZID=Europe/Paris:20231227T080000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240103T080000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:6kqdomdqip5h9vt1v2n492vrlq@google.com
|
||||||
|
CREATED:20231208T214723Z
|
||||||
|
DESCRIPTION:M103
|
||||||
|
LAST-MODIFIED:20231208T214723Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Allemand LV1
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTSTART;TZID=Europe/Paris:20231108T083000
|
||||||
|
DTEND;TZID=Europe/Paris:20231108T100000
|
||||||
|
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20240131T225959Z;BYDAY=WE
|
||||||
|
EXDATE;TZID=Europe/Paris:20231227T083000
|
||||||
|
EXDATE;TZID=Europe/Paris:20240103T083000
|
||||||
|
DTSTAMP:20231208T214916Z
|
||||||
|
UID:5g3s2dm0sfmup225aocuqpcdta@google.com
|
||||||
|
CREATED:20231208T214743Z
|
||||||
|
LAST-MODIFIED:20231208T214743Z
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:Allemand LV2
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,74 @@
|
||||||
|
Semaine,,,,,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
|
||||||
|
,,,,,18/09/23,25/09/23,02/10/23,09/10/23,16/10/23,06/11/23,13/11/23,20/11/23,27/11/23,04/12/23,11/12/23,18/12/23,08/01/24,15/01/24,22/01/24,29/01/24
|
||||||
|
matière,jour,heure,colleur,salle,,,,,,,,,,,,,,,,
|
||||||
|
,,,,,,,,,,,,,,,,,,,,
|
||||||
|
Allemand,jeudi,18h,Mme ADAM,C258,,,9,,9,,9,,9,,9,,9,,9,
|
||||||
|
Mathématiques,vendredi,15h,Mme MULLAERT,C181,1,2,3,4,5,6,7,8,9,10,11,12,1,14,15,8
|
||||||
|
Anglais,mercredi,14h,Mme. LE GOURIELLEC,C393,3,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
|
||||||
|
Mathématiques,vendredi,14h,M. BOUVEROT,M103,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,1
|
||||||
|
Physique,mardi,16h,Mme. CHEVALIER,R103,2,3,4,5,6,7,8,9,10,11,12,13,14,15,,1
|
||||||
|
Mathématiques,vendredi,17h,M. OUBAHA,C382,3,4,5,6,7,8,9,10,11,12,13,14,15,6,1,2
|
||||||
|
Anglais,mardi,16h,Mme. BELAGOUNE,C454,1,4,5,6,7,8,9,10,11,12,13,14,15,,1,2
|
||||||
|
pas de colle,,,,,4,5,6,7,8,9,10,11,12,13,14,15,5,1,2,3
|
||||||
|
Physique,mardi,17h,M. COLIN,C386,4,5,6,7,8,9,10,11,12,13,14,15,,1,2,3
|
||||||
|
Mathématiques,mercredi,15h,M. BOULLY,R004,5,6,7,8,9,10,11,12,13,14,15,7,13,2,3,4
|
||||||
|
Anglais,mardi,16h,M. HERBAUT,C392,5,6,7,8,9,10,11,12,13,14,15,,1,2,3,4
|
||||||
|
Mathématiques,mardi,18h,M. RAPIN,V152,6,7,8,9,10,11,12,13,14,15,3,1,2,3,4,5
|
||||||
|
Physique,mercredi,17h,M. POUPY,R012,6,7,8,9,10,11,12,13,14,15,,1,2,3,4,5
|
||||||
|
Mathématiques,mardi,17h,M. CARPINTERO,C383,7,8,9,10,11,12,13,14,15,2,1,2,3,4,5,6
|
||||||
|
Anglais,mercredi,16h,Mme. MANN,C380,7,8,9,10,11,12,13,14,7,,1,2,3,4,5,6
|
||||||
|
pas de colle,,,,,8,9,10,11,12,13,14,15,1,1,2,3,4,5,6,7
|
||||||
|
Physique,mardi,17h,Mme. CHEVALIER,R103,8,9,10,11,12,13,14,15,,1,2,3,4,5,6,7
|
||||||
|
,,,,,,,,,,,,,,,,,,,,
|
||||||
|
Anglais,mercredi,15h,Mme. LE GOURIELLEC,C393,9,10,11,12,13,14,15,,15,2,3,4,5,6,7,8
|
||||||
|
Mathématiques,vendredi,14h,Mme MULLAERT,C181,10,11,12,13,14,15,15,1,2,3,4,5,6,7,8,9
|
||||||
|
Physique,jeudi,18h,M. DE ROUX,C054,10,11,12,13,14,15,,1,2,3,4,5,6,7,8,9
|
||||||
|
Mathématiques,vendredi,18h,M. OUBAHA,C382,11,12,13,14,15,14,1,2,3,4,5,6,7,8,9,10
|
||||||
|
Anglais,mardi,17h,Mme. BELAGOUNE,C454,11,12,13,14,15,,1,2,3,4,5,6,7,8,9,10
|
||||||
|
pas de colle,,,,,12,13,14,15,13,1,2,3,4,5,6,7,8,9,10,11
|
||||||
|
Physique,mardi,16h,M. COLIN,C386,12,13,14,15,,1,2,3,4,5,6,4,8,9,10,11
|
||||||
|
Mathématiques,mercredi,14h,M. BOULLY,R004,13,14,15,12,1,2,3,4,5,6,7,8,9,10,11,12
|
||||||
|
Anglais,mardi,16h,Mme. FULCONIS,C393,13,14,15,,1,2,3,4,5,6,7,8,9,10,11,12
|
||||||
|
Mathématiques,jeudi,18h,M. RAPIN,C284,14,15,11,1,2,3,4,5,6,7,8,9,10,11,12,13
|
||||||
|
Physique,mardi,18h,Mme. CHEVALIER,R103,14,15,,1,2,3,4,5,6,7,8,9,10,11,12,13
|
||||||
|
Mathématiques,mardi,18h,M. CARPINTERO,C383,15,10,1,2,3,4,5,6,7,8,9,10,11,12,13,14
|
||||||
|
Anglais,mercredi,17h,Mme. MANN,C380,15,,1,2,3,4,5,6,1,8,9,10,11,12,13,14
|
||||||
|
pas de colle,,,,,,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
|
Physique,mercredi,18h,M. POUPY,R012,,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
|
EDT SI: cours de 16h,,,,,"4§ 7§ 8§
|
||||||
|
11§ 1§ 6§
|
||||||
|
9§ 10","5§ 8§ 9§
|
||||||
|
12§ 2§ 7§
|
||||||
|
10§ 11","6§ 9§ 10§
|
||||||
|
13§ 3§ 8§
|
||||||
|
11§ 12","7§ 10§
|
||||||
|
11§ 14§
|
||||||
|
4§ 9§ 12§
|
||||||
|
13","8§ 11§
|
||||||
|
12§ 15§
|
||||||
|
5§ 10§
|
||||||
|
13§ 14","9§ 12§
|
||||||
|
13§ 16§
|
||||||
|
6§ 11§
|
||||||
|
14§ 15","10§ 13§
|
||||||
|
14§ 1§ 7§
|
||||||
|
12§ 15§
|
||||||
|
16","11§ 14§
|
||||||
|
15§ 2§ 8§
|
||||||
|
13§ 16§ 1","12§ 15§
|
||||||
|
16§ 3§ 9§
|
||||||
|
14§ 1§ 2","13§ 16§
|
||||||
|
1§ 4§ 10§
|
||||||
|
15§ 2§ 3","14§ 1§ 2§
|
||||||
|
5§ 11§
|
||||||
|
16§ 3§ 4","15§ 2§ 3§
|
||||||
|
6§ 12§ 1§
|
||||||
|
4§ 5","16§ 3§ 4§
|
||||||
|
7§ 13§ 2§
|
||||||
|
5§ 6","1§ 4§ 5§
|
||||||
|
8§ 14§ 3§
|
||||||
|
6§ 7","2§ 5§ 6§
|
||||||
|
9§ 15§ 4§
|
||||||
|
7§ 8","3§ 6§ 7§
|
||||||
|
10§ 16§
|
||||||
|
5§ 8§ 9"
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
Nom,Prénon,Groupe de coll,TD
|
||||||
|
ABOUJAIB,Alexandre,1,A
|
||||||
|
AJAN,George,1,A
|
||||||
|
AKRAD,Lina,5,A
|
||||||
|
AUBERT,Nicolas,3,A
|
||||||
|
BADR,Roman,3,A
|
||||||
|
BAZIRE,Aurélien,3,A
|
||||||
|
BOIT,Arthur,5,A
|
||||||
|
BOUBKER,Youssef,5,A
|
||||||
|
BOUDJEMA,Dylan,1,A
|
||||||
|
CHIRIAC,Minhea,7,A
|
||||||
|
COURIER,Marine,7,A
|
||||||
|
DAGUIN,Joseph,7,A
|
||||||
|
DAUGUEN,Gabriel,9,A
|
||||||
|
DE WEER,Matthias,9,A
|
||||||
|
DESBOUIS,Katell,11,A
|
||||||
|
DUPOUY,Jérémie,11,A
|
||||||
|
HARIRI--GAUTIER-PICARD,Grégoire,11,A
|
||||||
|
JURICEVIC,Matteo,13,A
|
||||||
|
KNANOUA,Anas,13,A
|
||||||
|
LESENNE,Pierrick,13,A
|
||||||
|
LIN,Hao,9,A
|
||||||
|
MASBATIN,Lucas,15,A
|
||||||
|
MAYURAN,Mithushan,15,A
|
||||||
|
MESSAHLI,Yassine,2,B
|
||||||
|
MOGUÉROU,Valentin,2,B
|
||||||
|
MOHELLEBI,Mathéo,2,B
|
||||||
|
MOUISSET--FERRARA,Maël,4,B
|
||||||
|
OTTAVI,Corentin,4,B
|
||||||
|
PONCE,Alexian,4,B
|
||||||
|
PUJOL,Raphaël,6,B
|
||||||
|
PUSTETTO,Mathis,6,B
|
||||||
|
RADICE,Roman,6,B
|
||||||
|
RAT,Evelyn,8,B
|
||||||
|
ROUSSE,Louis,8,B
|
||||||
|
ROUX,Gaetan,8,B
|
||||||
|
ROUYRE--CROS,Célian,10,B
|
||||||
|
SOURBE,François-G,10,B
|
||||||
|
STOURBE,Simon,10,B
|
||||||
|
THAI,Dany,12,B
|
||||||
|
THÉODORE,Jonathan,12,B
|
||||||
|
VANDROUX,Benoit,12,B
|
||||||
|
VEYSSIERE,Thibaud,14,B
|
||||||
|
VIÉ,Adrien,14,B
|
||||||
|
YE,Luan,14,B
|
||||||
|
ZARKA,Amélie,15,A
|
|
|
@ -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))
|
|
@ -0,0 +1,116 @@
|
||||||
|
import discord
|
||||||
|
from discord import app_commands
|
||||||
|
from discord.app_commands import Choice
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from classes.my_cog import MyCog
|
||||||
|
|
||||||
|
|
||||||
|
class CogGroup(app_commands.Group, name="cog", description="Gérer les cogs"):
|
||||||
|
def __init__(self, bot: commands.Bot):
|
||||||
|
super().__init__()
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@app_commands.command(name="load")
|
||||||
|
async def cog_load(self, interaction: discord.Interaction, extension: str):
|
||||||
|
"""
|
||||||
|
Charge une extension
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param extension: Nom de l'extension
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
await self.bot.load_extension(f"cogs.{extension.lower()}")
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` chargée !")
|
||||||
|
|
||||||
|
except commands.ExtensionAlreadyLoaded:
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` déjà chargée...")
|
||||||
|
|
||||||
|
except commands.ExtensionNotFound:
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` non trouvée...")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
await interaction.response.send_message(f"Une erreur inconnue est survenue:\n`{e}`")
|
||||||
|
|
||||||
|
@app_commands.command(name="unload")
|
||||||
|
async def cog_unload(self, interaction: discord.Interaction, extension: str):
|
||||||
|
"""
|
||||||
|
Décharge une extension
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param extension: Nom de l'extension
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
await self.bot.unload_extension(f"cogs.{extension.lower()}")
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` déchargée !")
|
||||||
|
|
||||||
|
except commands.ExtensionNotLoaded:
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` non chargée...")
|
||||||
|
|
||||||
|
except commands.ExtensionNotFound:
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` non trouvée...")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
await interaction.response.send_message(f"Une erreur inconnue est survenue:\n`{e}`")
|
||||||
|
|
||||||
|
@app_commands.command(name="reload")
|
||||||
|
async def cog_reload(self, interaction: discord.Interaction, extension: str):
|
||||||
|
"""
|
||||||
|
Recharge une extension
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param extension: Nom de l'extension
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def fun():
|
||||||
|
await self.bot.load_extension(f"cogs.{extension.lower()}")
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` rechargée !")
|
||||||
|
|
||||||
|
try:
|
||||||
|
await self.bot.unload_extension(f"cogs.{extension.lower()}")
|
||||||
|
await fun()
|
||||||
|
|
||||||
|
except (commands.ExtensionAlreadyLoaded, commands.ExtensionNotLoaded):
|
||||||
|
await fun()
|
||||||
|
|
||||||
|
except commands.ExtensionNotFound:
|
||||||
|
await interaction.response.send_message(f"Extension `{extension}` non trouvée...")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
await interaction.response.send_message(f"Une erreur inconnue est survenue:\n`{e}`")
|
||||||
|
|
||||||
|
@app_commands.command(name="list")
|
||||||
|
async def cog_list(self, interaction: discord.Interaction):
|
||||||
|
"""
|
||||||
|
Voir la liste des extensions
|
||||||
|
:param interaction: discord interaction
|
||||||
|
"""
|
||||||
|
enabled = [str(ext) for ext in self.bot.extensions]
|
||||||
|
total_list = self.bot.initial_extensions
|
||||||
|
disabled = list(set(total_list).difference(enabled))
|
||||||
|
|
||||||
|
msg = "✅ **Enabled**\n"
|
||||||
|
for ext in enabled:
|
||||||
|
msg += f"* `{ext[5:]}`\n"
|
||||||
|
msg += "\n❌ **Disabled**\n"
|
||||||
|
for ext in disabled:
|
||||||
|
msg += f"* `{ext[5:]}`\n"
|
||||||
|
|
||||||
|
embed = discord.Embed(title="Liste des extensions",
|
||||||
|
description=msg,
|
||||||
|
color=discord.Color.blurple())
|
||||||
|
await interaction.response.send_message(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
|
class Admin(MyCog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
super().__init__(bot)
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
# Add cogs commands group to cog
|
||||||
|
self.bot.tree.add_command(CogGroup(self.bot))
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(Admin(bot))
|
|
@ -0,0 +1,64 @@
|
||||||
|
import discord
|
||||||
|
from discord import app_commands
|
||||||
|
from discord.app_commands import Choice
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
@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)
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(EDT(bot))
|
|
@ -0,0 +1,55 @@
|
||||||
|
import discord
|
||||||
|
import random
|
||||||
|
import aiohttp
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
from os import getenv
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from discord import app_commands
|
||||||
|
from discord import Embed
|
||||||
|
#from discord.app_commands import Choice
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from classes.my_cog import MyCog
|
||||||
|
|
||||||
|
|
||||||
|
class Fact(MyCog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
super().__init__(bot)
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@app_commands.command(name="fact")
|
||||||
|
async def fact(self, interaction: discord.Interaction, private: bool=False):
|
||||||
|
"""
|
||||||
|
Vous reprendriez bien un petit shot de culture G ?
|
||||||
|
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param private: Garder ce petit bijou pour soi
|
||||||
|
"""
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
'Authorization': f'Bearer {getenv("WIKIMEDIA_ACCESS_TOKEN")}',
|
||||||
|
'User-Agent': 'Staticky (https://mp2i-vms.fr)'
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
response = await session.get("https://fr.wikipedia.org/api/rest_v1/page/random/summary", headers=headers)
|
||||||
|
data = await response.json()
|
||||||
|
|
||||||
|
embed = Embed(
|
||||||
|
title=data.get("title", "Titre inconnu"),
|
||||||
|
url=data.get("content_urls").get("desktop").get("page"),
|
||||||
|
description=data.get('extract')
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.set_thumbnail(url=data.get('thumbnail').get('source'))
|
||||||
|
|
||||||
|
await interaction.response.send_message("", embed=embed, ephemeral=private)
|
||||||
|
except Exception as e:
|
||||||
|
await interaction.response.send_message(f"Le message n'a pas pu être envoyé...\n`Erreur : {e}`",
|
||||||
|
ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(Fact(bot))
|
|
@ -0,0 +1,39 @@
|
||||||
|
import discord
|
||||||
|
import random
|
||||||
|
from discord import app_commands
|
||||||
|
from discord.app_commands import Choice
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from classes.my_cog import MyCog
|
||||||
|
|
||||||
|
|
||||||
|
class Fun(MyCog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
super().__init__(bot)
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@app_commands.command(name="chuchoter")
|
||||||
|
async def chuchoter(self, interaction: discord.Interaction, message: str, channel: discord.TextChannel=None):
|
||||||
|
"""
|
||||||
|
Chuchote à Staticky un message qu'il partagera (attention ne lui faites pas aveuglément confiance)
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param channel: Salon dans lequel le message sera partagé
|
||||||
|
:param message: Message à partagerE
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
if channel is None:
|
||||||
|
channel = interaction.channel
|
||||||
|
|
||||||
|
to_send = f"**Quelqu'un m'a chuchoté :** \"{message}\""
|
||||||
|
if random.randint(1, 6) == 1:
|
||||||
|
to_send += f"\nJe balance, c'est {interaction.user.mention} !"
|
||||||
|
await channel.send(to_send)
|
||||||
|
await interaction.response.send_message(f"Message envoyé dans {channel.mention}\n>>> {message}",
|
||||||
|
ephemeral=True)
|
||||||
|
except Exception as e:
|
||||||
|
await interaction.response.send_message(f"Le message n'a pas pu être envoyé...\n`Erreur : {e}`",
|
||||||
|
ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(Fun(bot))
|
|
@ -0,0 +1,76 @@
|
||||||
|
import discord
|
||||||
|
from discord import app_commands
|
||||||
|
from discord.app_commands import Choice
|
||||||
|
from discord.ext import commands
|
||||||
|
import pytz
|
||||||
|
|
||||||
|
from classes.my_cog import MyCog
|
||||||
|
|
||||||
|
|
||||||
|
class Utils(MyCog):
|
||||||
|
def __init__(self, bot):
|
||||||
|
super().__init__(bot)
|
||||||
|
self.bot = bot
|
||||||
|
self.context_menu_quote = app_commands.ContextMenu(name="Quote", callback=self.quote_message)
|
||||||
|
bot.tree.add_command(self.context_menu_quote)
|
||||||
|
|
||||||
|
@app_commands.command(name="quote")
|
||||||
|
async def quote(self, interaction: discord.Interaction, link: str):
|
||||||
|
"""
|
||||||
|
Citer un message
|
||||||
|
:param interaction: discord interaction
|
||||||
|
:param link: Lien du message à citer
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
splited_link = link.split("/")
|
||||||
|
|
||||||
|
channel_id = int(splited_link[5])
|
||||||
|
message_id = int(splited_link[6])
|
||||||
|
|
||||||
|
channel = await self.bot.fetch_channel(channel_id)
|
||||||
|
quoted_message = await channel.fetch_message(message_id)
|
||||||
|
|
||||||
|
embed = discord.Embed(
|
||||||
|
description=quoted_message.content,
|
||||||
|
timestamp=quoted_message.created_at.astimezone(pytz.timezone('Europe/Berlin')),
|
||||||
|
color=discord.Color.random()
|
||||||
|
)
|
||||||
|
embed.set_author(name=f"{quoted_message.author.name}",
|
||||||
|
url=link,
|
||||||
|
icon_url=quoted_message.author.display_avatar.url)
|
||||||
|
|
||||||
|
embed.set_footer(text=f"Quoted by {interaction.user.name}")
|
||||||
|
|
||||||
|
await interaction.channel.send(embed=embed)
|
||||||
|
await interaction.response.send_message("Citation opérée avec succès !",
|
||||||
|
ephemeral=True)
|
||||||
|
|
||||||
|
except:
|
||||||
|
await interaction.response.send_message(
|
||||||
|
f"Impossible de citer ce message...\nVérifiez que le lien du message soit valide",
|
||||||
|
ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
async def quote_message(self, interaction: discord.Interaction, message: discord.Message):
|
||||||
|
""""
|
||||||
|
Citer un message
|
||||||
|
"""
|
||||||
|
embed = discord.Embed(
|
||||||
|
description=message.content,
|
||||||
|
timestamp=message.created_at.astimezone(pytz.timezone('Europe/Berlin')),
|
||||||
|
color=discord.Color.random()
|
||||||
|
)
|
||||||
|
embed.set_author(
|
||||||
|
name=f"{message.author.name}",
|
||||||
|
url=message.jump_url,
|
||||||
|
icon_url=message.author.display_avatar.url
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.set_footer(text=f"Quoted by {interaction.user.name}")
|
||||||
|
await interaction.channel.send(embed=embed)
|
||||||
|
await interaction.response.send_message("Citation opérée avec succès !",
|
||||||
|
ephemeral=True)
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(Utils(bot))
|
|
@ -0,0 +1,218 @@
|
||||||
|
import pandas
|
||||||
|
import datetime
|
||||||
|
import icalendar
|
||||||
|
import uuid
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pd_eleves = pandas.read_csv('Resources/eleves.csv')
|
||||||
|
np_eleves = pd_eleves.to_numpy()
|
||||||
|
|
||||||
|
pd_colles = pandas.read_csv('Resources/colles.csv')
|
||||||
|
np_colles = pd_colles.to_numpy()
|
||||||
|
|
||||||
|
local_tz = "Europe/Paris"
|
||||||
|
|
||||||
|
jour_to_delta = {
|
||||||
|
"lundi": 0,
|
||||||
|
"mardi": 1,
|
||||||
|
"mercredi": 2,
|
||||||
|
"jeudi": 3,
|
||||||
|
"vendredi": 4,
|
||||||
|
}
|
||||||
|
|
||||||
|
langues = ["Anglais", "Allemand", "Espagnol"]
|
||||||
|
|
||||||
|
option_langues = {
|
||||||
|
"EN": ["Anglais LV1"],
|
||||||
|
"EN-DE": ["Anglais LV1", "Allemand LV2"],
|
||||||
|
"EN-ES": ["Anglais LV1", "Espagnol LV2"],
|
||||||
|
"DE-EN": ["Allemand LV1", "Anglais LV2"],
|
||||||
|
"ES-EN": ["Espangol LV1", "Anglais LV2"]
|
||||||
|
}
|
||||||
|
|
||||||
|
def display(cal):
|
||||||
|
return cal.to_ical().decode("utf-8").replace('\r\n', '\n').strip()
|
||||||
|
|
||||||
|
|
||||||
|
def open_ics(filename: str) -> icalendar.Calendar:
|
||||||
|
"""
|
||||||
|
Ouvre un fichier .ics et renvoie un objet Calendar
|
||||||
|
"""
|
||||||
|
p = Path(__file__).with_name('Resources')
|
||||||
|
p = Path(p, filename)
|
||||||
|
with p.open('r') as f:
|
||||||
|
opened_cal = icalendar.Calendar.from_ical(f.read())
|
||||||
|
|
||||||
|
return opened_cal
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def add_events_from_ics(filename: str, new_cal: icalendar.Calendar):
|
||||||
|
"""
|
||||||
|
Ajoute des évènements depuis un fichier .ics vers un objet icalendar.Calendar
|
||||||
|
"""
|
||||||
|
cal_to_import = open_ics(filename=filename)
|
||||||
|
|
||||||
|
for event in cal_to_import.walk("vevent"):
|
||||||
|
new_cal.add_component(event)
|
||||||
|
|
||||||
|
return new_cal
|
||||||
|
|
||||||
|
|
||||||
|
def get_eleves():
|
||||||
|
"""
|
||||||
|
Renvoie la liste des eleves avec leur groupe associés à leur groupe, a utiliser dans la /cmd
|
||||||
|
"""
|
||||||
|
liste = {}
|
||||||
|
for row in np_eleves[1:]:
|
||||||
|
liste[f"{row[0]} {row[1]} - {row[2]}"] = row[2]
|
||||||
|
return liste
|
||||||
|
|
||||||
|
def debut_semaine_to_datetime(date_string: str) -> datetime.time:
|
||||||
|
"""
|
||||||
|
Transforme un string de debut de semaine au format dd/mm/yyyy en datetime.time
|
||||||
|
"""
|
||||||
|
return datetime.datetime.strptime(date_string, "%d/%m/%y")
|
||||||
|
|
||||||
|
|
||||||
|
def get_colles_groupe(np_colles, groupe, option_langue):
|
||||||
|
"""
|
||||||
|
Renvoie les colles pour un groupe sous la forme d'une liste d'évènements ICS
|
||||||
|
|
||||||
|
np_colles: l'array 2D numpy contenant le colloscope
|
||||||
|
groupe: str, le numéro du groupe
|
||||||
|
option_langue: str, les options de langue
|
||||||
|
"""
|
||||||
|
liste_colles = []
|
||||||
|
for row in np_colles[1:]:
|
||||||
|
|
||||||
|
if pandas.isnull(row[0]) or row[0] == "pas de colle":
|
||||||
|
# il n'y a pas de colle, on skip !
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
# Si la colle n'est pas la LV1 de l'élève, on skip
|
||||||
|
if row[0] == "Anglais" and not option_langue.startswith("EN"):
|
||||||
|
continue
|
||||||
|
elif row[0] == "Allemand" and not option_langue.startswith("DE"):
|
||||||
|
continue
|
||||||
|
elif row[0] == "Espagnol" and not option_langue.startswith("ES"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
for index, colle in enumerate(row[5:]):
|
||||||
|
# les quatre premières cases ne sont pas
|
||||||
|
if pandas.isnull(colle) or colle != groupe:
|
||||||
|
continue
|
||||||
|
|
||||||
|
new_colle = icalendar.Event()
|
||||||
|
new_colle.add("summary", f"Colle {row[0]}")
|
||||||
|
new_colle.add("description", f"{row[3]}")
|
||||||
|
new_colle.add("location", row[4])
|
||||||
|
|
||||||
|
new_colle.add("dtstamp", datetime.datetime.now())
|
||||||
|
|
||||||
|
new_colle.add("uid", str(uuid.uuid4()))
|
||||||
|
date = debut_semaine_to_datetime(np_colles[0][index+5])
|
||||||
|
date += datetime.timedelta(days=jour_to_delta[row[1]])
|
||||||
|
date += datetime.timedelta(hours=int(row[2][:-1]))
|
||||||
|
new_colle.add("dtstart", date, parameters={"tzid": local_tz})
|
||||||
|
|
||||||
|
date += datetime.timedelta(hours=1)
|
||||||
|
new_colle.add("dtend", date, parameters={"tzid": local_tz})
|
||||||
|
|
||||||
|
liste_colles.append(new_colle)
|
||||||
|
|
||||||
|
return liste_colles
|
||||||
|
|
||||||
|
def get_cours_SI(np_colles, groupe):
|
||||||
|
"""
|
||||||
|
Renvoie les colles pour un groupe sous la forme d'une liste d'évènements ICS, cad
|
||||||
|
icalendar.Event
|
||||||
|
|
||||||
|
np_colles: l'array 2D numpy contenant le colloscope
|
||||||
|
groupe: str, le numéro du groupe
|
||||||
|
"""
|
||||||
|
liste_cours = []
|
||||||
|
for index, cell in enumerate(np_colles[-1][5:]):
|
||||||
|
heure = 17
|
||||||
|
groupes = cell.split("§")
|
||||||
|
if groupe in groupes or f"\n{groupe}" in groupes:
|
||||||
|
heure = 16
|
||||||
|
|
||||||
|
cours_si = icalendar.Event()
|
||||||
|
cours_si.add("summary", "TD SI")
|
||||||
|
cours_si.add("description", "M. Derumeaux R415")
|
||||||
|
cours_si.add("dtstamp", datetime.datetime.now())
|
||||||
|
cours_si.add("uid", str(uuid.uuid4()))
|
||||||
|
|
||||||
|
date = debut_semaine_to_datetime(np_colles[0][index+5])
|
||||||
|
date += datetime.timedelta(days=jour_to_delta["mardi"])
|
||||||
|
date += datetime.timedelta(hours=heure)
|
||||||
|
cours_si.add("dtstart", date, parameters={"tzid": local_tz})
|
||||||
|
|
||||||
|
date += datetime.timedelta(hours=1)
|
||||||
|
cours_si.add("dtend", date, parameters={"tzid": local_tz})
|
||||||
|
liste_cours.append(cours_si)
|
||||||
|
|
||||||
|
|
||||||
|
return liste_cours
|
||||||
|
|
||||||
|
def get_langues(langues):
|
||||||
|
"""
|
||||||
|
Renvoie la liste de cours de langue associés
|
||||||
|
list[icalendar.Event]
|
||||||
|
"""
|
||||||
|
liste_langues = []
|
||||||
|
p = Path(__file__).with_name('Resources')
|
||||||
|
p = Path(p, f"EDT_Langues.ics")
|
||||||
|
with p.open('r') as f:
|
||||||
|
opened_cal = icalendar.Calendar.from_ical(f.read())
|
||||||
|
|
||||||
|
for event in opened_cal.walk("vevent"):
|
||||||
|
if event.get("summary") in option_langues[langues]:
|
||||||
|
liste_langues.append(event)
|
||||||
|
|
||||||
|
return liste_langues
|
||||||
|
|
||||||
|
|
||||||
|
def get_calendar(groupe, langues, split: bool = False):
|
||||||
|
""""
|
||||||
|
Renvoie un calendrier (icalendar.Calendar) pour un groupe avec des langues donné
|
||||||
|
"""
|
||||||
|
moitie = None
|
||||||
|
for row in np_eleves[1:]:
|
||||||
|
if row[2] == int(groupe):
|
||||||
|
moitie = row[3]
|
||||||
|
break
|
||||||
|
|
||||||
|
new_cal_edt = open_ics("Base_Calendar.ics")
|
||||||
|
|
||||||
|
if split:
|
||||||
|
new_cal_colles = open_ics("Base_Calendar.ics")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
new_cal_edt = add_events_from_ics(filename="EDT_Base.ics", new_cal=new_cal_edt)
|
||||||
|
new_cal_edt = add_events_from_ics(filename=f"EDT_{moitie}.ics", new_cal=new_cal_edt)
|
||||||
|
|
||||||
|
|
||||||
|
for event in get_langues(langues):
|
||||||
|
new_cal_edt.add_component(event)
|
||||||
|
|
||||||
|
for event in get_cours_SI(np_colles, groupe):
|
||||||
|
new_cal_edt.add_component(event)
|
||||||
|
|
||||||
|
if split:
|
||||||
|
for event in get_colles_groupe(np_colles, groupe, langues):
|
||||||
|
new_cal_colles.add_component(event)
|
||||||
|
return new_cal_edt.to_ical(), new_cal_colles.to_ical()
|
||||||
|
|
||||||
|
else:
|
||||||
|
for event in get_colles_groupe(np_colles, groupe, langues):
|
||||||
|
new_cal_edt.add_component(event)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return [new_cal_edt.to_ical()]
|
|
@ -0,0 +1,42 @@
|
||||||
|
from typing import Optional, List
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
|
||||||
|
class MyClient(commands.Bot):
|
||||||
|
def __init__(self):
|
||||||
|
intents = discord.Intents.none()
|
||||||
|
intents.guilds = True
|
||||||
|
intents.messages = True
|
||||||
|
super().__init__(intents=intents, command_prefix=".")
|
||||||
|
|
||||||
|
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=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(f"Discord version : {discord.__version__}")
|
||||||
|
print('------')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
client = MyClient()
|
||||||
|
client.run(getenv("TOKEN"))
|
Loading…
Reference in New Issue