mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-03 00:41:27 +03:00
Finish "new" command, and other stuff
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
const { MessageEmbed } = require('discord.js');
|
||||
|
||||
/**
|
||||
* A command
|
||||
*/
|
||||
@@ -115,4 +117,47 @@ module.exports = class Command {
|
||||
*/
|
||||
async execute(message, args) { } // eslint-disable-line no-unused-vars
|
||||
|
||||
/**
|
||||
* Send a message with the command usage
|
||||
* @param {TextChannel} channel - The channel to send the message to
|
||||
* @param {string} [cmd_name] - The command alias
|
||||
* @returns {Message}
|
||||
*/
|
||||
async sendUsage(channel, cmd_name) {
|
||||
let settings = await channel.guild.settings;
|
||||
if (!cmd_name) cmd_name = this.name;
|
||||
|
||||
const prefix = settings.command_prefix;
|
||||
const i18n = this.client.i18n.get(settings.locale);
|
||||
|
||||
const addArgs = (embed, arg) => {
|
||||
let required = arg.required ? '`❗` ' : '';
|
||||
embed.addField(required + arg.name, `» ${i18n('cmd_usage.args.description', arg.description)}}\n» ${i18n('cmd_usage.args.example', arg.example)}`);
|
||||
};
|
||||
|
||||
let usage,
|
||||
example,
|
||||
embed;
|
||||
|
||||
if (this.process_args) {
|
||||
usage = `${prefix + cmd_name} ${this.args.map(arg => arg.required ? `<${arg.name};>` : `[${arg.name};]`).join(' ')}`;
|
||||
example = `${prefix + cmd_name} ${this.args.map(arg => `${arg.name}: ${arg.example};`).join(' ')}`;
|
||||
embed = new MessageEmbed()
|
||||
.setColor(settings.error_colour)
|
||||
.setTitle(i18n('cmd_usage.title', cmd_name))
|
||||
.setDescription(i18n('cmd_usage.named_args') + i18n('cmd_usage.description', usage, example));
|
||||
} else {
|
||||
usage = `${prefix + cmd_name} ${this.args.map(arg => arg.required ? `<${arg.name}>` : `[${arg.name}]`).join(' ')}`;
|
||||
example = `${prefix + cmd_name} ${this.args.map(arg => `${arg.example}`).join(' ')}`;
|
||||
embed = new MessageEmbed()
|
||||
.setColor(settings.error_colour)
|
||||
.setTitle(i18n('cmd_usage.title', cmd_name))
|
||||
.setDescription(i18n('cmd_usage.description', usage, example));
|
||||
}
|
||||
|
||||
this.args.forEach(arg => addArgs(embed, arg));
|
||||
return await channel.send(embed);
|
||||
|
||||
}
|
||||
|
||||
};
|
@@ -83,39 +83,20 @@ module.exports = class CommandManager {
|
||||
|
||||
let args = raw_args;
|
||||
|
||||
const addArgs = (embed, arg) => {
|
||||
let required = arg.required ? '`❗` ' : '';
|
||||
embed.addField(required + arg.name, `» ${i18n('cmd_usage.args.description')} ${arg.description}\n» ${i18n('cmd_usage.args.example')} \`${arg.example}\``);
|
||||
};
|
||||
|
||||
if (cmd.process_args) {
|
||||
args = {};
|
||||
let data = [...raw_args.matchAll(/(?<key>\w+)\??\s?:\s?(?<value>([^;]|;{2})*);/gmi)];
|
||||
data.forEach(arg => args[arg.groups.key] = arg.groups.value.replace(/;{2}/gm, ';'));
|
||||
for (let arg of cmd.args) {
|
||||
if (arg.required && !args[arg]) {
|
||||
let usage = `${prefix + cmd_name} ${cmd.args.map(arg => arg.required ? `<${arg.name};>` : `[${arg.name};]`).join(' ')}`;
|
||||
let example = `${prefix + cmd_name} ${cmd.args.map(arg => `${arg.name}: ${arg.example};`).join(' ')}`;
|
||||
let embed = new MessageEmbed()
|
||||
.setColor(settings.error_colour)
|
||||
.setTitle(i18n('cmd_usage.title', cmd_name))
|
||||
.setDescription(i18n('cmd_usage.named_args') + i18n('cmd_usage.description', usage, example));
|
||||
cmd.args.forEach(a => addArgs(embed, a));
|
||||
return message.channel.send(embed);
|
||||
return await cmd.sendUsage(message.channel, cmd_name);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const args_num = raw_args.split(' ').filter(arg => arg.length !== 0).length;
|
||||
const required_args = cmd.args.reduce((acc, arg) => arg.required ? acc + 1 : acc, 0);
|
||||
if (args_num < required_args) {
|
||||
let usage = `${prefix + cmd_name} ${cmd.args.map(arg => arg.required ? `<${arg.name}>` : `[${arg.name}]`).join(' ')}`;
|
||||
let example = `${prefix + cmd_name} ${cmd.args.map(arg => `${arg.example}`).join(' ')}`;
|
||||
let embed = new MessageEmbed()
|
||||
.setColor(settings.error_colour)
|
||||
.setTitle(i18n('cmd_usage.title', cmd_name))
|
||||
.setDescription(i18n('cmd_usage.description', usage, example));
|
||||
cmd.args.forEach(a => addArgs(embed, a));
|
||||
return message.channel.send(embed);
|
||||
return await cmd.sendUsage(message.channel, cmd_name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,7 +139,6 @@ module.exports = class CommandManager {
|
||||
} catch (e) {
|
||||
this.client.log.warn(`An error occurred whilst executing the ${cmd.name} command`);
|
||||
this.client.log.error(e);
|
||||
// await message.channel.send(i18n('command_execution_error'));
|
||||
await message.channel.send(
|
||||
new MessageEmbed()
|
||||
.setColor('ORANGE')
|
||||
|
@@ -21,9 +21,6 @@ module.exports = class TicketArchives {
|
||||
});
|
||||
|
||||
if (t_row) {
|
||||
let embeds = [];
|
||||
for (let embed in message.embeds) embeds.push({ ...message.embeds[embed] });
|
||||
|
||||
await this.client.db.models.Message.create({
|
||||
id: message.id,
|
||||
ticket: t_row.id,
|
||||
@@ -31,7 +28,9 @@ module.exports = class TicketArchives {
|
||||
data: {
|
||||
content: message.content,
|
||||
// time: message.createdTimestamp,
|
||||
embeds,
|
||||
embeds: message.embeds.map(embed => {
|
||||
return { embed };
|
||||
}),
|
||||
attachments: [...message.attachments.values()]
|
||||
}
|
||||
});
|
||||
@@ -48,14 +47,11 @@ module.exports = class TicketArchives {
|
||||
});
|
||||
|
||||
if (m_row) {
|
||||
let embeds = [];
|
||||
for (let embed in message.embeds) embeds.push({ ...message.embeds[embed] });
|
||||
|
||||
m_row.data = {
|
||||
content: message.content,
|
||||
// time: message.editedTimestamp,
|
||||
embeds: message.embeds.map(embed => {
|
||||
return { ...message.embeds[embed] };
|
||||
return { embed };
|
||||
}),
|
||||
attachments: [...message.attachments.values()]
|
||||
};
|
||||
@@ -90,77 +86,77 @@ module.exports = class TicketArchives {
|
||||
}
|
||||
});
|
||||
|
||||
if (m_row) {
|
||||
// message author
|
||||
let u_model_data = {
|
||||
user: message.author.id,
|
||||
if (!m_row) return;
|
||||
|
||||
// message author
|
||||
let u_model_data = {
|
||||
user: message.author.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [u_row] = await this.client.db.models.UserEntity.findOrCreate({
|
||||
where: u_model_data,
|
||||
defaults: u_model_data
|
||||
});
|
||||
await u_row.update({
|
||||
avatar: message.author.displayAvatarURL(),
|
||||
username: message.author.username,
|
||||
discriminator: message.author.discriminator,
|
||||
display_name: message.member.displayName,
|
||||
colour: message.member.displayColor === 0 ? null : int2hex(message.member.displayColor),
|
||||
bot: message.author.bot
|
||||
});
|
||||
|
||||
// mentioned members
|
||||
message.mentions.members.forEach(async member => {
|
||||
let m_model_data = {
|
||||
user: member.user.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [u_row] = await this.client.db.models.UserEntity.findOrCreate({
|
||||
where: u_model_data,
|
||||
defaults: u_model_data
|
||||
});
|
||||
await u_row.update({
|
||||
avatar: message.author.displayAvatarURL(),
|
||||
username: message.author.username,
|
||||
discriminator: message.author.discriminator,
|
||||
display_name: message.member.displayName,
|
||||
colour: message.member.displayColor === 0 ? null : int2hex(message.member.displayColor),
|
||||
bot: message.author.bot
|
||||
let [m_row] = await this.client.db.models.UserEntity.findOrCreate({
|
||||
where: m_model_data,
|
||||
defaults: m_model_data
|
||||
});
|
||||
|
||||
// mentioned members
|
||||
message.mentions.members.forEach(async member => {
|
||||
let m_model_data = {
|
||||
user: member.user.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [m_row] = await this.client.db.models.UserEntity.findOrCreate({
|
||||
where: m_model_data,
|
||||
defaults: m_model_data
|
||||
});
|
||||
|
||||
await m_row.update({
|
||||
avatar: member.user.displayAvatarURL(),
|
||||
username: member.user.username,
|
||||
discriminator: member.user.discriminator,
|
||||
display_name: member.displayName,
|
||||
colour: member.displayColor === 0 ? null : int2hex(member.displayColor),
|
||||
bot: member.user.bot
|
||||
});
|
||||
await m_row.update({
|
||||
avatar: member.user.displayAvatarURL(),
|
||||
username: member.user.username,
|
||||
discriminator: member.user.discriminator,
|
||||
display_name: member.displayName,
|
||||
colour: member.displayColor === 0 ? null : int2hex(member.displayColor),
|
||||
bot: member.user.bot
|
||||
});
|
||||
});
|
||||
|
||||
// mentioned channels
|
||||
message.mentions.channels.forEach(async channel => {
|
||||
let c_model_data = {
|
||||
channel: channel.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [c_row] = await this.client.db.models.ChannelEntity.findOrCreate({
|
||||
where: c_model_data,
|
||||
defaults: c_model_data
|
||||
});
|
||||
await c_row.update({
|
||||
name: channel.name
|
||||
});
|
||||
// mentioned channels
|
||||
message.mentions.channels.forEach(async channel => {
|
||||
let c_model_data = {
|
||||
channel: channel.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [c_row] = await this.client.db.models.ChannelEntity.findOrCreate({
|
||||
where: c_model_data,
|
||||
defaults: c_model_data
|
||||
});
|
||||
await c_row.update({
|
||||
name: channel.name
|
||||
});
|
||||
});
|
||||
|
||||
// mentioned roles
|
||||
message.mentions.roles.forEach(async role => {
|
||||
let r_model_data = {
|
||||
role: role.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [r_row] = await this.client.db.models.RoleEntity.findOrCreate({
|
||||
where: r_model_data,
|
||||
defaults: r_model_data
|
||||
});
|
||||
await r_row.update({
|
||||
name: role.name,
|
||||
colour: role.color === 0 ? '7289DA' : int2hex(role.color) // 7289DA = 7506394
|
||||
});
|
||||
// mentioned roles
|
||||
message.mentions.roles.forEach(async role => {
|
||||
let r_model_data = {
|
||||
role: role.id,
|
||||
ticket: message.channel.id
|
||||
};
|
||||
let [r_row] = await this.client.db.models.RoleEntity.findOrCreate({
|
||||
where: r_model_data,
|
||||
defaults: r_model_data
|
||||
});
|
||||
}
|
||||
await r_row.update({
|
||||
name: role.name,
|
||||
colour: role.color === 0 ? '7289DA' : int2hex(role.color) // 7289DA = 7506394
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
@@ -75,6 +75,7 @@ module.exports = class TicketManager extends EventEmitter {
|
||||
});
|
||||
|
||||
this.emit('create', t_row.id, creator_id);
|
||||
return t_row;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,6 +145,7 @@ module.exports = class TicketManager extends EventEmitter {
|
||||
}
|
||||
|
||||
this.emit('close', ticket_id);
|
||||
return t_row;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user