From 489d96594c81cc9a25f98c100dd2e2788e28ad17 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Sun, 24 Jan 2021 00:24:07 -0900 Subject: [PATCH] Add prefix commands --- internal/discord_utils/errors.go | 11 ++++ internal/exts/guild/guild.go | 105 +++++++++++++++++++++++++++++++ internal/exts/init.go | 3 + internal/utils/utils.go | 0 4 files changed, 119 insertions(+) create mode 100644 internal/discord_utils/errors.go create mode 100644 internal/exts/guild/guild.go create mode 100644 internal/utils/utils.go diff --git a/internal/discord_utils/errors.go b/internal/discord_utils/errors.go new file mode 100644 index 0000000..3fc5bf5 --- /dev/null +++ b/internal/discord_utils/errors.go @@ -0,0 +1,11 @@ +package discord_utils + +import "github.com/dustinpianalto/disgoman" + +func SendErrorMessage(ctx disgoman.Context, msg string, err error) { + ctx.CommandManager.ErrorChannel <- disgoman.CommandError{ + Context: ctx, + Message: msg, + Error: err, + } +} diff --git a/internal/exts/guild/guild.go b/internal/exts/guild/guild.go new file mode 100644 index 0000000..5fd6a37 --- /dev/null +++ b/internal/exts/guild/guild.go @@ -0,0 +1,105 @@ +package guild + +import ( + "fmt" + + "github.com/dustinpianalto/disgoman" + "github.com/dustinpianalto/geeksbot" + "github.com/dustinpianalto/geeksbot/internal/discord_utils" + "github.com/dustinpianalto/geeksbot/internal/services" +) + +var AddPrefixCommand = &disgoman.Command{ + Name: "addPrefix", + Aliases: []string{"ap"}, + Description: "Add a prefix for use in this guild.", + OwnerOnly: false, + Hidden: false, + RequiredPermissions: disgoman.PermissionManageServer, + Invoke: addPrefixCommandFunc, +} + +func addPrefixCommandFunc(ctx disgoman.Context, args []string) { + if len(args) == 0 { + discord_utils.SendErrorMessage(ctx, "Please include at least one prefix to add", nil) + return + } + guild, err := services.GuildService.Guild(ctx.Guild.ID) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Guild not configured, adding new guild to the database", nil) + guild = geeksbot.Guild{ + ID: ctx.Guild.ID, + Prefixes: args, + } + guild, err = services.GuildService.CreateGuild(guild) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error adding guild to database.", err) + return + } + } else { + guild.Prefixes = append(guild.Prefixes, args...) + guild, err = services.GuildService.UpdateGuild(guild) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error adding prefixes to guild.", err) + return + } + } + _, err = ctx.Send(fmt.Sprintf("Prefixes Updates.\nThe Prefixes for this guild are currently %#v", guild.Prefixes)) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error sending update message", err) + } +} + +var RemovePrefixCommand = &disgoman.Command{ + Name: "removePrefix", + Aliases: []string{"rp"}, + Description: "Remove a prefix so it can't be used in this guild", + OwnerOnly: false, + Hidden: false, + RequiredPermissions: disgoman.PermissionManageServer, + Invoke: removePrefixCommandFunc, +} + +func removePrefixCommandFunc(ctx disgoman.Context, args []string) { + if len(args) == 0 { + discord_utils.SendErrorMessage(ctx, "Please include at least one prefix to remove", nil) + return + } + guild, err := services.GuildService.Guild(ctx.Guild.ID) + var removed []string + if err != nil { + discord_utils.SendErrorMessage(ctx, "Guild not configured, adding new guild to the database", nil) + guild = geeksbot.Guild{ + ID: ctx.Guild.ID, + Prefixes: []string{}, + } + guild, err = services.GuildService.CreateGuild(guild) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error adding guild to database.", err) + return + } + } else { + for _, a := range args { + l := len(guild.Prefixes) - 1 + for i := 0; i < l; i++ { + if a == guild.Prefixes[i] { + guild.Prefixes = append(guild.Prefixes[:i], guild.Prefixes[i+1:]...) + l-- + i-- + removed = append(removed, a) + } + } + } + guild, err = services.GuildService.UpdateGuild(guild) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error removing prefixes from guild.", err) + return + } + } + _, err = ctx.Send(fmt.Sprintf("Prefixes Updates.\n"+ + "The Prefixes for this guild are currently %#v\n"+ + "Removed: %#v", guild.Prefixes, removed)) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Error sending update message", err) + } +} diff --git a/internal/exts/init.go b/internal/exts/init.go index 2a1b792..c43cc8c 100644 --- a/internal/exts/init.go +++ b/internal/exts/init.go @@ -2,6 +2,7 @@ package exts import ( "github.com/dustinpianalto/disgoman" + "github.com/dustinpianalto/geeksbot/internal/exts/guild" "github.com/dustinpianalto/geeksbot/internal/exts/utils" ) @@ -20,4 +21,6 @@ func AddCommandHandlers(g *disgoman.CommandManager) { _ = g.AddCommand(utils.GitCommand) _ = g.AddCommand(utils.InviteCommand) _ = g.AddCommand(utils.PingCommand) + _ = g.AddCommand(guild.AddPrefixCommand) + _ = g.AddCommand(guild.RemovePrefixCommand) } diff --git a/internal/utils/utils.go b/internal/utils/utils.go new file mode 100644 index 0000000..e69de29