horsebot: make skill responses ephemeral with share button
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -64,8 +65,8 @@ func (s *skillServer) slash(data discord.SlashCommandInteractionData, e *handler
|
||||
id = int64(v)
|
||||
}
|
||||
m := discord.MessageCreate{
|
||||
Components: []discord.LayoutComponent{s.render(horse.SkillID(id))},
|
||||
Flags: discord.MessageFlagIsComponentsV2,
|
||||
Components: []discord.LayoutComponent{s.render(horse.SkillID(id), false)},
|
||||
Flags: discord.MessageFlagIsComponentsV2 | discord.MessageFlagEphemeral,
|
||||
}
|
||||
return e.CreateMessage(m)
|
||||
}
|
||||
@@ -86,15 +87,31 @@ func (s *skillServer) button(data discord.ButtonInteractionData, e *handler.Comp
|
||||
return e.CreateMessage(m)
|
||||
}
|
||||
m := discord.MessageUpdate{
|
||||
Components: &[]discord.LayoutComponent{s.render(horse.SkillID(id))},
|
||||
Components: &[]discord.LayoutComponent{s.render(horse.SkillID(id), false)},
|
||||
}
|
||||
return e.UpdateMessage(m)
|
||||
}
|
||||
|
||||
func (s *skillServer) render(id horse.SkillID) discord.ContainerComponent {
|
||||
func (s *skillServer) share(data discord.ButtonInteractionData, e *handler.ComponentEvent) error {
|
||||
id, err := strconv.ParseInt(e.Vars["id"], 10, 32)
|
||||
if err != nil {
|
||||
m := discord.MessageCreate{
|
||||
Content: "That button produced an invalid skill ID. That's not supposed to happen.",
|
||||
Flags: discord.MessageFlagEphemeral,
|
||||
}
|
||||
return e.CreateMessage(m)
|
||||
}
|
||||
m := discord.MessageCreate{
|
||||
Components: []discord.LayoutComponent{s.render(horse.SkillID(id), true)},
|
||||
}
|
||||
return e.CreateMessage(m)
|
||||
}
|
||||
|
||||
func (s *skillServer) render(id horse.SkillID, share bool) discord.ContainerComponent {
|
||||
skill, ok := s.skills[id]
|
||||
if !ok {
|
||||
return discord.NewContainer(discord.NewTextDisplayf("invalid skill ID %v made it to RenderSkill", id))
|
||||
slog.Error("invalid skill id", slog.Int("id", int(id)), slog.Bool("share", share))
|
||||
return discord.NewContainer(discord.NewTextDisplayf("invalid skill ID %v made it to render", id))
|
||||
}
|
||||
|
||||
thumburl := fmt.Sprintf("https://gametora.com/images/umamusume/skill_icons/utx_ico_skill_%d.png", skill.IconID)
|
||||
@@ -180,15 +197,18 @@ func (s *skillServer) render(id horse.SkillID) discord.ContainerComponent {
|
||||
rel = append(rel, s.skills[id])
|
||||
}
|
||||
}
|
||||
if len(rel) > 1 {
|
||||
if len(rel) > 1 || !share {
|
||||
buttons := make([]discord.InteractiveComponent, 0, 4)
|
||||
for _, rs := range rel {
|
||||
b := discord.NewSecondaryButton(rs.Name, fmt.Sprintf("/skill/%d", rs.ID))
|
||||
b := discord.NewSecondaryButton(rs.Name, fmt.Sprintf("/skill/swap/%d", rs.ID))
|
||||
if rs.ID == id {
|
||||
b = b.AsDisabled()
|
||||
}
|
||||
buttons = append(buttons, b)
|
||||
}
|
||||
if !share {
|
||||
buttons = append(buttons, discord.NewPrimaryButton("Share", fmt.Sprintf("/skill/share/%d", skill.ID)))
|
||||
}
|
||||
r.Components = append(r.Components, discord.NewActionRow(buttons...))
|
||||
}
|
||||
return r
|
||||
|
||||
Reference in New Issue
Block a user