Archived
Command system (not tested)
This commit is contained in:
1 parent
23077912e3
commit
c35c23d6da
3 files changed
+133
-20
No files matched your search
+38
@@ -0,0 +1,38 @@
|
||||
//IMPORTS
|
||||
import { Client, ClientOptions } from 'discord.js';
|
||||
import { CommandsManager } from './Commands';
|
||||
|
||||
//TYPE DEFINITIONS
|
||||
interface ConfigurationOptions {
|
||||
prefix: string,
|
||||
accentColor: string
|
||||
}
|
||||
interface ConstructorOptions {
|
||||
name: string,
|
||||
prefix: string,
|
||||
helpCommand?: boolean,
|
||||
clientOptions?: ClientOptions,
|
||||
token?: string
|
||||
}
|
||||
|
||||
//MAIN CLASS
|
||||
class Bot {
|
||||
name: string;
|
||||
client: Client;
|
||||
commands: CommandsManager;
|
||||
config: ConfigurationOptions;
|
||||
|
||||
constructor(options: ConstructorOptions) {
|
||||
this.name = options.name;
|
||||
this.client = new Client(options.clientOptions);
|
||||
this.commands = new CommandsManager();
|
||||
this.config = {
|
||||
prefix: options.prefix,
|
||||
accentColor: "#000"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//EXPORTS
|
||||
export default Bot;
|
||||
export { Bot };
|
||||
@@ -0,0 +1,95 @@
|
||||
import { Permissions, PermissionResolvable } from 'discord.js';
|
||||
|
||||
interface CommandBuilder {
|
||||
name: string,
|
||||
aliases?: string[] | string,
|
||||
keywords?: string[] | string,
|
||||
description?: string,
|
||||
usage?: string,
|
||||
permissions: PermissionResolvable
|
||||
}
|
||||
|
||||
class Command {
|
||||
name: string;
|
||||
aliases: string[];
|
||||
keywords: string[];
|
||||
description: string;
|
||||
usage: string;
|
||||
permissions: Permissions;
|
||||
|
||||
constructor(options: CommandBuilder) {
|
||||
this.name = options.name.split(' ').join('_');
|
||||
this.aliases = [];
|
||||
if(options.aliases) {
|
||||
this.aliases = ProcessPhrase(options.aliases);
|
||||
}
|
||||
this.keywords = [];
|
||||
if(options.keywords) {
|
||||
this.keywords = ProcessPhrase(options.keywords);
|
||||
}
|
||||
this.description = options.description || "No description";
|
||||
this.usage = options.usage || "-";
|
||||
this.permissions = new Permissions(options.permissions);
|
||||
}
|
||||
}
|
||||
class CommandsManager {
|
||||
list: Command[];
|
||||
|
||||
constructor() {
|
||||
this.list = [];
|
||||
}
|
||||
get(name: string) : Command | undefined {
|
||||
let command : Command | undefined = undefined;
|
||||
this.list.map((c) => {
|
||||
if(c.name == name) {
|
||||
command = c;
|
||||
}
|
||||
});
|
||||
return command;
|
||||
}
|
||||
add(command: Command) : boolean {
|
||||
try {
|
||||
this.list.map((c) => {
|
||||
if(c.name == command.name) {
|
||||
throw new Error(`Command with name "${c.name}" already exists!`);
|
||||
}
|
||||
command.aliases.map((a) => {
|
||||
if(c.aliases.indexOf(a) != -1) {
|
||||
console.warn(`WARN! Alias with name "${a}" already exists in "${c.name}" command. It will be removed from the "${command.name}" command`);
|
||||
const iToRemove = command.aliases.indexOf(a);
|
||||
command.aliases.splice(iToRemove, 1);
|
||||
}
|
||||
});
|
||||
command.keywords.map((k) => {
|
||||
if(c.keywords.indexOf(k) != -1) {
|
||||
console.warn(`WARN! Keyword "${k}" already exists in "${c.name}" command. It will be removed from the "${command.name}" command`);
|
||||
const iToRemove = command.keywords.indexOf(k);
|
||||
command.keywords.splice(iToRemove, 1);
|
||||
}
|
||||
});
|
||||
});
|
||||
this.list.push(command);
|
||||
return true;
|
||||
}
|
||||
catch(e) {
|
||||
console.error(`ERROR! ${e.toString()}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ProcessPhrase(phrase: string | string[]) : string[] {
|
||||
if(Array.isArray(phrase)) {
|
||||
const buff = phrase.map((p) => {
|
||||
return p.split(' ').join('_');
|
||||
});
|
||||
return buff;
|
||||
}
|
||||
else {
|
||||
const buff = [];
|
||||
buff.push(phrase.split(' ').join('_'));
|
||||
return buff;
|
||||
}
|
||||
}
|
||||
|
||||
export { Command, CommandsManager }
|
||||
@@ -1,20 +0,0 @@
|
||||
//IMPORTS
|
||||
import { Client, ClientOptions } from 'discord.js';
|
||||
|
||||
//TYPE DEFINITIONS
|
||||
interface ConstructorOptions {
|
||||
name: string,
|
||||
prefix: string,
|
||||
helpCommand?: boolean,
|
||||
clientOptions?: ClientOptions
|
||||
}
|
||||
|
||||
//MAIN CLASS
|
||||
class Bot {
|
||||
name: string;
|
||||
client: Client;
|
||||
constructor(options: ConstructorOptions) {
|
||||
this.name = options.name;
|
||||
this.client = new Client(options.clientOptions);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user