From 53276a14424c31712c78da4fb66b2c141ce28320 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Mon, 25 Jan 2021 22:41:51 -0900 Subject: [PATCH] add admin role command --- internal/database/guild.go | 8 +++++--- internal/exts/guild/roles.go | 37 ++++++++++++++++++++++++++++++++++++ internal/exts/init.go | 1 + 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/internal/database/guild.go b/internal/database/guild.go index f1b7d90..0a291cf 100644 --- a/internal/database/guild.go +++ b/internal/database/guild.go @@ -113,7 +113,9 @@ func (s guildService) GetOrCreateGuild(id string) (geeksbot.Guild, error) { } func (s guildService) CreateOrUpdateRole(r geeksbot.Role) (geeksbot.Role, error) { - queryString := "INSERT INTO roles (id, role_type, guild_id) VALUES ($1, $2, $3)" - _, err := s.db.Exec(queryString, r.ID, r.RoleType, r.Guild.ID) - return r, err + role, err := s.Role(r.ID) + if err.Error() == `pq: duplicate key value violates unique constraint "roles_pkey"` { + role, err = s.UpdateRole(r) + } + return role, err } diff --git a/internal/exts/guild/roles.go b/internal/exts/guild/roles.go index 1e0075f..68a48f5 100644 --- a/internal/exts/guild/roles.go +++ b/internal/exts/guild/roles.go @@ -45,3 +45,40 @@ func addModeratorRoleCommandFunc(ctx disgoman.Context, args []string) { _, _ = ctx.Send("Please include at least one role to make a moderator role.") } } + +var AddAdminRoleCommand = &disgoman.Command{ + Name: "addAdmin", + Aliases: []string{"addAdminRole"}, + Description: "Add a role which is allowed to run admin commands", + OwnerOnly: false, + Hidden: false, + RequiredPermissions: disgoman.PermissionManageServer, + Invoke: addAdminRoleCommandFunc, +} + +func addAdminRoleCommandFunc(ctx disgoman.Context, args []string) { + var count int + guild, err := services.GuildService.GetOrCreateGuild(ctx.Guild.ID) + if err != nil { + discord_utils.SendErrorMessage(ctx, "Something went wrong getting the guild", err) + return + } + roles := append(args, ctx.Message.MentionRoles...) + if len(roles) > 0 { + for _, id := range roles { + _, err := services.GuildService.CreateRole(geeksbot.Role{ + ID: id, + RoleType: "admin", + Guild: guild, + }) + if err != nil { + discord_utils.SendErrorMessage(ctx, fmt.Sprintf("There was a problem adding <@&%s>", id), err) + continue + } + count++ + _, _ = ctx.Send(fmt.Sprintf("Added <@&%s> as an admin role.", id)) + } + } else { + _, _ = ctx.Send("Please include at least one role to make an admin role.") + } +} diff --git a/internal/exts/init.go b/internal/exts/init.go index 01a0095..eb715b6 100644 --- a/internal/exts/init.go +++ b/internal/exts/init.go @@ -25,5 +25,6 @@ func AddCommandHandlers(g *disgoman.CommandManager) { _ = g.AddCommand(guild.AddPrefixCommand) _ = g.AddCommand(guild.RemovePrefixCommand) _ = g.AddCommand(guild.AddModeratorRoleCommand) + _ = g.AddCommand(guild.AddAdminRoleCommand) _ = g.AddCommand(requests.RequestCommand) }