Skip to content
This repository was archived by the owner on Dec 5, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 4 additions & 22 deletions src/commands/admin.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -17,29 +19,9 @@ module.exports = {
category: "Administration",
usage: "admin <manualchallenge/disablecommand/enablecommand/sleep/command/findsuggestor/say>",
run: async function run(client: Client, message: Message, args: Array<String>) {
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) {
Expand Down
3 changes: 2 additions & 1 deletion src/commands/approvesuggestion.ts
Original file line number Diff line number Diff line change
@@ -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 <message id>",
run: async function run(client: Client, message: Message, args: Array<string>) {
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]`");
Expand Down
8 changes: 2 additions & 6 deletions src/commands/denysuggestion.ts
Original file line number Diff line number Diff line change
@@ -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 <message id>",
run: async function run(client: Client, message: Message, args: Array<string>) {
// 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]`");

Expand Down
4 changes: 3 additions & 1 deletion src/commands/lockdown.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>) {
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") {
Expand Down
4 changes: 2 additions & 2 deletions src/commands/ping.ts
Original file line number Diff line number Diff line change
@@ -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!",
Expand Down
3 changes: 2 additions & 1 deletion src/commands/unlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>) {
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") {
Expand Down
20 changes: 2 additions & 18 deletions src/commands/verbal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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];

Expand All @@ -13,7 +14,7 @@ module.exports = {
usage: "verbal <add/remove/info/help/flush>",
run: async function run(client: Client, message: Message, args: Array<String>) {
// 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);

Expand Down Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions src/data/calm/roles.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
"name": "Sr Officer",
"id": "644368780515868703"
},
"DISCORD_MANAGER": {
"name": "Discord Manager",
"id": "750203201302692000"
},
"INACTIVE": {
"name": "Inactive",
"id": "591346583501668358"
Expand Down
62 changes: 62 additions & 0 deletions src/utils/Permissions/Permission.ts
Original file line number Diff line number Diff line change
@@ -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<Boolean> {
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<Boolean> {
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<Role> {
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)
}