feat: add a new command - group unset channel-losses/channel-gains (#14)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #14
This commit is contained in:
parent
aec3a3736d
commit
9c1884d624
|
@ -90,11 +90,19 @@ type updateGroupsParamsApplier struct {
|
||||||
|
|
||||||
func (u updateGroupsParamsApplier) apply(q *bun.UpdateQuery) *bun.UpdateQuery {
|
func (u updateGroupsParamsApplier) apply(q *bun.UpdateQuery) *bun.UpdateQuery {
|
||||||
if u.params.ChannelGains.Valid {
|
if u.params.ChannelGains.Valid {
|
||||||
|
if u.params.ChannelGains.String != "" {
|
||||||
q = q.Set("channel_gains = ?", u.params.ChannelGains.String)
|
q = q.Set("channel_gains = ?", u.params.ChannelGains.String)
|
||||||
|
} else {
|
||||||
|
q = q.Set("channel_gains = NULL")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if u.params.ChannelLosses.Valid {
|
if u.params.ChannelLosses.Valid {
|
||||||
|
if u.params.ChannelLosses.String != "" {
|
||||||
q = q.Set("channel_losses = ?", u.params.ChannelLosses.String)
|
q = q.Set("channel_losses = ?", u.params.ChannelLosses.String)
|
||||||
|
} else {
|
||||||
|
q = q.Set("channel_losses = NULL")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if u.params.ServerKey.Valid {
|
if u.params.ServerKey.Valid {
|
||||||
|
|
|
@ -50,6 +50,11 @@ func (b *Bot) registerCommands() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type command interface {
|
||||||
|
name() string
|
||||||
|
register(s *discordgo.Session) error
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Bot) registerCommand(cmd command) error {
|
func (b *Bot) registerCommand(cmd command) error {
|
||||||
if err := cmd.register(b.s); err != nil {
|
if err := cmd.register(b.s); err != nil {
|
||||||
return fmt.Errorf("couldn't register command '%s': %w", cmd.name(), err)
|
return fmt.Errorf("couldn't register command '%s': %w", cmd.name(), err)
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
package discord
|
|
||||||
|
|
||||||
import "github.com/bwmarrin/discordgo"
|
|
||||||
|
|
||||||
type command interface {
|
|
||||||
name() string
|
|
||||||
register(s *discordgo.Session) error
|
|
||||||
handle(s *discordgo.Session, i *discordgo.InteractionCreate)
|
|
||||||
}
|
|
|
@ -160,6 +160,39 @@ func (c *groupCommand) create(s *discordgo.Session) error {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "unset",
|
||||||
|
Description: "Unsets various properties in a group configuration",
|
||||||
|
Type: discordgo.ApplicationCommandOptionSubCommandGroup,
|
||||||
|
Options: []*discordgo.ApplicationCommandOption{
|
||||||
|
{
|
||||||
|
Name: "channel-gains",
|
||||||
|
Description: "Disables notifications of gained villages",
|
||||||
|
Type: discordgo.ApplicationCommandOptionSubCommand,
|
||||||
|
Options: []*discordgo.ApplicationCommandOption{
|
||||||
|
{
|
||||||
|
Name: "group",
|
||||||
|
Description: "Group ID",
|
||||||
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "channel-losses",
|
||||||
|
Description: "Disables notifications of lost villages",
|
||||||
|
Type: discordgo.ApplicationCommandOptionSubCommand,
|
||||||
|
Options: []*discordgo.ApplicationCommandOption{
|
||||||
|
{
|
||||||
|
Name: "group",
|
||||||
|
Description: "Group ID",
|
||||||
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -201,6 +234,9 @@ func (c *groupCommand) handle(s *discordgo.Session, i *discordgo.InteractionCrea
|
||||||
case "set":
|
case "set":
|
||||||
c.handleSet(s, i)
|
c.handleSet(s, i)
|
||||||
return
|
return
|
||||||
|
case "unset":
|
||||||
|
c.handleUnset(s, i)
|
||||||
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,6 +457,64 @@ func (c *groupCommand) handleSetChannelLosses(s *discordgo.Session, i *discordgo
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *groupCommand) handleUnset(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
|
switch i.ApplicationCommandData().Options[0].Options[0].Name {
|
||||||
|
case "channel-gains":
|
||||||
|
c.handleUnsetChannelGains(s, i)
|
||||||
|
return
|
||||||
|
case "channel-losses":
|
||||||
|
c.handleUnsetChannelLosses(s, i)
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *groupCommand) handleUnsetChannelGains(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
group := i.ApplicationCommandData().Options[0].Options[0].Options[0].StringValue()
|
||||||
|
_, err := c.svc.SetChannelGains(ctx, group, "")
|
||||||
|
if err != nil {
|
||||||
|
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Content: messageFromError(err),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Content: "group has been successfully updated",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *groupCommand) handleUnsetChannelLosses(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
group := i.ApplicationCommandData().Options[0].Options[0].Options[0].StringValue()
|
||||||
|
_, err := c.svc.SetChannelLosses(ctx, group, "")
|
||||||
|
if err != nil {
|
||||||
|
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Content: messageFromError(err),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Content: "group has been successfully updated",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func buildGroupListDescription(groups []domain.Group) string {
|
func buildGroupListDescription(groups []domain.Group) string {
|
||||||
description := "**ID** - **Version** - **Server**"
|
description := "**ID** - **Version** - **Server**"
|
||||||
for i, g := range groups {
|
for i, g := range groups {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user