diff --git a/src/commands/admin.ts b/src/commands/admin.ts index aa35efd..5097336 100644 --- a/src/commands/admin.ts +++ b/src/commands/admin.ts @@ -1,5 +1,7 @@ import { Message, Role } from "discord.js"; import Client from "../structures/Client"; +import Permission from "../utils/Permissions/Permission" + import adminmanualchallenge from "../handlers/admin/adminmanualchallenge"; import admindisablecommand from "../handlers/admin/admindisablecommand"; import adminenablecommand from "../handlers/admin/adminenablecommand"; @@ -17,29 +19,9 @@ module.exports = { category: "Administration", usage: "admin ", run: async function run(client: Client, message: Message, args: Array) { - let srOfficerRole: Role; - if (message.guild.id === "501501905508237312") { - srOfficerRole = message.guild.roles.cache.find((r) => r.id === Roles.GENERAL.SR_OFFICER.id); - } else { - srOfficerRole = message.guild.roles.cache.find((r) => r.name === Roles.GENERAL.SR_OFFICER.name); - } - // I know this ugly af but i was lazy - if (!srOfficerRole) { - if (message.guild.id !== "501501905508237312") { - if (!message.member.hasPermission(["ADMINISTRATOR"]) && message.member.roles.cache.find((r) => r.id === srOfficerRole.id) === undefined) { - return message.channel.send("Missing Permissions.\nRequired: **ADMINISTRATOR**"); - } - } else { - if (!message.member.hasPermission(["ADMINISTRATOR"]) && message.member.roles.cache.find((r) => r.id === srOfficerRole.id) === undefined) { - return message.channel.send("Missing Permissions.\nRequired: **ADMINISTRATOR**"); - } - } - } else { - if (!message.member.hasPermission("ADMINISTRATOR")) { - message.channel.send("Missing Permissions.\nRequired: **ADMINISTRATOR**"); - return; - } + if(!await Permission.isAdmin(message.member)) { + return message.channel.send("Missing admin permissions to execute this command!"); } if (args.length === 0) { diff --git a/src/commands/approvesuggestion.ts b/src/commands/approvesuggestion.ts index f43529f..77700e9 100644 --- a/src/commands/approvesuggestion.ts +++ b/src/commands/approvesuggestion.ts @@ -1,14 +1,15 @@ import { Message, TextChannel, MessageEmbed } from "discord.js"; import Client from "../structures/Client"; import Channels from "../data/calm/channels.json"; +import Permission from "../utils/Permissions/Permission"; module.exports = { name: "approvesuggestion", description: "Approve a suggestion!", category: "Administration", - permissions: ["ADMINISTRATOR"], usage: "approvesuggestion ", run: async function run(client: Client, message: Message, args: Array) { + if(!await Permission.isAdmin(message.member)) return message.channel.send("Missing permissions!"); // Basic checks: no args provided; suggestions channel if (args.length === 0) return message.channel.send("Missing Arguments.\n**Usage:** `c!approvesuggestion [message id]`"); diff --git a/src/commands/denysuggestion.ts b/src/commands/denysuggestion.ts index d82e057..377a57c 100644 --- a/src/commands/denysuggestion.ts +++ b/src/commands/denysuggestion.ts @@ -1,19 +1,15 @@ import { Message, TextChannel, MessageEmbed } from "discord.js"; import Client from "../structures/Client"; import Channels from "../data/calm/channels.json"; +import Permission from "../utils/Permissions/Permission"; module.exports = { name: "denysuggestion", description: "Denies a suggestion!", category: "Administration", - permissions: ["ADMINISTRATOR"], usage: "denysuggestion ", run: async function run(client: Client, message: Message, args: Array) { - // Basic checks: Adminstrator Permission; no args provided; suggestions channel - if (!message.member.hasPermission("ADMINISTRATOR")) { - message.channel.send("Missing Permissions.\nRequired: **ADMINISTRATOR**"); - return; - } + if(!await Permission.isAdmin(message.member)) return message.channel.send("Missing permissions!"); if (args.length === 0) return message.channel.send("Missing Arguments.\n**Usage:** `c!denysuggestion [message id]`"); diff --git a/src/commands/lockdown.ts b/src/commands/lockdown.ts index 3df61f5..fbad88c 100644 --- a/src/commands/lockdown.ts +++ b/src/commands/lockdown.ts @@ -3,14 +3,16 @@ import Client from "../structures/Client"; import channels from "../data/calm/channels.json"; import roles from "../data/calm/roles.json"; import logger from "../utils/logger/Logger"; +import Permission from "../utils/Permissions/Permission"; module.exports = { name: "lockdown", description: "Locks down the server", category: "Administration", - permissions: ["ADMINISTRATOR"], usage: "lockdown [full]", run: async function run(client: Client, message: Message, args: Array) { + if(!await Permission.isAdmin(message.member)) return message.channel.send("Missing permissions!"); + // Check if full lockdown, or just a normal one. let fullLock: boolean; if (args[0] == "full") { diff --git a/src/commands/ping.ts b/src/commands/ping.ts index 8762d36..3590370 100644 --- a/src/commands/ping.ts +++ b/src/commands/ping.ts @@ -1,6 +1,6 @@ -import { Message } from "discord.js"; +import { Message, MessageManager } from "discord.js"; import Client from "../structures/Client"; - +import Permissions from "../utils/Permissions/Permission" module.exports = { name: "ping", description: "Pong!", diff --git a/src/commands/unlock.ts b/src/commands/unlock.ts index fd1b885..7b30f41 100644 --- a/src/commands/unlock.ts +++ b/src/commands/unlock.ts @@ -2,14 +2,15 @@ import { Message, Role, TextChannel } from "discord.js"; import Client from "../structures/Client"; import channels from "../data/calm/channels.json"; import logger from "../utils/logger/Logger"; +import Permission from "../utils/Permissions/Permission"; module.exports = { name: "unlock", description: "Unlocks the server", category: "Administration", - permissions: ["ADMINISTRATOR"], usage: "unlock [full]", run: async function run(client: Client, message: Message, args: Array) { + if(!await Permission.isAdmin(message.member)) return message.channel.send("Missing permissions!"); // Check if full lockdown, or just a normal one. let fullLock: boolean; if (args[0] == "full") { diff --git a/src/commands/verbal.ts b/src/commands/verbal.ts index a90d26a..0dd4ce5 100644 --- a/src/commands/verbal.ts +++ b/src/commands/verbal.ts @@ -2,6 +2,7 @@ import { Guild, GuildMember, Message, MessageAttachment, MessageEmbed } from "di import Client from "../structures/Client"; import Database from "../utils/database/Database"; import Roles from "../data/calm/roles.json"; +import Permission from "../utils/Permissions/Permission"; const staffRoles = [Roles.GENERAL.STAFF_TEAM, Roles.GENERAL.DISCORD_STAFF, Roles.GENERAL.MANAGEMENT_TEAM]; @@ -13,7 +14,7 @@ module.exports = { usage: "verbal ", run: async function run(client: Client, message: Message, args: Array) { // c!verbal (add, remove, info) (userid, casenumber) (reason) (attached image) - if (!(await isMod(message.member))) return message.channel.send("Missing permissions."); + if(!await Permission.isStaff(message.member)) return message.channel.send("Missing permissions!"); let guildSettings = await Database.getGuildSettings(message.guild.id); @@ -147,23 +148,6 @@ module.exports = { }, }; -async function isMod(member: GuildMember) { - if (member.hasPermission(["ADMINISTRATOR"])) return true; - let hasModRole = false; - for (let i = 0; i < staffRoles.length; i++) { - if (member.guild.id === "501501905508237312") { - if (member.roles.cache.find((r) => r.id === staffRoles[i].id)) { - return true; - } - } else { - if (member.roles.cache.find((r) => r.name.toLowerCase() === staffRoles[i].name.toLowerCase())) { - return true; - } - } - } - return false; -} - function attachIsImage(msgAttach: MessageAttachment) { if (msgAttach === undefined) return false; var url = msgAttach.url; diff --git a/src/data/calm/roles.json b/src/data/calm/roles.json index b262cfe..7a679fb 100644 --- a/src/data/calm/roles.json +++ b/src/data/calm/roles.json @@ -16,6 +16,10 @@ "name": "Sr Officer", "id": "644368780515868703" }, + "DISCORD_MANAGER": { + "name": "Discord Manager", + "id": "750203201302692000" + }, "INACTIVE": { "name": "Inactive", "id": "591346583501668358" diff --git a/src/utils/Permissions/Permission.ts b/src/utils/Permissions/Permission.ts new file mode 100644 index 0000000..6ffd133 --- /dev/null +++ b/src/utils/Permissions/Permission.ts @@ -0,0 +1,62 @@ +import { Guild, GuildMember, Role } from "discord.js"; +import Roles from "../../data/calm/roles.json"; + +const staffRoles = [Roles.GENERAL.DISCORD_STAFF, Roles.GENERAL.STAFF_TEAM] + +const isAdmin = async function (member: GuildMember): Promise { + const srOfficerRole = await getRole(member.guild, Roles.GENERAL.SR_OFFICER.id, Roles.GENERAL.SR_OFFICER.name); + const discordManagerRole = await getRole(member.guild, Roles.GENERAL.DISCORD_MANAGER.id, Roles.GENERAL.DISCORD_MANAGER.name); + + if(srOfficerRole) { + if(hasRole(srOfficerRole, member)) return true; + } + + if(discordManagerRole) { + if(hasRole(discordManagerRole, member)) return true; + } + + return member.hasPermission(["ADMINISTRATOR"]); +} + +const isStaff = async function (member: GuildMember): Promise { + if(await isAdmin(member)) return true; + + const discordStaffRole = await getRole(member.guild, Roles.GENERAL.DISCORD_STAFF.id, Roles.GENERAL.DISCORD_STAFF.name); + const guildStaffRole = await getRole(member.guild, Roles.GENERAL.STAFF_TEAM.id, Roles.GENERAL.STAFF_TEAM.name); + + if(discordStaffRole) { + if(hasRole(discordStaffRole, member)) return true; + } + + if(guildStaffRole) { + if(hasRole(guildStaffRole, member)) return true; + } + + return false; +} + +export default { + isAdmin: isAdmin, + isStaff: isStaff +} + +async function getRole(guild: Guild, roleid?: string, rolename?: string): Promise { + if (guild.id == "501501905508237312" && roleid) { + guild.roles + .fetch(roleid) + .then((role) => { + return role; + }) + .catch((err) => { + return undefined; + }); + } else if (rolename) { + return guild.roles.cache.find((r) => r.name === rolename); + } else { + return undefined; + } +} + +function hasRole(role: Role, member: GuildMember) { + return member.roles.cache.find(r => r === role) +} \ No newline at end of file