Archived
EventEmitter, reformatting, system message disable option
This commit is contained in:
1 parent
7d9cdb508b
commit
2ceb32e186
4 files changed
+402
-284
No files matched your search
+115
-66
@@ -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 };
|
||||
Reference in new issue
Block a user