Feature/48 database #114
17 changed files with 111 additions and 20 deletions
|
@ -6,6 +6,7 @@ commands.disabled.message: The message to show when a disabled command is ran (D
|
|||
|
||||
role.assignable: List of roles assignable to user (Default: [])
|
||||
role.moderator: The moderator role name (Default: "Moderator")
|
||||
role.administrator: The administrator role name (Default: "Administrator")
|
||||
role.muted: The muted role name (Default: "Muted")
|
||||
|
||||
rules.file: The location of the rules file (Default: "data/rules/rules")
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"port": 3306,
|
||||
"username": "dev",
|
||||
"password": "dev",
|
||||
"database": "droplet",
|
||||
"database": "vylbot",
|
||||
"synchronize": true,
|
||||
"logging": false,
|
||||
"entities": [
|
||||
|
|
|
@ -21,7 +21,7 @@ export class Events {
|
|||
|
||||
// Emit when a message is sent
|
||||
// Used to check for commands
|
||||
public onMessage(message: Message, commands: ICommandItem[]): IEventResponse {
|
||||
public async onMessage(message: Message, commands: ICommandItem[]): Promise<IEventResponse> {
|
||||
if (!message.guild) return {
|
||||
valid: false,
|
||||
message: "Message was not sent in a guild, ignoring.",
|
||||
|
@ -43,7 +43,7 @@ export class Events {
|
|||
message: "Command name was not found",
|
||||
};
|
||||
|
||||
const res = this._util.loadCommand(name, args, message, commands);
|
||||
const res = await this._util.loadCommand(name, args, message, commands);
|
||||
|
||||
if (!res.valid) {
|
||||
return {
|
||||
|
|
|
@ -7,6 +7,10 @@ import { Event } from "../type/event";
|
|||
import { ICommandContext } from "../contracts/ICommandContext";
|
||||
import ICommandItem from "../contracts/ICommandItem";
|
||||
import IEventItem from "../contracts/IEventItem";
|
||||
import SettingsHelper from "../helpers/SettingsHelper";
|
||||
import StringTools from "../helpers/StringTools";
|
||||
import { CommandResponse } from "../constants/CommandResponse";
|
||||
import ErrorMessages from "../constants/ErrorMessages";
|
||||
|
||||
export interface IUtilResponse extends IBaseResponse {
|
||||
context?: {
|
||||
|
@ -18,7 +22,7 @@ export interface IUtilResponse extends IBaseResponse {
|
|||
|
||||
// Util Class
|
||||
export class Util {
|
||||
public loadCommand(name: string, args: string[], message: Message, commands: ICommandItem[]): IUtilResponse {
|
||||
public async loadCommand(name: string, args: string[], message: Message, commands: ICommandItem[]): Promise<IUtilResponse> {
|
||||
if (!message.member) return {
|
||||
valid: false,
|
||||
message: "Member is not part of message",
|
||||
|
@ -51,14 +55,27 @@ export class Util {
|
|||
const requiredRoles = item.Command._roles;
|
||||
|
||||
for (const i in requiredRoles) {
|
||||
if (!message.member.roles.cache.find(role => role.name == requiredRoles[i])) {
|
||||
message.reply(`You require the \`${requiredRoles[i]}\` role to run this command`);
|
||||
if (message.guild) {
|
||||
const setting = await SettingsHelper.GetSetting(`role.${requiredRoles[i]}`, message.guild?.id);
|
||||
|
||||
if (!setting) {
|
||||
message.reply("Unable to verify if you have this role, please contact your bot administrator");
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
message: `You require the \`${requiredRoles[i]}\` role to run this command`
|
||||
message: "Unable to verify if you have this role, please contact your bot administrator"
|
||||
};
|
||||
}
|
||||
|
||||
if (!message.member.roles.cache.find(role => role.name == setting)) {
|
||||
message.reply(`You require the \`${StringTools.Capitalise(setting)}\` role to run this command`);
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
message: `You require the \`${StringTools.Capitalise(setting)}\` role to run this command`
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const context: ICommandContext = {
|
||||
|
@ -67,6 +84,27 @@ export class Util {
|
|||
message: message
|
||||
};
|
||||
|
||||
const precheckResponse = item.Command.precheck(context);
|
||||
const precheckAsyncResponse = await item.Command.precheckAsync(context);
|
||||
|
||||
if (precheckResponse != CommandResponse.Ok) {
|
||||
message.reply(ErrorMessages.GetErrorMessage(precheckResponse));
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
message: ErrorMessages.GetErrorMessage(precheckResponse)
|
||||
};
|
||||
}
|
||||
|
||||
if (precheckAsyncResponse != CommandResponse.Ok) {
|
||||
message.reply(ErrorMessages.GetErrorMessage(precheckAsyncResponse));
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
message: ErrorMessages.GetErrorMessage(precheckAsyncResponse)
|
||||
};
|
||||
}
|
||||
|
||||
item.Command.execute(context);
|
||||
|
||||
return {
|
||||
|
|
|
@ -12,7 +12,7 @@ export default class Ban extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ export default class Clear extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Guild } from "discord.js";
|
||||
import { readFileSync } from "fs";
|
||||
import { CommandResponse } from "../constants/CommandResponse";
|
||||
import DefaultValues from "../constants/DefaultValues";
|
||||
import { ICommandContext } from "../contracts/ICommandContext";
|
||||
import ICommandReturnContext from "../contracts/ICommandReturnContext";
|
||||
|
@ -13,6 +14,25 @@ export default class Config extends Command {
|
|||
constructor() {
|
||||
super();
|
||||
super._category = "Administration";
|
||||
super._roles = [
|
||||
"administrator"
|
||||
]
|
||||
}
|
||||
|
||||
public override async precheckAsync(context: ICommandContext): Promise<CommandResponse> {
|
||||
if (!context.message.guild) {
|
||||
return CommandResponse.ServerNotSetup;
|
||||
}
|
||||
|
||||
const server = await Server.FetchOneById<Server>(Server, context.message.guild?.id, [
|
||||
"Settings",
|
||||
]);
|
||||
|
||||
if (!server) {
|
||||
return CommandResponse.ServerNotSetup;
|
||||
}
|
||||
|
||||
return CommandResponse.Ok;
|
||||
}
|
||||
|
||||
public override async execute(context: ICommandContext) {
|
||||
|
@ -25,8 +45,6 @@ export default class Config extends Command {
|
|||
]);
|
||||
|
||||
if (!server) {
|
||||
const embed = new ErrorEmbed(context, "This server hasn't been setup yet, please run the setup command");
|
||||
embed.SendToCurrentChannel();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ export default class Kick extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ export default class Mute extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ export default class Rules extends Command {
|
|||
|
||||
super._category = "Admin";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"administrator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,9 @@ export default class Setup extends Command {
|
|||
constructor() {
|
||||
super();
|
||||
super._category = "Administration";
|
||||
super._roles = [
|
||||
"moderator"
|
||||
]
|
||||
}
|
||||
|
||||
public override async execute(context: ICommandContext) {
|
||||
|
|
|
@ -12,7 +12,7 @@ export default class Unmute extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ export default class Warn extends Command {
|
|||
|
||||
super._category = "Moderation";
|
||||
super._roles = [
|
||||
process.env.ROLES_MODERATOR!
|
||||
"moderator"
|
||||
];
|
||||
}
|
||||
|
||||
|
|
5
src/constants/CommandResponse.ts
Normal file
5
src/constants/CommandResponse.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
export enum CommandResponse {
|
||||
Ok,
|
||||
Unauthorised,
|
||||
ServerNotSetup,
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
export default class DefaultValues {
|
||||
public static readonly values: ISettingValue[] = [];
|
||||
public static values: ISettingValue[] = [];
|
||||
|
||||
public static GetValue(key: string): string | undefined {
|
||||
this.SetValues();
|
||||
|
@ -22,6 +22,7 @@ export default class DefaultValues {
|
|||
// Role (Command)
|
||||
this.values.push({ Key: "role.assignable", Value: "" });
|
||||
this.values.push({ Key: "role.moderator", Value: "Moderator" });
|
||||
this.values.push({ Key: "role.administrator", Value: "Administrator"});
|
||||
this.values.push({ Key: "role.muted", Value: "Muted" });
|
||||
|
||||
// Rules (Command)
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
import { CommandResponse } from "./CommandResponse";
|
||||
|
||||
export default class ErrorMessages {
|
||||
public static readonly InsufficientBotPermissions = "Unable to do this action, am I missing permissions?";
|
||||
public static readonly ChannelNotFound = "Unable to find channel";
|
||||
public static readonly RoleNotFound = "Unable to find role";
|
||||
|
||||
public static readonly UserUnauthorised = "You are not authorised to use this command";
|
||||
public static readonly ServerNotSetup = "This server hasn't been setup yet, please run the setup command";
|
||||
|
||||
public static GetErrorMessage(response: CommandResponse): string {
|
||||
switch (response) {
|
||||
case CommandResponse.Unauthorised:
|
||||
return this.UserUnauthorised;
|
||||
case CommandResponse.ServerNotSetup:
|
||||
return this.ServerNotSetup;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import { CommandResponse } from "../constants/CommandResponse";
|
||||
import { ICommandContext } from "../contracts/ICommandContext";
|
||||
|
||||
export class Command {
|
||||
|
@ -9,6 +10,14 @@ export class Command {
|
|||
this._roles = [];
|
||||
}
|
||||
|
||||
public precheck(context: ICommandContext): CommandResponse {
|
||||
return CommandResponse.Ok;
|
||||
}
|
||||
|
||||
public async precheckAsync(context: ICommandContext): Promise<CommandResponse> {
|
||||
return CommandResponse.Ok;
|
||||
}
|
||||
|
||||
public execute(context: ICommandContext) {
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue