Merge pull request 'dev' (#1) from dev into main

Reviewed-on: #1
This commit is contained in:
Arthur 2023-12-22 22:50:22 +01:00
commit 2cc58c953e
18 changed files with 1645 additions and 2 deletions

2
.gitignore vendored
View File

@ -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/

View File

@ -1,3 +1,35 @@
# 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.

View File

@ -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

BIN
Resources/Colloscope.ods Normal file

Binary file not shown.

227
Resources/EDT_A.ics Normal file
View File

@ -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

220
Resources/EDT_B.ics Normal file
View File

@ -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

269
Resources/EDT_Base.ics Normal file
View File

@ -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

122
Resources/EDT_Langues.ics Normal file
View File

@ -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

74
Resources/colles.csv Normal file
View File

@ -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"
1 Semaine 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
2 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
3 matière jour heure colleur salle
4
5 Allemand jeudi 18h Mme ADAM C258 9 9 9 9 9 9 9
6 Mathématiques vendredi 15h Mme MULLAERT C181 1 2 3 4 5 6 7 8 9 10 11 12 1 14 15 8
7 Anglais mercredi 14h Mme. LE GOURIELLEC C393 3 2 3 4 5 6 7 8 9 10 11 12 13 14 15
8 Mathématiques vendredi 14h M. BOUVEROT M103 2 3 4 5 6 7 8 9 10 11 12 13 14 15 7 1
9 Physique mardi 16h Mme. CHEVALIER R103 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1
10 Mathématiques vendredi 17h M. OUBAHA C382 3 4 5 6 7 8 9 10 11 12 13 14 15 6 1 2
11 Anglais mardi 16h Mme. BELAGOUNE C454 1 4 5 6 7 8 9 10 11 12 13 14 15 1 2
12 pas de colle 4 5 6 7 8 9 10 11 12 13 14 15 5 1 2 3
13 Physique mardi 17h M. COLIN C386 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3
14 Mathématiques mercredi 15h M. BOULLY R004 5 6 7 8 9 10 11 12 13 14 15 7 13 2 3 4
15 Anglais mardi 16h M. HERBAUT C392 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4
16 Mathématiques mardi 18h M. RAPIN V152 6 7 8 9 10 11 12 13 14 15 3 1 2 3 4 5
17 Physique mercredi 17h M. POUPY R012 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5
18 Mathématiques mardi 17h M. CARPINTERO C383 7 8 9 10 11 12 13 14 15 2 1 2 3 4 5 6
19 Anglais mercredi 16h Mme. MANN C380 7 8 9 10 11 12 13 14 7 1 2 3 4 5 6
20 pas de colle 8 9 10 11 12 13 14 15 1 1 2 3 4 5 6 7
21 Physique mardi 17h Mme. CHEVALIER R103 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7
22
23 Anglais mercredi 15h Mme. LE GOURIELLEC C393 9 10 11 12 13 14 15 15 2 3 4 5 6 7 8
24 Mathématiques vendredi 14h Mme MULLAERT C181 10 11 12 13 14 15 15 1 2 3 4 5 6 7 8 9
25 Physique jeudi 18h M. DE ROUX C054 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9
26 Mathématiques vendredi 18h M. OUBAHA C382 11 12 13 14 15 14 1 2 3 4 5 6 7 8 9 10
27 Anglais mardi 17h Mme. BELAGOUNE C454 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10
28 pas de colle 12 13 14 15 13 1 2 3 4 5 6 7 8 9 10 11
29 Physique mardi 16h M. COLIN C386 12 13 14 15 1 2 3 4 5 6 4 8 9 10 11
30 Mathématiques mercredi 14h M. BOULLY R004 13 14 15 12 1 2 3 4 5 6 7 8 9 10 11 12
31 Anglais mardi 16h Mme. FULCONIS C393 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12
32 Mathématiques jeudi 18h M. RAPIN C284 14 15 11 1 2 3 4 5 6 7 8 9 10 11 12 13
33 Physique mardi 18h Mme. CHEVALIER R103 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13
34 Mathématiques mardi 18h M. CARPINTERO C383 15 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14
35 Anglais mercredi 17h Mme. MANN C380 15 1 2 3 4 5 6 1 8 9 10 11 12 13 14
36 pas de colle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
37 Physique mercredi 18h M. POUPY R012 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
38 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

46
Resources/eleves.csv Normal file
View File

@ -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
1 Nom Prénon Groupe de coll TD
2 ABOUJAIB Alexandre 1 A
3 AJAN George 1 A
4 AKRAD Lina 5 A
5 AUBERT Nicolas 3 A
6 BADR Roman 3 A
7 BAZIRE Aurélien 3 A
8 BOIT Arthur 5 A
9 BOUBKER Youssef 5 A
10 BOUDJEMA Dylan 1 A
11 CHIRIAC Minhea 7 A
12 COURIER Marine 7 A
13 DAGUIN Joseph 7 A
14 DAUGUEN Gabriel 9 A
15 DE WEER Matthias 9 A
16 DESBOUIS Katell 11 A
17 DUPOUY Jérémie 11 A
18 HARIRI--GAUTIER-PICARD Grégoire 11 A
19 JURICEVIC Matteo 13 A
20 KNANOUA Anas 13 A
21 LESENNE Pierrick 13 A
22 LIN Hao 9 A
23 MASBATIN Lucas 15 A
24 MAYURAN Mithushan 15 A
25 MESSAHLI Yassine 2 B
26 MOGUÉROU Valentin 2 B
27 MOHELLEBI Mathéo 2 B
28 MOUISSET--FERRARA Maël 4 B
29 OTTAVI Corentin 4 B
30 PONCE Alexian 4 B
31 PUJOL Raphaël 6 B
32 PUSTETTO Mathis 6 B
33 RADICE Roman 6 B
34 RAT Evelyn 8 B
35 ROUSSE Louis 8 B
36 ROUX Gaetan 8 B
37 ROUYRE--CROS Célian 10 B
38 SOURBE François-G 10 B
39 STOURBE Simon 10 B
40 THAI Dany 12 B
41 THÉODORE Jonathan 12 B
42 VANDROUX Benoit 12 B
43 VEYSSIERE Thibaud 14 B
44 VIÉ Adrien 14 B
45 YE Luan 14 B
46 ZARKA Amélie 15 A

17
classes/my_cog.py Normal file
View File

@ -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))

116
cogs/admin.py Normal file
View File

@ -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))

64
cogs/edt.py Normal file
View File

@ -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))

55
cogs/fact.py Normal file
View File

@ -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))

39
cogs/fun.py Normal file
View File

@ -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))

76
cogs/utils.py Normal file
View File

@ -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))

218
create_calendar.py Normal file
View File

@ -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()]

42
main.py Normal file
View File

@ -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"))