mirror of
https://github.com/Xevion/banner.git
synced 2025-12-09 20:06:29 -06:00
Ditch ics package for raw string templating
This commit is contained in:
66
commands.go
66
commands.go
@@ -283,25 +283,71 @@ func IcsCommandHandler(s *discordgo.Session, i *discordgo.InteractionCreate) err
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
cal := NewCalendar()
|
events := []string{}
|
||||||
cal.SetTimezoneId("America/Chicago")
|
|
||||||
|
|
||||||
for _, meeting := range meetingTimes {
|
for _, meeting := range meetingTimes {
|
||||||
event := cal.AddEvent(fmt.Sprintf("%s@UTSA.EDU", meeting.CourseReferenceNumber))
|
now := time.Now().In(CentralTimeLocation)
|
||||||
event.SetSummary(meeting.CourseReferenceNumber)
|
uid := fmt.Sprintf("%d-%s@ical.banner.xevion.dev", now.Unix(), meeting.CourseReferenceNumber)
|
||||||
event.SetDtStampTime(time.Now())
|
|
||||||
|
|
||||||
startDay := meeting.StartDay()
|
startDay := meeting.StartDay()
|
||||||
startTime := meeting.StartTime()
|
startTime := meeting.StartTime()
|
||||||
endTime := meeting.EndTime()
|
endTime := meeting.EndTime()
|
||||||
|
dtStart := time.Date(startDay.Year(), startDay.Month(), startDay.Day(), int(startTime.Hours), int(startTime.Minutes), 0, 0, CentralTimeLocation)
|
||||||
|
dtEnd := time.Date(startDay.Year(), startDay.Month(), startDay.Day(), int(endTime.Hours), int(endTime.Minutes), 0, 0, CentralTimeLocation)
|
||||||
|
|
||||||
event.SetStartAt(time.Date(startDay.Year(), startDay.Month(), startDay.Day(), int(startTime.Hours), int(startTime.Minutes), 0, 0, time.UTC))
|
endDay := meeting.EndDay()
|
||||||
event.SetEndAt(time.Date(startDay.Year(), startDay.Month(), startDay.Day(), int(endTime.Hours), int(endTime.Minutes), 0, 0, time.UTC))
|
until := time.Date(endDay.Year(), endDay.Month(), endDay.Day(), 23, 59, 59, 0, CentralTimeLocation)
|
||||||
|
|
||||||
event.AddRrule(meeting.RRule())
|
summary := fmt.Sprintf("{Insert Classname Here} (CRN %s)", meeting.CourseReferenceNumber)
|
||||||
event.SetLocation(meeting.PlaceString())
|
description := fmt.Sprintf(`Instructor: {Insert Instructor Here}
|
||||||
|
Section: {Insert Section Here}
|
||||||
|
CRN: %s`, meeting.CourseReferenceNumber)
|
||||||
|
location := meeting.PlaceString()
|
||||||
|
|
||||||
|
event := fmt.Sprintf(`BEGIN:VEVENT
|
||||||
|
DTSTAMP:%s
|
||||||
|
UID:%s
|
||||||
|
DTSTART;TZID=America/Chicago:%s
|
||||||
|
RRULE:FREQ=WEEKLY;BYDAY=%s;UNTIL=%s
|
||||||
|
DTEND;TZID=America/Chicago:%s
|
||||||
|
SUMMARY:%s
|
||||||
|
DESCRIPTION:%s
|
||||||
|
LOCATION:%s
|
||||||
|
END:VEVENT`, now.Format(ICalTimestampFormatLocal), uid, dtStart.Format(ICalTimestampFormatLocal), meeting.ByDay(), until.Format(ICalTimestampFormatLocal), dtEnd.Format(ICalTimestampFormatLocal), summary, strings.Replace(description, "\n", `\n`, -1), location)
|
||||||
|
|
||||||
|
events = append(events, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Make this dynamically requested, parsed & cached from tzurl.org
|
||||||
|
vTimezone := `BEGIN:VTIMEZONE
|
||||||
|
TZID:America/Chicago
|
||||||
|
LAST-MODIFIED:20231222T233358Z
|
||||||
|
TZURL:https://www.tzurl.org/zoneinfo-outlook/America/Chicago
|
||||||
|
X-LIC-LOCATION:America/Chicago
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZNAME:CDT
|
||||||
|
TZOFFSETFROM:-0600
|
||||||
|
TZOFFSETTO:-0500
|
||||||
|
DTSTART:19700308T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZNAME:CST
|
||||||
|
TZOFFSETFROM:-0500
|
||||||
|
TZOFFSETTO:-0600
|
||||||
|
DTSTART:19701101T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE`
|
||||||
|
|
||||||
|
ics := fmt.Sprintf(`BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
PRODID:-//xevion//Banner Discord Bot//EN
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
%s
|
||||||
|
%s
|
||||||
|
END:VCALENDAR`, vTimezone, strings.Join(events, "\n"))
|
||||||
|
|
||||||
session.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
session.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
@@ -309,7 +355,7 @@ func IcsCommandHandler(s *discordgo.Session, i *discordgo.InteractionCreate) err
|
|||||||
{
|
{
|
||||||
Name: fmt.Sprintf("%d.ics", crn),
|
Name: fmt.Sprintf("%d.ics", crn),
|
||||||
ContentType: "text/calendar",
|
ContentType: "text/calendar",
|
||||||
Reader: strings.NewReader(cal.Serialize()),
|
Reader: strings.NewReader(ics),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
AllowedMentions: &discordgo.MessageAllowedMentions{},
|
AllowedMentions: &discordgo.MessageAllowedMentions{},
|
||||||
|
|||||||
Reference in New Issue
Block a user