diff --git a/api.go b/api.go index 8ebafb3..9c79e22 100644 --- a/api.go +++ b/api.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" + "github.com/redis/go-redis/v9" "github.com/rs/zerolog/log" ) @@ -458,3 +459,25 @@ func ResetDataForm() { log.Fatal().Err(err).Msg("Failed to reset data form") } } + +// GetCourse retrieves the course information. +// This course does not retrieve directly from the API, but rather uses scraped data stored in Redis. +func GetCourse(crn string) (*Course, error) { + // Retrieve raw data + result, err := kv.Get(ctx, fmt.Sprintf("class:%s", crn)).Result() + if err != nil { + if err == redis.Nil { + return nil, fmt.Errorf("course not found: %w", err) + } + return nil, fmt.Errorf("failed to get course: %w", err) + } + + // Unmarshal the raw data + var course Course + err = json.Unmarshal([]byte(result), &course) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal course: %w", err) + } + + return &course, nil +} diff --git a/commands.go b/commands.go index aa73c7e..ed2f72f 100644 --- a/commands.go +++ b/commands.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "strconv" "strings" "time" @@ -272,15 +273,14 @@ var IcsCommandDefinition = &discordgo.ApplicationCommand{ func IcsCommandHandler(s *discordgo.Session, i *discordgo.InteractionCreate) error { crn := i.ApplicationCommandData().Options[0].IntValue() + course, err := GetCourse(strconv.Itoa(int(crn))) + if err != nil { + return fmt.Errorf("Error retrieving course data: %w", err) + } + meetingTimes, err := GetCourseMeetingTime(202420, int(crn)) if err != nil { - s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ - Type: discordgo.InteractionResponseChannelMessageWithSource, - Data: &discordgo.InteractionResponseData{ - Content: "Error getting meeting time", - }, - }) - return err + return fmt.Errorf("Error requesting meeting time: %w", err) } events := []string{} @@ -298,10 +298,8 @@ func IcsCommandHandler(s *discordgo.Session, i *discordgo.InteractionCreate) err endDay := meeting.EndDay() until := time.Date(endDay.Year(), endDay.Month(), endDay.Day(), 23, 59, 59, 0, CentralTimeLocation) - summary := fmt.Sprintf("{Insert Classname Here} (CRN %s)", meeting.CourseReferenceNumber) - description := fmt.Sprintf(`Instructor: {Insert Instructor Here} -Section: {Insert Section Here} -CRN: %s`, meeting.CourseReferenceNumber) + summary := fmt.Sprintf("%s (CRN %s)", course.CourseTitle, meeting.CourseReferenceNumber) + description := fmt.Sprintf("Instructor: %s\nSection: %s\nCRN: %s", course.Faculty[0].DisplayName, course.SequenceNumber, meeting.CourseReferenceNumber) location := meeting.PlaceString() event := fmt.Sprintf(`BEGIN:VEVENT