diff options
| -rw-r--r-- | .idx/dev.nix | 56 | ||||
| -rw-r--r-- | commands/admin/kick.go | 50 | ||||
| -rw-r--r-- | commands/commands.go | 14 | ||||
| -rw-r--r-- | handlers/guildMemberAdd.go | 17 | ||||
| -rw-r--r-- | handlers/interactionCreateHandler.go | 1 | ||||
| -rw-r--r-- | handlers/messageHandlers/poketwoHandler.go | 3 | ||||
| -rw-r--r-- | yuzaki/main.go | 1 |
7 files changed, 141 insertions, 1 deletions
diff --git a/.idx/dev.nix b/.idx/dev.nix new file mode 100644 index 0000000..f1d9895 --- /dev/null +++ b/.idx/dev.nix @@ -0,0 +1,56 @@ +# To learn more about how to use Nix to configure your environment +# see: https://developers.google.com/idx/guides/customize-idx-env +{ pkgs, ... }: { + # Which nixpkgs channel to use. + channel = "stable-24.05"; # or "unstable" + + # Use https://search.nixos.org/packages to find packages + packages = [ + pkgs.go + pkgs.gnumake + # pkgs.python311 + # pkgs.python311Packages.pip + # pkgs.nodejs_20 + # pkgs.nodePackages.nodemon + ]; + + # Sets environment variables in the workspace + env = {}; + idx = { + # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id" + extensions = [ + # "vscodevim.vim" + ]; + + # Enable previews + previews = { + enable = true; + previews = { + # web = { + # # Example: run "npm run dev" with PORT set to IDX's defined port for previews, + # # and show it in IDX's web preview panel + # command = ["npm" "run" "dev"]; + # manager = "web"; + # env = { + # # Environment variables to set for your server + # PORT = "$PORT"; + # }; + # }; + }; + }; + + # Workspace lifecycle hooks + workspace = { + # Runs when a workspace is first created + onCreate = { + # Example: install JS dependencies from NPM + # npm-install = "npm install"; + }; + # Runs when the workspace is (re)started + onStart = { + # Example: start a background task to watch and re-build backend code + # watch-backend = "npm run watch-backend"; + }; + }; + }; +} diff --git a/commands/admin/kick.go b/commands/admin/kick.go new file mode 100644 index 0000000..f7ab0d2 --- /dev/null +++ b/commands/admin/kick.go @@ -0,0 +1,50 @@ +package admin + +import ( + //"fmt" + "log" + //"time" + + "yuzaki/utils" + + "github.com/bwmarrin/discordgo" +) + +func KickMember(s *discordgo.Session, i *discordgo.InteractionCreate) { + err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseDeferredChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Flags: discordgo.MessageFlagsEphemeral, + }, + }) + if err != nil { + log.Printf("Error responding to interaction: %s. Interaction: purge. Interaction By: %s\n", err, i.Member.DisplayName()) + return + } + + options := i.ApplicationCommandData().Options + optionMap := make(map[string]*discordgo.ApplicationCommandInteractionDataOption, len(options)) + for _, option := range options { + optionMap[option.Name] = option + } + + option, ok := optionMap["target"] + if !ok { + utils.SendFollowUpMessage(s, i, "You must mention the user to kick!", true) + return + } + + user := option.UserValue(s); + if user == nil { + utils.SendFollowUpMessage(s, i, "Invalid user", true) + return + } + err = s.GuildMemberDeleteWithReason(i.GuildID, user.ID, "Kicked by an admin") + if err != nil { + utils.SendFollowUpMessage(s, i, "Could not kick user", true) + return + } + + utils.SendFollowUpMessage(s, i, "User kicked successfully!", true) + +}
\ No newline at end of file diff --git a/commands/commands.go b/commands/commands.go index 629999f..f6027c4 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -6,6 +6,7 @@ import ( var ( manageMessagesPermissions int64 = discordgo.PermissionManageMessages + PermissionKickMembers int64 = discordgo.PermissionKickMembers ) var ( @@ -23,5 +24,18 @@ var ( }, }, }, + { + Name: "kick", + Description: "Kick a member from the server", + DefaultMemberPermissions: &PermissionKickMembers, + Options: []*discordgo.ApplicationCommandOption{ + { + Type: discordgo.ApplicationCommandOptionUser, + Name: "target", + Description: "The member to kick", + Required: true, + }, + }, + }, } ) diff --git a/handlers/guildMemberAdd.go b/handlers/guildMemberAdd.go new file mode 100644 index 0000000..97a4f1c --- /dev/null +++ b/handlers/guildMemberAdd.go @@ -0,0 +1,17 @@ +package handlers + +import ( + "log" + "github.com/bwmarrin/discordgo" +) + +func MemberAdd(s *discordgo.Session, m *discordgo.GuildMemberAdd) { + if m.GuildID == "1009009522767052860" { // Yuzaki Guild + err := s.GuildMemberRoleAdd(m.GuildID, m.User.ID, "1307471288415162428") // Members Role + if err != nil { + log.Println(err) + } + } + + +} diff --git a/handlers/interactionCreateHandler.go b/handlers/interactionCreateHandler.go index 2d9e0e7..fd0f105 100644 --- a/handlers/interactionCreateHandler.go +++ b/handlers/interactionCreateHandler.go @@ -10,6 +10,7 @@ import ( var ( SlashCommandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){ "purge": admin.PurgeChat, + "kick": admin.KickMember, } ) diff --git a/handlers/messageHandlers/poketwoHandler.go b/handlers/messageHandlers/poketwoHandler.go index 3ceb83b..0e108f5 100644 --- a/handlers/messageHandlers/poketwoHandler.go +++ b/handlers/messageHandlers/poketwoHandler.go @@ -20,12 +20,13 @@ func PoketwoHandler(s *discordgo.Session, m *discordgo.MessageCreate) { } return } - if isPoketwoCommand(m) && !isAllowed { handleUnauthorizedCommand(s, m) } } + + func isPoketwoCommand(m *discordgo.MessageCreate) bool { return strings.HasPrefix(strings.ToLower(m.Content), "p!") || (len(m.Mentions) > 0 && m.Mentions[0].ID == poketwoID) diff --git a/yuzaki/main.go b/yuzaki/main.go index 11e1aa3..8de91c2 100644 --- a/yuzaki/main.go +++ b/yuzaki/main.go @@ -32,6 +32,7 @@ func init() { session.AddHandler(ready) session.AddHandler(handlers.MessageGatewayHandler) session.AddHandler(handlers.InteractionCreateHandler) + session.AddHandler(handlers.MemberAdd) } func main() { |
