mirror of
https://github.com/Xevion/banner.git
synced 2025-12-11 02:06:37 -06:00
Add page number option to terms command, add comma printing to terms
This commit is contained in:
40
commands.go
40
commands.go
@@ -29,7 +29,7 @@ var SearchCommandDefinition = &discordgo.ApplicationCommand{
|
|||||||
Options: []*discordgo.ApplicationCommandOption{
|
Options: []*discordgo.ApplicationCommandOption{
|
||||||
{
|
{
|
||||||
Type: discordgo.ApplicationCommandOptionString,
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
MinLength: GetPointer(0),
|
MinLength: GetIntPointer(0),
|
||||||
MaxLength: 48,
|
MaxLength: 48,
|
||||||
Name: "title",
|
Name: "title",
|
||||||
Description: "Course Title (exact, use autocomplete)",
|
Description: "Course Title (exact, use autocomplete)",
|
||||||
@@ -39,7 +39,7 @@ var SearchCommandDefinition = &discordgo.ApplicationCommand{
|
|||||||
{
|
{
|
||||||
Type: discordgo.ApplicationCommandOptionString,
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
Name: "code",
|
Name: "code",
|
||||||
MinLength: GetPointer(4),
|
MinLength: GetIntPointer(4),
|
||||||
Description: "Course Code (e.g. 3743, 3000-3999, 3xxx, 3000-)",
|
Description: "Course Code (e.g. 3743, 3000-3999, 3xxx, 3000-)",
|
||||||
Required: false,
|
Required: false,
|
||||||
},
|
},
|
||||||
@@ -243,24 +243,40 @@ var TermCommandDefinition = &discordgo.ApplicationCommand{
|
|||||||
Options: []*discordgo.ApplicationCommandOption{
|
Options: []*discordgo.ApplicationCommandOption{
|
||||||
{
|
{
|
||||||
Type: discordgo.ApplicationCommandOptionString,
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
MinLength: GetPointer(0),
|
MinLength: GetIntPointer(0),
|
||||||
MaxLength: 8,
|
MaxLength: 8,
|
||||||
Name: "search",
|
Name: "search",
|
||||||
Description: "Term to search for",
|
Description: "Term to search for",
|
||||||
Required: false,
|
Required: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Type: discordgo.ApplicationCommandOptionInteger,
|
||||||
|
Name: "page",
|
||||||
|
Description: "Page Number",
|
||||||
|
Required: false,
|
||||||
|
MinValue: GetFloatPointer(1),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TermCommandHandler(session *discordgo.Session, interaction *discordgo.InteractionCreate) error {
|
func TermCommandHandler(session *discordgo.Session, interaction *discordgo.InteractionCreate) error {
|
||||||
data := interaction.ApplicationCommandData()
|
data := interaction.ApplicationCommandData()
|
||||||
|
|
||||||
var searchTerm string
|
searchTerm := ""
|
||||||
if len(data.Options) == 1 {
|
pageNumber := 1
|
||||||
searchTerm = data.Options[0].StringValue()
|
|
||||||
|
for _, option := range data.Options {
|
||||||
|
switch option.Name {
|
||||||
|
case "search":
|
||||||
|
searchTerm = option.StringValue()
|
||||||
|
case "page":
|
||||||
|
pageNumber = int(option.IntValue())
|
||||||
|
default:
|
||||||
|
log.Warn().Str("option", option.Name).Msg("Unexpected option in term command")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
terms, err := GetTerms(searchTerm, 1, 25)
|
termResult, err := GetTerms(searchTerm, pageNumber, 25)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
RespondError(session, interaction.Interaction, "Error while fetching terms", err)
|
RespondError(session, interaction.Interaction, "Error while fetching terms", err)
|
||||||
@@ -269,15 +285,11 @@ func TermCommandHandler(session *discordgo.Session, interaction *discordgo.Inter
|
|||||||
|
|
||||||
fields := []*discordgo.MessageEmbedField{}
|
fields := []*discordgo.MessageEmbedField{}
|
||||||
|
|
||||||
for _, t := range terms {
|
for _, t := range termResult {
|
||||||
fields = append(fields, &discordgo.MessageEmbedField{
|
fields = append(fields, &discordgo.MessageEmbedField{
|
||||||
Name: "ID",
|
Name: t.Description,
|
||||||
Value: t.Code,
|
Value: t.Code,
|
||||||
Inline: true,
|
Inline: true,
|
||||||
}, &discordgo.MessageEmbedField{
|
|
||||||
Name: "Description",
|
|
||||||
Value: t.Description,
|
|
||||||
Inline: true,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -289,7 +301,7 @@ func TermCommandHandler(session *discordgo.Session, interaction *discordgo.Inter
|
|||||||
Embeds: []*discordgo.MessageEmbed{
|
Embeds: []*discordgo.MessageEmbed{
|
||||||
{
|
{
|
||||||
Footer: GetFetchedFooter(fetch_time),
|
Footer: GetFetchedFooter(fetch_time),
|
||||||
Description: fmt.Sprintf("%d Terms", len(terms)),
|
Description: p.Sprintf("%d of %d terms (page %d)", len(termResult), len(terms), pageNumber),
|
||||||
Fields: fields[:min(25, len(fields))],
|
Fields: fields[:min(25, len(fields))],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
13
go.mod
13
go.mod
@@ -4,7 +4,14 @@ go 1.21
|
|||||||
|
|
||||||
require github.com/bwmarrin/discordgo v0.27.1
|
require github.com/bwmarrin/discordgo v0.27.1
|
||||||
|
|
||||||
require github.com/joho/godotenv v1.5.1
|
require (
|
||||||
|
github.com/joho/godotenv v1.5.1
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
|
github.com/redis/go-redis/v9 v9.3.1
|
||||||
|
github.com/rs/zerolog v1.31.0
|
||||||
|
github.com/samber/lo v1.39.0
|
||||||
|
golang.org/x/text v0.14.0
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/arran4/golang-ical v0.2.3 // indirect
|
github.com/arran4/golang-ical v0.2.3 // indirect
|
||||||
@@ -13,10 +20,6 @@ require (
|
|||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.19 // indirect
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
|
||||||
github.com/redis/go-redis/v9 v9.3.1 // indirect
|
|
||||||
github.com/rs/zerolog v1.31.0 // indirect
|
|
||||||
github.com/samber/lo v1.39.0 // indirect
|
|
||||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||||
golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
|
golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -76,6 +76,8 @@ golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
|
|||||||
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|||||||
9
main.go
9
main.go
@@ -22,6 +22,7 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/rs/zerolog/pkgerrors"
|
"github.com/rs/zerolog/pkgerrors"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
|
"golang.org/x/text/message"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -33,6 +34,7 @@ var (
|
|||||||
isDevelopment bool
|
isDevelopment bool
|
||||||
baseURL string // Base URL for all requests to the banner system
|
baseURL string // Base URL for all requests to the banner system
|
||||||
environment string
|
environment string
|
||||||
|
p *message.Printer = message.NewPrinter(message.MatchLanguage("en"))
|
||||||
CentralTimeLocation *time.Location
|
CentralTimeLocation *time.Location
|
||||||
isClosing bool = false
|
isClosing bool = false
|
||||||
cpuProfile = flag.String("cpuprofile", "", "write cpu profile to `file`")
|
cpuProfile = flag.String("cpuprofile", "", "write cpu profile to `file`")
|
||||||
@@ -288,9 +290,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fetch terms on startup
|
// Fetch terms on startup
|
||||||
_, err = GetTerms("", 1, 10)
|
err = TryReloadTerms()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Stack().Err(err).Msg("Cannot get terms")
|
log.Fatal().Stack().Err(err).Msg("Cannot fetch terms on startup")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Term Select Pre-Search POST
|
// Term Select Pre-Search POST
|
||||||
@@ -321,8 +323,7 @@ func main() {
|
|||||||
|
|
||||||
// Wait for signal (indefinite)
|
// Wait for signal (indefinite)
|
||||||
closingSignal := <-stop
|
closingSignal := <-stop
|
||||||
|
isClosing = true // TODO: Switch to atomic lock with forced close after 10 seconds
|
||||||
isClosing = true
|
|
||||||
|
|
||||||
// Write memory profile if requested
|
// Write memory profile if requested
|
||||||
if *memoryProfile != "" {
|
if *memoryProfile != "" {
|
||||||
|
|||||||
Reference in New Issue
Block a user