mirror of
https://github.com/Xevion/banner.git
synced 2025-12-08 16:06:31 -06:00
Add special non-fatal handling for non-meeting courses
This commit is contained in:
23
commands.go
23
commands.go
@@ -7,6 +7,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/samber/lo"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -283,8 +285,27 @@ func IcsCommandHandler(s *discordgo.Session, i *discordgo.InteractionCreate) err
|
|||||||
return fmt.Errorf("Error requesting meeting time: %w", err)
|
return fmt.Errorf("Error requesting meeting time: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
events := []string{}
|
if len(meetingTimes) == 0 {
|
||||||
|
return fmt.Errorf("unexpected - no meeting time data found for course")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the course has any meeting times
|
||||||
|
_, exists := lo.Find(meetingTimes, func(mt MeetingTimeResponse) bool {
|
||||||
|
switch mt.MeetingTime.MeetingType {
|
||||||
|
case "ID", "OA":
|
||||||
|
return false
|
||||||
|
default:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if !exists {
|
||||||
|
log.Warn().Str("crn", course.CourseReferenceNumber).Msg("Non-meeting course requested for ICS file")
|
||||||
|
RespondError(s, i.Interaction, "The course requested does not meet at a defined moment in time.", nil)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
events := []string{}
|
||||||
for _, meeting := range meetingTimes {
|
for _, meeting := range meetingTimes {
|
||||||
now := time.Now().In(CentralTimeLocation)
|
now := time.Now().In(CentralTimeLocation)
|
||||||
uid := fmt.Sprintf("%d-%s@ical.banner.xevion.dev", now.Unix(), meeting.CourseReferenceNumber)
|
uid := fmt.Sprintf("%d-%s@ical.banner.xevion.dev", now.Unix(), meeting.CourseReferenceNumber)
|
||||||
|
|||||||
10
types.go
10
types.go
@@ -56,8 +56,9 @@ type MeetingTimeResponse struct {
|
|||||||
// The number of credit hours this class is worth (assumably)
|
// The number of credit hours this class is worth (assumably)
|
||||||
CreditHourSession float64 `json:"creditHourSession"`
|
CreditHourSession float64 `json:"creditHourSession"`
|
||||||
// The number of hours per week this class meets (e.g. 2.5)
|
// The number of hours per week this class meets (e.g. 2.5)
|
||||||
HoursWeek float64 `json:"hoursWeek"`
|
HoursWeek float64 `json:"hoursWeek"`
|
||||||
MeetingScheduleType string `json:"meetingScheduleType"`
|
// Unknown meaning - e.g. AFF, AIN, AHB, FFF, AFF, EFF, DFF, IFF, EHB, JFF, KFF, BFF, BIN
|
||||||
|
MeetingScheduleType string `json:"meetingScheduleType"`
|
||||||
// The short identifier for the meeting type (e.g. FF, HB, OS, OA)
|
// The short identifier for the meeting type (e.g. FF, HB, OS, OA)
|
||||||
MeetingType string `json:"meetingType"`
|
MeetingType string `json:"meetingType"`
|
||||||
// The long name of the meeting type (e.g. Traditional in-person)
|
// The long name of the meeting type (e.g. Traditional in-person)
|
||||||
@@ -95,7 +96,7 @@ func (m *MeetingTimeResponse) String() string {
|
|||||||
case "OH":
|
case "OH":
|
||||||
return fmt.Sprintf("%s\nOnline Partial", m.TimeString())
|
return fmt.Sprintf("%s\nOnline Partial", m.TimeString())
|
||||||
case "ID":
|
case "ID":
|
||||||
return "TBA"
|
return "To Be Arranged"
|
||||||
case "FF":
|
case "FF":
|
||||||
return fmt.Sprintf("%s\n%s", m.TimeString(), m.PlaceString())
|
return fmt.Sprintf("%s\n%s", m.TimeString(), m.PlaceString())
|
||||||
}
|
}
|
||||||
@@ -119,6 +120,7 @@ func (m *MeetingTimeResponse) TimeString() string {
|
|||||||
func (m *MeetingTimeResponse) PlaceString() string {
|
func (m *MeetingTimeResponse) PlaceString() string {
|
||||||
mt := m.MeetingTime
|
mt := m.MeetingTime
|
||||||
|
|
||||||
|
// TODO: ADd format case for partial online classes
|
||||||
if mt.Room == "" {
|
if mt.Room == "" {
|
||||||
return "Online"
|
return "Online"
|
||||||
}
|
}
|
||||||
@@ -195,7 +197,7 @@ func (m *MeetingTimeResponse) EndDay() time.Time {
|
|||||||
func (m *MeetingTimeResponse) StartTime() *NaiveTime {
|
func (m *MeetingTimeResponse) StartTime() *NaiveTime {
|
||||||
raw := m.MeetingTime.BeginTime
|
raw := m.MeetingTime.BeginTime
|
||||||
if raw == "" {
|
if raw == "" {
|
||||||
return nil
|
log.Fatal().Stack().Msg("Start time is empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
value, err := strconv.ParseUint(raw, 10, 32)
|
value, err := strconv.ParseUint(raw, 10, 32)
|
||||||
|
|||||||
Reference in New Issue
Block a user