Skip to content

Commit c21560c

Browse files
authored
Merge pull request #2326 from mkmccarty/mm-branch-1
✨ feat(leaderboard): acknowledge interaction updates to avoid timeouts
2 parents 54886f6 + 48f4d8d commit c21560c

1 file changed

Lines changed: 45 additions & 13 deletions

File tree

src/boost/leaderboard.go

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,6 @@ func HandleLeaderboard(s *discordgo.Session, i *discordgo.InteractionCreate) {
108108
func HandleLeaderboardPage(s *discordgo.Session, i *discordgo.InteractionCreate) {
109109
flags := discordgo.MessageFlagsIsComponentsV2
110110

111-
// Acknowledge the interaction
112-
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
113-
Type: discordgo.InteractionResponseDeferredMessageUpdate,
114-
Data: &discordgo.InteractionResponseData{
115-
Flags: flags,
116-
Components: []discordgo.MessageComponent{},
117-
},
118-
})
119-
if err != nil {
120-
log.Println("Error responding to leaderboard interaction:", err)
121-
return
122-
}
123-
124111
parts := strings.Split(i.MessageComponentData().CustomID, "#")
125112
if len(parts) < 2 {
126113
return
@@ -131,6 +118,19 @@ func HandleLeaderboardPage(s *discordgo.Session, i *discordgo.InteractionCreate)
131118

132119
switch parts[1] {
133120
case "close":
121+
// Acknowledge update interactions that mutate the existing leaderboard message.
122+
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
123+
Type: discordgo.InteractionResponseDeferredMessageUpdate,
124+
Data: &discordgo.InteractionResponseData{
125+
Flags: flags,
126+
Components: []discordgo.MessageComponent{},
127+
},
128+
})
129+
if err != nil {
130+
log.Println("Error responding to leaderboard close interaction:", err)
131+
return
132+
}
133+
134134
// Keep only the TextDisplay, drop the ActionsRows
135135
var kept []discordgo.MessageComponent
136136
for _, c := range i.Message.Components {
@@ -145,6 +145,22 @@ func HandleLeaderboardPage(s *discordgo.Session, i *discordgo.InteractionCreate)
145145
}
146146

147147
case "refresh":
148+
if !CheckLeaderboardPermission(s, i) {
149+
return
150+
}
151+
152+
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
153+
Type: discordgo.InteractionResponseDeferredMessageUpdate,
154+
Data: &discordgo.InteractionResponseData{
155+
Flags: flags,
156+
Components: []discordgo.MessageComponent{},
157+
},
158+
})
159+
if err != nil {
160+
log.Println("Error responding to leaderboard refresh interaction:", err)
161+
return
162+
}
163+
148164
if eiID == "" {
149165
_, _ = s.FollowupMessageCreate(i.Interaction, true, &discordgo.WebhookParams{
150166
Content: fmt.Sprintf("Your Egg Inc ID is needed to update the leaderboard. Use %s to register.", bottools.GetFormattedCommand("register")),
@@ -161,6 +177,22 @@ func HandleLeaderboardPage(s *discordgo.Session, i *discordgo.InteractionCreate)
161177
}
162178

163179
case "season":
180+
if !CheckLeaderboardPermission(s, i) {
181+
return
182+
}
183+
184+
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
185+
Type: discordgo.InteractionResponseDeferredMessageUpdate,
186+
Data: &discordgo.InteractionResponseData{
187+
Flags: flags,
188+
Components: []discordgo.MessageComponent{},
189+
},
190+
})
191+
if err != nil {
192+
log.Println("Error responding to leaderboard season interaction:", err)
193+
return
194+
}
195+
164196
if eiID == "" {
165197
_, _ = s.FollowupMessageCreate(i.Interaction, true, &discordgo.WebhookParams{
166198
Content: fmt.Sprintf("Your Egg Inc ID is needed to update the leaderboard. Use %s to register.", bottools.GetFormattedCommand("register")),

0 commit comments

Comments
 (0)