package shared import ( "fmt" "strconv" "time" "velox-bot/internal/db/services" "github.com/bwmarrin/discordgo" ) var scheduleDatetimeLayouts = []string{ "2006-01-02 15:04", "2006-01-02T15:04", "2006-01-02 15:04:05", "01/02/2006 15:04", } func RespondEphemeral(s *discordgo.Session, i *discordgo.InteractionCreate, msg string) { _ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ Content: msg, Flags: discordgo.MessageFlagsEphemeral, }, }) } func ParseScheduleDatetime(input string, loc *time.Location) (time.Time, error) { for _, layout := range scheduleDatetimeLayouts { if t, err := time.ParseInLocation(layout, input, loc); err == nil { return t, nil } } return time.Time{}, fmt.Errorf("invalid schedule datetime format") } func RequireGuild(s *discordgo.Session, i *discordgo.InteractionCreate) bool { if i.GuildID == "" { RespondEphemeral(s, i, "This command can only be used in a server.") return false } return true } func RequireScheduleService(s *discordgo.Session, i *discordgo.InteractionCreate) bool { if services.Global == nil || services.Global.Schedule == nil { RespondEphemeral(s, i, "Scheduling service is not available.") return false } return true } func ParseGuildID(s *discordgo.Session, i *discordgo.InteractionCreate) (int64, bool) { guildID, err := strconv.ParseInt(i.GuildID, 10, 64) if err != nil { RespondEphemeral(s, i, "Invalid guild ID.") return 0, false } return guildID, true }