Added role based perm checks
This commit is contained in:
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Anime subcommands",
|
||||
public: true,
|
||||
dev: false,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("anime")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Ban a user",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("ban")
|
||||
@@ -55,12 +56,6 @@ export default {
|
||||
|
||||
const mod = await interaction.guild!.members.fetch(interaction.user.id)
|
||||
const memberRoles = member.roles.cache.map(role => role.id)
|
||||
const modRoles = mod.roles.cache.map(role => role.id)
|
||||
|
||||
if (!modRoles.includes(admin)) {
|
||||
await interaction.editReply("You do not have permission to use this command.")
|
||||
return
|
||||
}
|
||||
|
||||
if (interaction.guild!.members.me!.roles.highest.position <= member.roles.highest.position) {
|
||||
await interaction.editReply("I cannot ban this member.")
|
||||
|
||||
@@ -11,6 +11,7 @@ export default {
|
||||
description: "Get information about the bot",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("botinfo")
|
||||
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
description: "Check a player's stats.",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("check")
|
||||
|
||||
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Clears messages",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("clear")
|
||||
|
||||
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Configure the bot",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "superadmin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("config")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Find a person by the ign",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("find")
|
||||
|
||||
@@ -11,6 +11,7 @@ export default {
|
||||
description: "Force unverify a user",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "superadmin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("forceunverify")
|
||||
|
||||
@@ -12,6 +12,7 @@ export default {
|
||||
description: "Force update the user",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("forceupdate")
|
||||
|
||||
@@ -13,6 +13,7 @@ export default {
|
||||
description: "Force verify a user.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("forceverify")
|
||||
|
||||
@@ -11,6 +11,7 @@ export default {
|
||||
dev: false,
|
||||
public: true,
|
||||
subcommands: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("guild")
|
||||
|
||||
@@ -7,6 +7,7 @@ export default {
|
||||
description: "Help command",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("help")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Kick a member from the server.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("kick")
|
||||
@@ -34,12 +35,6 @@ export default {
|
||||
const reason = interaction.options.getString("reason") ?? "No reason provided."
|
||||
const mod = await interaction.guild!.members.fetch(interaction.user.id)
|
||||
const memberRoles = member.roles.cache.map(role => role.id)
|
||||
const modRoles = mod.roles.cache.map(role => role.id)
|
||||
|
||||
if (!modRoles.includes(helper) && !modRoles.includes(admin)) {
|
||||
await interaction.editReply("You do not have permission to use this command.")
|
||||
return
|
||||
}
|
||||
|
||||
if (member.id === interaction.applicationId) {
|
||||
await interaction.editReply("I cannot kick myself.")
|
||||
|
||||
@@ -7,6 +7,7 @@ export default {
|
||||
description: "Get the bot's ping.",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("ping")
|
||||
|
||||
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Shows pp size",
|
||||
public: true,
|
||||
dev: false,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("pp")
|
||||
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
description: "Remove a person on the waiting list.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("remove")
|
||||
|
||||
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Displays the requirements for the guild.",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("reqs")
|
||||
|
||||
@@ -7,6 +7,7 @@ export default {
|
||||
description: "Send a message to a channel.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "superadmin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("send")
|
||||
|
||||
@@ -8,6 +8,7 @@ export default {
|
||||
description: "Set your nickname",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("setnick")
|
||||
|
||||
@@ -15,9 +15,10 @@ import { ICommand } from "~/typings"
|
||||
export default {
|
||||
name: "setup",
|
||||
description: "Used for setup of the bot.",
|
||||
dev: true,
|
||||
dev: false,
|
||||
public: false,
|
||||
subcommands: true,
|
||||
requiredRole: "superadmin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("setup")
|
||||
|
||||
@@ -17,6 +17,7 @@ export default {
|
||||
description: "Set the slowmode of a channel.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("slowmode")
|
||||
|
||||
@@ -13,6 +13,7 @@ export default {
|
||||
dev: false,
|
||||
public: false,
|
||||
subcommands: true,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("staff")
|
||||
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
description: "Times out a memeber",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("timeout")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Unban a user from the server",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "admin",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("unban")
|
||||
|
||||
@@ -12,6 +12,7 @@ export default {
|
||||
description: "Update your guild rank.",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("update")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Get a player's UUID",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("uuid")
|
||||
|
||||
@@ -12,6 +12,7 @@ export default {
|
||||
description: "Verify yourself as a member of the server.",
|
||||
dev: false,
|
||||
public: true,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("verify")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Get your user info",
|
||||
public: true,
|
||||
dev: false,
|
||||
requiredRole: "none",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("whoami")
|
||||
|
||||
@@ -9,6 +9,7 @@ export default {
|
||||
description: "Get's the ign of a user.",
|
||||
dev: false,
|
||||
public: false,
|
||||
requiredRole: "helper",
|
||||
|
||||
data: new SlashCommandBuilder()
|
||||
.setName("whois")
|
||||
|
||||
@@ -16,6 +16,7 @@ export interface ICommand {
|
||||
dev?: boolean
|
||||
public: boolean
|
||||
subcommands?: boolean
|
||||
requiredRole?: "none" | "helper" | "admin" | "superadmin"
|
||||
data: SlashCommandBuilder
|
||||
execute: (arg: { interaction: ChatInputCommandInteraction, client: ExtendedClient }) => Promise<void>
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { Events, MessageFlags } from "discord.js"
|
||||
import { Events, GuildMember, MessageFlags } from "discord.js"
|
||||
import fs from "fs"
|
||||
import path from "path"
|
||||
import { embedColor } from "~/config/options"
|
||||
import { ICommand, LoadEventsOptions } from "~/typings"
|
||||
import { ExtendedClient as Client } from "~/utils/Client"
|
||||
import logToChannel from "~/utils/Functions/logtochannel"
|
||||
import { isAdmin, isHelper, isSuperAdmin } from "../Functions/staff"
|
||||
import tryCatch from "../Functions/trycatch"
|
||||
import { log } from "../Logger"
|
||||
|
||||
@@ -33,6 +34,43 @@ export default async function loadSlashCommandsEvents(client: Client, { ft, dir
|
||||
return
|
||||
}
|
||||
|
||||
if (!command.requiredRole && !isSuperAdmin(interaction.member as GuildMember)) {
|
||||
await interaction.reply({
|
||||
content: "You do not have permission to use this command.",
|
||||
flags: MessageFlags.Ephemeral
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
switch (command.requiredRole) {
|
||||
case "superadmin":
|
||||
if (!isSuperAdmin(interaction.member as GuildMember)) {
|
||||
await interaction.reply({
|
||||
content: "You do not have permission to use this command.",
|
||||
flags: MessageFlags.Ephemeral
|
||||
})
|
||||
}
|
||||
break
|
||||
case "admin":
|
||||
if (!isAdmin(interaction.member as GuildMember)) {
|
||||
await interaction.reply({
|
||||
content: "You do not have permission to use this command.",
|
||||
flags: MessageFlags.Ephemeral
|
||||
})
|
||||
}
|
||||
break
|
||||
case "helper":
|
||||
if (!isHelper(interaction.member as GuildMember)) {
|
||||
await interaction.reply({
|
||||
content: "You do not have permission to use this command.",
|
||||
flags: MessageFlags.Ephemeral
|
||||
})
|
||||
}
|
||||
break
|
||||
case "none":
|
||||
break
|
||||
}
|
||||
|
||||
const [error] = await tryCatch(command.execute({ interaction, client }))
|
||||
if (!error) return
|
||||
|
||||
|
||||
14
src/utils/Functions/staff.ts
Normal file
14
src/utils/Functions/staff.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { GuildMember, PermissionFlagsBits } from "discord.js"
|
||||
import { admin, helper } from "~/config/roles"
|
||||
|
||||
export function isSuperAdmin(member: GuildMember) {
|
||||
return member.permissions.has(PermissionFlagsBits.Administrator)
|
||||
}
|
||||
|
||||
export function isAdmin(member: GuildMember) {
|
||||
return member.roles.cache.has(admin) || member.permissions.has(PermissionFlagsBits.Administrator)
|
||||
}
|
||||
|
||||
export function isHelper(member: GuildMember) {
|
||||
return member.roles.cache.has(helper) || member.roles.cache.has(admin) || member.permissions.has(PermissionFlagsBits.Administrator)
|
||||
}
|
||||
Reference in New Issue
Block a user