diff --git a/Resources/Base_Calendar.ics b/Resources/Base_Calendar.ics index 8afc8c0..1d0d7bb 100644 --- a/Resources/Base_Calendar.ics +++ b/Resources/Base_Calendar.ics @@ -1,5 +1,5 @@ BEGIN:VCALENDAR -PRODID:-//mp2i-vms//Stackity Bot Inc//EN +PRODID:-//mp2i-vms-[2]-(23-24)-s2//Stackity Bot Inc//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH diff --git a/Resources/Colloscope.ods b/Resources/Colloscope.ods deleted file mode 100644 index 3c62e22..0000000 Binary files a/Resources/Colloscope.ods and /dev/null differ diff --git a/Resources/EDT_A.ics b/Resources/EDT_A.ics deleted file mode 100644 index b0c1a31..0000000 --- a/Resources/EDT_A.ics +++ /dev/null @@ -1,227 +0,0 @@ -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 diff --git a/Resources/EDT_B.ics b/Resources/EDT_B.ics deleted file mode 100644 index 56332dd..0000000 --- a/Resources/EDT_B.ics +++ /dev/null @@ -1,220 +0,0 @@ -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 diff --git a/Resources/EDT_Base.ics b/Resources/EDT_Base.ics deleted file mode 100644 index 9a36b5f..0000000 --- a/Resources/EDT_Base.ics +++ /dev/null @@ -1,269 +0,0 @@ -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 diff --git a/Resources/EDT_Langues.ics b/Resources/EDT_Langues.ics deleted file mode 100644 index 2f2d7ab..0000000 --- a/Resources/EDT_Langues.ics +++ /dev/null @@ -1,122 +0,0 @@ -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 diff --git a/Resources/colles.csv b/Resources/colles.csv deleted file mode 100644 index 23680d7..0000000 --- a/Resources/colles.csv +++ /dev/null @@ -1,74 +0,0 @@ -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" diff --git a/Resources/colloscope-v2.csv b/Resources/colloscope-v2.csv new file mode 100644 index 0000000..b2d07bd --- /dev/null +++ b/Resources/colloscope-v2.csv @@ -0,0 +1,73 @@ +;Semaine;;;;;;;18;19;20;21;22;23 +;;;;;;;;26/02/24;04/03/24;11/03/24;18/03/24;25/03/24;01/04/24 +type;matière;jour;heure;durée;colleur;récurrent (semaines);salle;;;;;; +;;;;;;;;;;;;; +colle;Mathématiques;vendredi;17h;1h;M. OUBAHA;;C382;2;3;4;5;6;7 +colle;Anglais;mercredi;14h;1h;Mme. LE GOURIELLEC;;C393;2;3;4;1;2;3 +colle;Mathématiques;mercredi;15h;1h;M. BOULLY;;R004;3;4;5;6;7;8 +colle;Physique;mardi;14h;1h;Mme. CHEVALIER;;R103;9;4;5;6;7;8 +colle;Mathématiques;mardi;18h;1h;M. RAPIN;;V152;4;5;6;7;8;9 +colle;Anglais;mardi;14h;1h;Mme. BELAGOUNE;;C454;14;15;6;7;8;9 +;pas de colle;;;;;;;5;6;7;8;9;10 +colle;Physique;mardi;17h;1h;M. COLIN;;C386;5;6;7;8;9;10 +colle;Mathématiques;mercredi;13h30;1h;M. BOUVEROT;;;6;7;8;9;10;11 +colle;Anglais;lundi;13h;1h;M. HERBAUT;;V052;6;7;8;9;10;11 +colle;Mathématiques;mardi;14h;1h;Mme. MULLAERT;;M070;7;8;9;10;11;12 +colle;Physique;mercredi;17h;1h;M. POUPY;;R012;7;8;9;10;11;12 +;pas de colle;;;;;;;;;;;; +colle;Anglais;mercredi;16h;1h;Mme. MANN;;C380;8;9;10;11;12;13 +;pas de colle;;;;;;;9;10;11;12;13;14 +colle;Physique;mardi;17h;1h;Mme. CHEVALIER;;R103;3;10;1;2;3;14 +colle;Mathématiques;mercredi;13h;1h;M. CARPINTERO;;V152;10;11;12;13;14;15 +colle;Anglais;mercredi;15h;1h;Mme. LE GOURIELLEC;;C393;10;11;12;13;14;1 +colle;Mathématiques;mercredi;14h30;1h;M. BOUVEROT;;;11;12;13;14;15;13 +colle;Physique;jeudi;18h;1h;M. DE ROUX;;C054;11;12;13;14;15; +colle;Mathématiques;vendredi;18h;1h;M. OUBAHA;;C382;12;13;14;15;12;1 +colle;Anglais;jeudi;15h;1h;Mme. BELAGOUNE;;C386;12;13;14;15;;15 +;pas de colle;;;;;;;13;14;15;11;1;2 +colle;Physique;vendredi;16h;1h;Mme. CHIBANI;;C284;13;14;15;;1;2 +colle;Mathématiques;mercredi;14h;1h;M. BOULLY;;R004;14;15;10;1;2;3 +colle;Anglais;jeudi;14h;1h;Mme. BELAGOUNE;;C386;4;5;;5;6;7 +colle;Mathématiques;jeudi;18h;1h;M. RAPIN;;C284;15;9;1;2;3;4 +colle;Physique;lundi;12h;1h;Mme. CHEVALIER;;R105;15;;11;12;13;4 +colle;Mathématiques;mercredi;14h;1h;M. CARPINTERO;;V152;8;1;2;3;4;5 +colle;Anglais;mercredi;17h;1h;Mme. MANN;;C380;;1;2;3;4;5 +;pas de colle;;;;;;;1;2;3;4;5;6 +colle;Physique;mercredi;18h;1h;M. POUPY;;R012;1;2;3;4;5;6 +colle;Informatique;lundi;12h;1h;M. JOSPIN;;;13;4;9;6;11;7 +colle;Informatique;lundi;13h;1h;M. JOSPIN;;;14;8;15;5;13;8 +colle;TP Info;mercredi;14h;2h;;;;5,12,15;10,9,13;11,6,14;4,7,8;5,9,10;6,15,12 +colle;TP Info;mercredi;16h;2h;;;;6,11,9;7,14,10;4,5,8;12,13,15;; +;;;;;;;;;;;;; +cours;TP Physique;lundi;8h30;1h30;Mme CHEVALIER;1;R417;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15 +cours;TP Physique;lundi;10h;1h30;Mme CHEVALIER;1;R417;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8 +cours;TP Info;lundi;10h;1h30;M. HALFON;1;C154;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15 +cours;TP Info;lundi;8h30;1h30;M. HALFON;1;C154;gr 4 à 8;gr 4 à 8;gr 4 à 8;gr 4 à 8;gr 4 à 8;gr 4 à 8 +cours;TD Maths;vendredi;11h;2h;Mme MULLAERT;2;M103;B+2+3;A+1;B+2+3;A+1;B+2+3;A+1 +cours;TD Maths;vendredi;14h;2h;Mme MULLAERT;2;M103;A+1;B+2+3;A+1;B+2+3;A+1;B+2+3 +cours;TP Info;vendredi;14h;2h;M. HALFON;2;;B;A;B;A;B;A +cours;TP Info;vendredi;11h;2h;M. HALFON;2;;A;B;A;B;A;B +cours;TD Physique;jeudi;14h;1h;Mme CHEVALIER;1;R011;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15;gr 9 à 15 +cours;TD Physique;jeudi;15h;1h;Mme CHEVALIER;1;R011;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8;gr 1 à 8 +cours;Info;jeudi;10h;3h;M. HALFON;1;;A+B;;;;; +cours ;Chimie;jeudi;10h;2h;Mme CHEVALIER;1;R101;SI;;;;; +cours;TIPE Physique;jeudi;12h;0h30;Mme CHEVALIER;1;R101;SI;;;;; +cours;TP ITC ;jeudi;13h30;1h30;M. HALFON;1;;SI;;;;; +cours;TP SI;lundi;8h;2h;M. DERUMAUX;1;;SI;;;;; +cours;TIPE Physique;lundi;11h30;0h30;Mme CHEVALIER;1;;SI;;;;; +cours;SI;lundi;12h;1h;M. DERUMAUX;1;;SI;;;;; +cours;SI;mardi;14h;1h;M. DERUMAUX;1;;SI;;;;; +cours ;Maths;lundi;14h;4h;Mme MULLAERT;1;M103;A+B+SI;;;;; +cours;Maths;mardi;8h;3h;Mme MULLAERT;1;M103;A+B+SI;;;;; +cours;Physique;mardi;15h;2h;Mme CHEVALIER;1;R013;A+B+SI;;;;; +cours ;Français-Philo;mercredi;10h;2h;Mme CHAPIRO;1;M103;A+B+SI;;;;; +cours;Physique;jeudi;8h;2h;Mme CHEVALIER;1;R101;A+B+SI;;;;; +cours;EPS;jeudi;16h;2h;M. TORRES-LACAZE;1;Gymnase;A+B+SI;;;;; +cours;Maths;vendredi;8h;3h;Mme MULLAERT;1;M103;A+B+SI;;;;; +;;;;;;;;;;;;; +cours;Anglais LV1;mardi;11h;2h;;1;;;;;;; +cours;Anglais LV2;mardi ;11h;1h30;;1;;;;;;; +cours;Espagnol LV1;mercredi;8h;2h;;1;;;;;;; +cours;Espagnol LV1;mercredi;8h30;1h30;;1;;;;;;; +cours;Allemand LV1 ;mercredi;8h;2h;;1;;;;;;; +cours;Allemand LV2;mercredi;8h30;1h30;;1;;;;;;; diff --git a/Resources/colloscope-v2.ods b/Resources/colloscope-v2.ods new file mode 100644 index 0000000..27a563b Binary files /dev/null and b/Resources/colloscope-v2.ods differ diff --git a/Resources/eleves-v2.csv b/Resources/eleves-v2.csv new file mode 100644 index 0000000..3b49c19 --- /dev/null +++ b/Resources/eleves-v2.csv @@ -0,0 +1,46 @@ +Nom;Prénon;Groupe de colle;TD +ABOUJAIB;Alexandre;4;A +AJAN;George;4;A +AKRAD;Lina;1;SI +AUBERT;Nicolas;1;SI +BADR;Roman;4;A +BAZIRE;Aurélien;5;A +BOIT;Arthur;5;A +BOUBKER;Youssef;5;A +BOUDJEMA;Dylan;1;SI +CHIRIAC;Mihnea;6;A +COURIER;Marine;6;A +DAGUIN;Joseph;6;A +DAUGUEN;Gabriel;7;A +DE WEER;Matthias;7;A +DESBOUIS;Katell;2;SI +DUPOUY;Jérémie;7;A +HARIRI--GAUTIER-PICARD;Grégoire;8;A +JURICEVIC;Matteo;8;A +KNANOUA;Anas;8;A +LESENNE;Pierrick;9;A +LIN;Hao;2;SI +MASBATIN;Lucas;2;SI +MAYURAN;Mithushan;9;A +MESSAHLI;Yassine;9;A +MOGUÉROU;Valentin;10;B +MOHELLEBI;Mathéo;10;B +MOUISSET--FERRARA;Maël;10;B +OTTAVI;Corentin;11;B +PONCE;Alexian;11;B +PUJOL;Raphaël;11;B +PUSTETTO;Mathis;12;B +RADICE;Roman;12;B +RAT;Evelyn;12;B +ROUSSE;Louis;3;SI +ROUX;Gaetan;3;SI +ROUYRE--CROS;Célian;3;SI +SOURBE;François-Gabriel;13;B +STOURBE;Simon;13;B +THAI;Dany;13;B +THÉODORE;Jonathan;14;B +VANDROUX;Benoit;14;B +VEYSSIERE;Thibaud;14;B +VIÉ;Adrien;15;B +YE;Luan;15;B +ZARKA;Amélie;15;B diff --git a/Resources/eleves.csv b/Resources/eleves.csv deleted file mode 100644 index 8821c28..0000000 --- a/Resources/eleves.csv +++ /dev/null @@ -1,46 +0,0 @@ -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 diff --git a/check_collisions.py b/check_collisions.py new file mode 100644 index 0000000..ae8245c --- /dev/null +++ b/check_collisions.py @@ -0,0 +1,106 @@ +""" + Objectif: déterminer les collisions dans un fichier .ics généré, afin de pouvoir + 'valider' un colloscope. Pour cela, ce programme génère les colloscopes associés + à chaque groupe de colle puis regarde s'il y a collision entre les évènements + en faisant partie. +""" + +from typing import List + +from attr import dataclass +import icalendar +import datetime +from dateutil import rrule # https://dateutil.readthedocs.io/en/stable/rrule.html +import recurring_ical_events +from io import BytesIO + +import create_calendar + +@dataclass +class DatesEvent: + nom: str + start: datetime.date + end: datetime.date + + +def recurring_events_to_events(cal: icalendar.Calendar) -> DatesEvent: + at_date = 2024 + events = recurring_ical_events.of(cal).at(at_date) + return events + +def ical_to_dates(events: List[icalendar.Event]) -> DatesEvent: + """ + Renvoie la liste de dates et de durées de l'ensemble des évènements (SANS EVENEMENTS RECURSIFS, ecurring_events_to_events s'en étant déjà occupé !) + """ + output = [] + + for event in events: + if not event.get("RRULE"): + new_event = DatesEvent( + nom=str(event.get("SUMMARY")) + " - " + str(event.get("DESCRIPTION")), + start=event.get("DTSTART").dt, + end=event.get("DTEND").dt + ) + + output.append(new_event) + + return output + + +def check_dates_collision(start1: datetime.date, start2: datetime.date, end1: datetime.timedelta, end2: datetime.timedelta): + if start1 <= start2: + if start2 < end1: + return True + elif start1 <= start2: + # cas où dt1 commence après dt2 mais avant dt2+td2 + if end2 > end2: + return True + return False + +def check_collisions(dates: DatesEvent): + """ + Fonction qui réalise réellement le check. + Itère brutalement sur toutes les dates, par souci d'efficacité d'écriture de code, + et surtout parce que ça marche ! + """ + for date_event1 in dates: + for date_event2 in dates: + if date_event1.nom != date_event2.nom: + if check_dates_collision(date_event1.start, date_event2.start, date_event1.end, date_event2.end): + print( + f""" + ---- + Colision entre {date_event1.nom} et {date_event2.nom} + {date_event1.nom}: {date_event1.start.strftime('%d-%m-%Y: %H:%M')} à {date_event1.end.strftime('%d-%m-%Y: %H:%M')} + {date_event2.nom}: {date_event2.start.strftime('%d-%m-%Y: %H:%M')} à {date_event2.end.strftime('%d-%m-%Y: %H:%M')}""") + + +def generate_calendars(): + for groupe in range(1, 16): + + print( + f""" + ┌────────────────────────── + │ + │ GROUPE {groupe} + """ + ) + + generated_ical = create_calendar.get_calendar(str(groupe), "EN")[0] + + generated_ical = icalendar.Calendar.from_ical(generated_ical) + + + events = list(generated_ical.walk("VEVENT")) + events += recurring_events_to_events(generated_ical) + + check_collisions(ical_to_dates(events)) + + print( + f""" + │ + └────────────────────────── + """ + ) + +generate_calendars() \ No newline at end of file diff --git a/cogs/admin.py b/cogs/admin.py index 36a2ba2..b36f7dc 100644 --- a/cogs/admin.py +++ b/cogs/admin.py @@ -1,7 +1,8 @@ import discord -from discord import app_commands +from discord import app_commands, Interaction from discord.app_commands import Choice from discord.ext import commands +from typing import cast from classes.my_cog import MyCog @@ -11,6 +12,10 @@ class CogGroup(app_commands.Group, name="cog", description="Gérer les cogs"): super().__init__() self.bot = bot + async def interaction_check(self, interaction: Interaction, /) -> bool: + team = cast(discord.Team, self.bot.application.team) + return any(interaction.user.id == team_member.id for team_member in team.members) + @app_commands.command(name="load") async def cog_load(self, interaction: discord.Interaction, extension: str): """ diff --git a/cogs/edt.py b/cogs/edt.py index 826782a..aa3fd58 100644 --- a/cogs/edt.py +++ b/cogs/edt.py @@ -5,14 +5,13 @@ from discord.ext import commands from classes.my_cog import MyCog -from create_calendar import get_calendar, get_eleves, display +from create_calendar import get_calendar, 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") diff --git a/create_calendar.py b/create_calendar.py index 58042cc..e43264e 100644 --- a/create_calendar.py +++ b/create_calendar.py @@ -6,10 +6,10 @@ from pathlib import Path -pd_eleves = pandas.read_csv('Resources/eleves.csv') +pd_eleves = pandas.read_csv('Resources/eleves-v2.csv', delimiter=";", header=None) np_eleves = pd_eleves.to_numpy() -pd_colles = pandas.read_csv('Resources/colles.csv') +pd_colles = pandas.read_csv('Resources/colloscope-v2.csv', delimiter=";", header=None) np_colles = pd_colles.to_numpy() local_tz = "Europe/Paris" @@ -22,6 +22,15 @@ jour_to_delta = { "vendredi": 4, } +jour_to_byday = { + "lundi": "MO", + "mardi": "TU", + "mercredi": "WE", + "jeudi": "TH", + "vendredi": "FR", +} + + langues = ["Anglais", "Allemand", "Espagnol"] option_langues = { @@ -61,14 +70,14 @@ def add_events_from_ics(filename: str, new_cal: icalendar.Calendar): return new_cal -def get_eleves(): +def get_td_groupe(groupe: str) -> str: """ - Renvoie la liste des eleves avec leur groupe associés à leur groupe, a utiliser dans la /cmd + Renvoie le groupe de TD d'un groupe de colle (A, B ou SI) """ - liste = {} for row in np_eleves[1:]: - liste[f"{row[0]} {row[1]} - {row[2]}"] = row[2] - return liste + if row[2] == groupe: + return row[3] + def debut_semaine_to_datetime(date_string: str) -> datetime.time: """ @@ -77,6 +86,49 @@ def debut_semaine_to_datetime(date_string: str) -> datetime.time: return datetime.datetime.strptime(date_string, "%d/%m/%y") +def heure_to_timedelta(heure: str) -> datetime.timedelta: + """ + Transforme une heure au format "8h30" ou "1h30" ou "2h" en timedelta. + """ + heure = heure.split("h") + delta = datetime.timedelta(hours=int(heure[0])) + + if heure[1] != '': + delta += datetime.timedelta(minutes=int(heure[1])) + + return delta + +def creer_evenement(titre: str, debut: datetime.datetime, duree: datetime.timedelta, description: str = None, localisation: str = None, rrule: str = None) -> icalendar.Event: + """ + Renvoie un évènement icalendar.Event() + + titre str: le titre de l'évènement + debut datetime.datetime: la date de début + duree datetime.timedelta: la durée + description str: la description (Optionelle) + localisation str: localisation (Optionelle) + rrule str: règle de récurrence https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html (Optionelle) + """ + new_event = icalendar.Event() + new_event.add("summary", titre) + new_event.add("dtstart", debut, parameters={"tzid": local_tz}) + debut += duree + new_event.add("dtend", debut, parameters={"tzid": local_tz}) + + if localisation is not None: + new_event.add("location", localisation) + if description is not None: + new_event.add("description", description) + if rrule is not None: + new_event.add("rrule", rrule) + + new_event.add("uid", str(uuid.uuid4())) + new_event.add("dtstamp", datetime.datetime.now()) + + # nécessaire pour se conformer à la norme RFC 5545 + + return new_event + 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 @@ -86,47 +138,56 @@ def get_colles_groupe(np_colles, groupe, option_langue): 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": + for row in np_colles[4:40]: + if pandas.isnull(row[1]) or row[1] == "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"): + if row[1] == "Anglais" and not option_langue.startswith("EN"): continue - elif row[0] == "Allemand" and not option_langue.startswith("DE"): + elif row[1] == "Allemand" and not option_langue.startswith("DE"): continue - elif row[0] == "Espagnol" and not option_langue.startswith("ES"): + elif row[1] == "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: + for index, colle in enumerate(row[8:]): + if pandas.isnull(colle): continue + # les huit premières cases ne sont pas concernées - 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]) + if "," in list(colle): + if groupe not in colle.split(","): + continue + elif colle != groupe: + continue + # dans le cas où plusieurs groupes de colles soient concernés + + duree = heure_to_timedelta(row[4]) + # transforme la durée en timedelta + + date = debut_semaine_to_datetime(np_colles[1][index+8]) + + date += datetime.timedelta(days=jour_to_delta[row[2]]) + date += heure_to_timedelta(row[3]) + # génère la date à partir de la semaine, du jour et de l'heure - new_colle.add("dtstamp", datetime.datetime.now()) + localisation = row[7] if not pandas.isnull(row[7]) else None - 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}) + new_colle = creer_evenement( + titre=f"Colle {row[1]}", + description=f"{row[5]}" if not pandas.isnull(row[5]) else None, + localisation=localisation, + debut=date, + duree=duree + ) liste_colles.append(new_colle) return liste_colles -def get_cours_SI(np_colles, groupe): +def get_cours(np_colles, groupe): """ Renvoie les colles pour un groupe sous la forme d'une liste d'évènements ICS, cad icalendar.Event @@ -134,74 +195,131 @@ def get_cours_SI(np_colles, groupe): 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 + listes_cours = [] + groupe_td = get_td_groupe(groupe) - 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())) + for row in np_colles[41:66]: - 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}) + if pandas.isnull(row[1]): + continue + + first_date = np_colles[1][8] - date += datetime.timedelta(hours=1) - cours_si.add("dtend", date, parameters={"tzid": local_tz}) - liste_cours.append(cours_si) + eleves = row[8] + + + if "à" in list(eleves): - return liste_cours + eleves = eleves.split(" ") + debut, fin = [grp for grp in eleves if grp.isdigit()] + + if not int(debut) <= int(groupe) <= int(fin): + continue + + elif "+" in list(eleves): + eleves = eleves.split("+") + + if groupe not in [grp for grp in eleves if grp.isdigit()]: + + if groupe_td not in [grp for grp in eleves]: + if int(row[6]) > 1: + if groupe in [grp for grp in row[9].split("+") if grp.isdigit()]: + first_date = np_colles[1][9] + elif groupe_td in [grp for grp in row[9].split("+")]: + first_date = np_colles[1][9] + else: + + continue + + else: + continue + + # si la 1ère occurence du cours est la 1ère ou la 2e semaine + + + elif groupe != eleves and groupe_td != eleves: + if pandas.isnull(row[9]) or (groupe != row[9] and groupe_td != row[9]): + continue + else: + first_date = np_colles[1][9] + + # vérification que le groupe est concerné par le cours + + first_date = debut_semaine_to_datetime(first_date) + + first_date += heure_to_timedelta(row[3]) + first_date += datetime.timedelta(days=jour_to_delta[row[2]]) + + duree = heure_to_timedelta(row[4]) + + localisation = row[7] if not pandas.isnull(row[7]) else None + + last_date = debut_semaine_to_datetime(np_colles[1][-1]) + datetime.timedelta(days=5) + + rrule = {"FREQ": "WEEKLY", "UNTIL": last_date, "INTERVAL": row[6], "BYDAY": jour_to_byday[row[2]], "WKST": "MO"} + + new_cours = creer_evenement( + titre=row[1], + description=row[5], + localisation=localisation, + debut=first_date, + duree=duree, + rrule=rrule + ) + + listes_cours.append(new_cours) + + return listes_cours def get_langues(langues): """ - Renvoie la liste de cours de langue associés - list[icalendar.Event] + Renvoie la liste de cours de langue associés sous forme de 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) + liste_cours = [] + langues = option_langues[langues] - return liste_langues - + for row in np_colles[67:]: -def get_calendar(groupe, langues, split: bool = False): + if row[1] in langues: + + debut = debut_semaine_to_datetime(np_colles[1][8]) + debut += heure_to_timedelta(row[3]) + debut += datetime.timedelta(days=jour_to_delta[row[2]]) + + duree = heure_to_timedelta(row[4]) + + last_date = debut_semaine_to_datetime(np_colles[1][-1]) + datetime.timedelta(days=5) + + rrule = {"FREQ": "WEEKLY", "UNTIL": last_date, "INTERVAL": row[6], "BYDAY": jour_to_byday[row[2]], "WKST": "MO"} + + new_cours = creer_evenement( + titre=row[1], + debut=debut, + duree=duree, + rrule=rrule + ) + + liste_cours.append(new_cours) + + return liste_cours + + +def get_calendar(groupe: str, langues: str, 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): + for event in get_cours(np_colles, groupe): new_cal_edt.add_component(event) if split: @@ -214,5 +332,4 @@ def get_calendar(groupe, langues, split: bool = False): new_cal_edt.add_component(event) - return [new_cal_edt.to_ical()] \ No newline at end of file diff --git a/main.py b/main.py index 856bd5c..8177789 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,13 @@ -from typing import Optional, List from os import getenv, listdir -import discord +import re +import discord +from typing import cast from discord import app_commands from discord.app_commands import Choice from discord.ext import commands from dotenv import load_dotenv - load_dotenv() @@ -16,26 +16,38 @@ class MyClient(commands.Bot): intents = discord.Intents.none() intents.guilds = True intents.messages = True + intents.message_content = True super().__init__(intents=intents, command_prefix=".") - self.MY_GUILD = discord.Object(id=getenv("GUILD_ID")) + self.MY_GUILDS = [discord.Object(id=int(guild_id)) for guild_id in getenv("GUILD_ID").split(',')] self.initial_extensions = ["cogs." + f[:-3] for f in listdir("./cogs") if f.endswith(".py") and f.__str__() != "__init__.py"] + # self.add_listener(self.on_message) 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) + for guild in self.MY_GUILDS: + self.tree.copy_global_to(guild=guild) + await self.tree.sync(guild=guild) async def on_ready(self): + team = cast(discord.Team, self.application.team) + print(f'Logged in as {self.user} (ID: {self.user.id})') print(f"Discord version : {discord.__version__}") + print(f"Admins : {', '.join([m.name for m in team.members])}") print('------') + async def on_message(self, msg): + p = re.compile("[qQ]uoi[ \\.!?;\"»]*$") + print(f"{msg!r}") + if p.search(msg.content) is not None: + await msg.reply("Quoicoubeh !") + if __name__ == "__main__": client = MyClient()