diff --git a/features/handlers.go b/features/handlers.go index c758992..aa9242e 100644 --- a/features/handlers.go +++ b/features/handlers.go @@ -40,6 +40,8 @@ func (f *Features) RegisterHandlers() { f.RegisterCommand("ping", f.handlePing) f.RegisterCommand("status", f.handleSetStatus) f.RegisterCommand("purge", f.handlePurgeChannel) + f.RegisterCommand("kick", f.handleKickUser) + f.RegisterCommand("ban", f.handleBanUser) } func (f *Features) ProcessCommand(s *discordgo.Session, m *discordgo.MessageCreate) { diff --git a/features/moderation.go b/features/moderation.go index e739ff0..75c7156 100644 --- a/features/moderation.go +++ b/features/moderation.go @@ -56,3 +56,95 @@ func (f *Features) handlePurgeChannel(s *discordgo.Session, m *discordgo.Message return nil } + +func (f *Features) handleKickUser(s *discordgo.Session, m *discordgo.MessageCreate) error { + if !f.Auth.CheckAdminRole(m.Member) { + return errors.New("You do not have permissions to use this command.") + } + + var ( + mHandle *discordgo.Member + kickReason string + err error + ) + + args := strings.Split(m.Content, " ") + if len(args) < 2 { + return errors.New("You must specify a user to kick.") + } + if len(args) == 3 { + kickReason = args[2] + } + + member := args[1] + idStr := strings.Replace(member, "<@!", "", 1) + idStr = strings.Replace(idStr, ">", "", 1) + mHandle, err = s.GuildMember(f.Config.Guild.ID, idStr) + if err != nil { + return err + } + + err = s.GuildMemberDeleteWithReason(f.Config.Guild.ID, mHandle.User.ID, kickReason) + if err != nil { + return err + } + + msg := "User `" + mHandle.User.Username + "#" + mHandle.User.Discriminator + "` was kicked.\n" + if len(kickReason) > 0 { + msg += "Reason: `" + kickReason + "`\n" + } + + embed := f.CreateDefinedEmbed("Kick User", msg, "success", m.Author) + _, err = s.ChannelMessageSendEmbed(m.ChannelID, embed) + if err != nil { + return err + } + + return nil +} + +func (f *Features) handleBanUser(s *discordgo.Session, m *discordgo.MessageCreate) error { + if !f.Auth.CheckAdminRole(m.Member) { + return errors.New("You do not have permissions to use this command.") + } + + var ( + mHandle *discordgo.Member + banReason string + err error + ) + + args := strings.Split(m.Content, " ") + if len(args) < 2 { + return errors.New("You must specify a user to ban.") + } + if len(args) == 3 { + banReason = args[2] + } + + member := args[1] + idStr := strings.Replace(member, "<@!", "", 1) + idStr = strings.Replace(idStr, ">", "", 1) + mHandle, err = s.GuildMember(f.Config.Guild.ID, idStr) + if err != nil { + return err + } + + err = s.GuildBanCreateWithReason(f.Config.Guild.ID, mHandle.User.ID, banReason, 0) + if err != nil { + return err + } + + msg := "User `" + mHandle.User.Username + "#" + mHandle.User.Discriminator + "` was banned.\n" + if len(banReason) > 0 { + msg += "Reason: `" + banReason + "`\n" + } + + embed := f.CreateDefinedEmbed("Ban User", msg, "success", m.Author) + _, err = s.ChannelMessageSendEmbed(m.ChannelID, embed) + if err != nil { + return err + } + + return nil +}