EventEmitter, reformatting, system message disable option

This commit is contained in:
mmacierzanka committed 2021-07-05 20:42:23 +02:00
1 parent 7d9cdb508b
commit 2ceb32e186
4 files changed
+402 -284

No files matched your search

+115 -66
View File
@@ -1,48 +1,59 @@
import { ColorResolvable, DMChannel, GuildMember, Message, MessageEmbed, NewsChannel, TextChannel, User } from 'discord.js';
import { Command, PermissionsError } from './Command.js';
import {
ColorResolvable,
DMChannel,
GuildMember,
Message,
MessageEmbed,
NewsChannel,
TextChannel,
User,
} from "discord.js";
import { Command, PermissionsError } from "./Command.js";
type MessageType = 'PERMISSION' | 'ERROR' | 'NOT_FOUND';
type MessageType = "PERMISSION" | "ERROR" | "NOT_FOUND";
interface SystemMessageAppearance {
title: string,
bottomText?: string,
accentColor?: ColorResolvable,
showTimestamp?: boolean,
footer?: string
title: string;
bottomText?: string;
accentColor?: ColorResolvable;
showTimestamp?: boolean;
footer?: string;
}
interface SystemMessageData {
command?: Command,
phrase?: string,
user?: GuildMember | User,
error?: Error | PermissionsError | string
command?: Command;
phrase?: string;
user?: GuildMember | User;
error?: Error | PermissionsError | string;
}
class SystemMessageManager {
enabled: boolean;
PERMISSION: SystemMessageAppearance;
ERROR: SystemMessageAppearance;
NOT_FOUND: SystemMessageAppearance;
deleteTimeout: number;
constructor(botName?: string) {
this.enabled = true;
this.PERMISSION = {
title: '👮‍♂️ Insufficient permissions',
title: "👮‍♂️ Insufficient permissions",
bottomText: "You don't have enough permissions to run this command",
accentColor: '#1d1dc4',
accentColor: "#1d1dc4",
showTimestamp: true,
footer: botName
}
footer: botName,
};
this.ERROR = {
title: '❌ An error occurred',
bottomText: 'Something went wrong while processing your request.',
accentColor: '#ff0000',
title: "❌ An error occurred",
bottomText: "Something went wrong while processing your request.",
accentColor: "#ff0000",
showTimestamp: true,
footer: botName
}
footer: botName,
};
this.NOT_FOUND = {
title: '🔍 Command not found',
accentColor: '#ff5500',
title: "🔍 Command not found",
accentColor: "#ff5500",
showTimestamp: true,
footer: botName
}
footer: botName,
};
this.deleteTimeout = Infinity;
}
@@ -53,70 +64,108 @@ class SystemMessageManager {
* @param {TextChannel | DMChannel | NewsChannel} [channel] - if specified, the generated message will be sent in this channel
* @returns *Promise<MessageEmbed | Message | void>*
*/
async send(type: MessageType, data?: SystemMessageData, channel?: TextChannel | DMChannel | NewsChannel) : Promise<MessageEmbed | Message | void> {
if(this[type]) {
async send(
type: MessageType,
data?: SystemMessageData,
channel?: TextChannel | DMChannel | NewsChannel
): Promise<MessageEmbed | Message | void> {
if (!this.enabled) {
return;
}
if (this[type]) {
const embed = new MessageEmbed();
embed.setTitle(this[type].title);
if(this[type].bottomText) embed.setDescription(this[type].bottomText);
embed.setColor(this[type].accentColor || '#000');
if(this[type].showTimestamp) embed.setTimestamp();
if(this[type].footer) embed.setFooter(this[type].footer);
if(data) {
switch(type) {
case 'ERROR':
if(data.command) {
embed.addField('Command name:', data.command.name, false);
if (this[type].bottomText)
embed.setDescription(this[type].bottomText);
embed.setColor(this[type].accentColor || "#000");
if (this[type].showTimestamp) embed.setTimestamp();
if (this[type].footer) embed.setFooter(this[type].footer);
if (data) {
switch (type) {
case "ERROR":
if (data.command) {
embed.addField(
"Command name:",
data.command.name,
false
);
}
if(data.error) {
if(data.error instanceof Error || data.error instanceof PermissionsError) {
embed.addField('Error details:', data.error.toString(), false);
}
else if(typeof data.error == 'string') {
embed.addField('Error details:', data.error, false);
if (data.error) {
if (
data.error instanceof Error ||
data.error instanceof PermissionsError
) {
embed.addField(
"Error details:",
data.error.toString(),
false
);
} else if (typeof data.error == "string") {
embed.addField(
"Error details:",
data.error,
false
);
}
}
if(data.user) {
embed.addField('User:', data.user.toString(), false);
if (data.user) {
embed.addField(
"User:",
data.user.toString(),
false
);
}
break;
case 'NOT_FOUND':
if(data.phrase) {
embed.addField('Phrase:', data.phrase, false);
case "NOT_FOUND":
if (data.phrase) {
embed.addField("Phrase:", data.phrase, false);
}
break;
case 'PERMISSION':
if(data.user) {
embed.addField('User:', data.user.toString(), false);
case "PERMISSION":
if (data.user) {
embed.addField(
"User:",
data.user.toString(),
false
);
}
if(data.command) {
embed.addField('Command name:', data.command.name, false);
if(data.command.permissions) {
let permList: string = '';
data.command.permissions.toArray(false).map(p => {
permList += p + '\n';
});
embed.addField('Required permissions:', permList, false);
if (data.command) {
embed.addField(
"Command name:",
data.command.name,
false
);
if (data.command.permissions) {
let permList: string = "";
data.command.permissions
.toArray(false)
.map((p) => {
permList += p + "\n";
});
embed.addField(
"Required permissions:",
permList,
false
);
}
}
break;
}
}
if(channel) {
if (channel) {
const message = await channel.send(embed);
if(this.deleteTimeout != Infinity && message.deletable) {
if (this.deleteTimeout != Infinity && message.deletable) {
await message.delete({ timeout: this.deleteTimeout });
}
return message;
}
else {
} else {
return embed;
}
}
else {
console.error('ERROR! System message: Incorrect parameter');
} else {
console.error("ERROR! System message: Incorrect parameter");
return;
}
}
}
export { MessageType, SystemMessageAppearance, SystemMessageManager };
export { MessageType, SystemMessageAppearance, SystemMessageManager };