A powerful and extendable Discord bot, with it's own module system :3 thevoid.cafe/projects/voidy
at develop 63 lines 2.0 kB view raw
1import { PermissionFlagsBits } from "discord.js"; 2import { Button } from "@voidy/framework"; 3 4export default new Button({ 5 id: "MemberLogging", 6 7 execute: async ({ interaction, args }) => { 8 const [action, targetId] = args(interaction.customId); 9 10 if (!action || !targetId) { 11 await interaction.reply({ content: "Invalid button data.", ephemeral: true }); 12 return; 13 } 14 15 const member = await interaction.guild?.members.fetch(targetId).catch(() => null); 16 17 if (!member) { 18 await interaction.reply({ content: "Member not found in this server.", ephemeral: true }); 19 return; 20 } 21 22 switch (action) { 23 case "Kick": { 24 if (!interaction.memberPermissions?.has(PermissionFlagsBits.KickMembers)) { 25 await interaction.reply({ 26 content: "You need the **Kick Members** permission.", 27 ephemeral: true, 28 }); 29 return; 30 } 31 32 if (!member.kickable) { 33 await interaction.reply({ content: "I cannot kick this member.", ephemeral: true }); 34 return; 35 } 36 37 await member.kick(`Kicked by ${interaction.user.tag} via member logging`); 38 await interaction.reply({ content: `**${member.user.tag}** has been kicked.` }); 39 break; 40 } 41 case "Ban": { 42 if (!interaction.memberPermissions?.has(PermissionFlagsBits.BanMembers)) { 43 await interaction.reply({ 44 content: "You need the **Ban Members** permission.", 45 ephemeral: true, 46 }); 47 return; 48 } 49 50 if (!member.bannable) { 51 await interaction.reply({ content: "I cannot ban this member.", ephemeral: true }); 52 return; 53 } 54 55 await member.ban({ reason: `Banned by ${interaction.user.tag} via member logging` }); 56 await interaction.reply({ content: `**${member.user.tag}** has been banned.` }); 57 break; 58 } 59 default: 60 await interaction.reply({ content: "Unknown action.", ephemeral: true }); 61 } 62 }, 63});