forked from Galactic/galactic-bot
remind command
This commit is contained in:
parent
b1caa85631
commit
01155df6dd
112
src/structure/components/commands/utility/Remind.js
Normal file
112
src/structure/components/commands/utility/Remind.js
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
const { Util, FilterUtil } = require("../../../../utilities");
|
||||||
|
const { SlashCommand } = require("../../../interfaces");
|
||||||
|
|
||||||
|
class RemindCommand extends SlashCommand {
|
||||||
|
|
||||||
|
constructor(client) {
|
||||||
|
super(client, {
|
||||||
|
name: 'remind',
|
||||||
|
description: 'Set a reminder for yourself',
|
||||||
|
module: 'utility',
|
||||||
|
options: [{
|
||||||
|
name: 'create',
|
||||||
|
description: 'Create a new reminder',
|
||||||
|
type: 'SUB_COMMAND',
|
||||||
|
options: [ {
|
||||||
|
name: 'in',
|
||||||
|
description: 'In how long to trigger reminder',
|
||||||
|
type: 'TIME',
|
||||||
|
required: true
|
||||||
|
}, {
|
||||||
|
name: 'reminder',
|
||||||
|
description: 'Text to remind you with',
|
||||||
|
required: true
|
||||||
|
}],
|
||||||
|
showUsage: true
|
||||||
|
}, {
|
||||||
|
name: ['delete', 'list'],
|
||||||
|
description: ['Delete an existing reminder', 'List your reminders'],
|
||||||
|
type: 'SUB_COMMAND',
|
||||||
|
}],
|
||||||
|
// showUsage: true
|
||||||
|
guildOnly: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute(invoker, { reminder, in: time }) {
|
||||||
|
|
||||||
|
const { guild, author, channel, subcommand: { name: subcommand } } = invoker;
|
||||||
|
|
||||||
|
if (subcommand === 'create') {
|
||||||
|
const text = await this._filter(invoker, reminder.value);
|
||||||
|
// if(result) return { index: 'COMMAND_REMIND_CONTENT_FILTERED' };
|
||||||
|
await guild.createReminder(time.value, { reminder: text, user: author, channel });
|
||||||
|
return { index: 'COMMAND_REMIND_CONFIRM', params: { reminder: text, time: Util.humanise(time.value) } };
|
||||||
|
} else if (subcommand === 'delete') {
|
||||||
|
|
||||||
|
const reminders = guild.callbacks.filter((cb) => cb.data.user === author.id).map((val) => val);
|
||||||
|
const embed = this._remindersEmbed(reminders, guild);
|
||||||
|
const msg = await invoker.promptMessage(guild.format('COMMAND_REMIND_SELECT'), { embed });
|
||||||
|
await msg.delete();
|
||||||
|
|
||||||
|
const response = msg?.content;
|
||||||
|
if (!response) return invoker.editReply({ index: 'COMMAND_REMIND_DELETE_TIMEOUT', embeds: [] });
|
||||||
|
|
||||||
|
const index = parseInt(response);
|
||||||
|
if (isNaN(index)) return invoker.editReply({ index: 'COMMAND_REMIND_DELETE_INVALID_INDEX', embeds: [] });
|
||||||
|
if (index > reminders.length || index < 1) return invoker.editReply({ index: 'COMMAND_REMIND_DELETE_INDEX_OUTOFBOUNDS', embeds: [] });
|
||||||
|
|
||||||
|
const reminder = reminders[index - 1];
|
||||||
|
await guild.removeCallback(reminder.data.id);
|
||||||
|
return invoker.editReply({ index: 'COMMAND_REMIND_DELETED', emoji: 'success', embeds: [] });
|
||||||
|
|
||||||
|
} else if (subcommand === 'list') {
|
||||||
|
const reminders = guild.callbacks.filter((cb) => cb.data.user === author.id).map((val) => val);
|
||||||
|
if(!reminders.length) return guild.format('COMMAND_REMIND_NONE');
|
||||||
|
return { embed: this._remindersEmbed(reminders, guild) };
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_remindersEmbed(reminders, guild) {
|
||||||
|
const embed = {
|
||||||
|
title: guild.format('COMMAND_REMINDERS_TITLE'),
|
||||||
|
fields: []
|
||||||
|
};
|
||||||
|
let index = 0;
|
||||||
|
for (const reminder of reminders) {
|
||||||
|
const { data } = reminder;
|
||||||
|
embed.fields.push({
|
||||||
|
name: `${++index}`,
|
||||||
|
value: guild.format('COMMAND_REMIND_ENTRY', {
|
||||||
|
reminder: data.reminder,
|
||||||
|
channel: data.channel,
|
||||||
|
created: Math.floor(data.created/1000),
|
||||||
|
time: Math.floor((data.created + data.time)/1000)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return embed;
|
||||||
|
}
|
||||||
|
|
||||||
|
async _filter(invoker, text) {
|
||||||
|
const { guild, member } = invoker;
|
||||||
|
const settings = await guild.settings();
|
||||||
|
const { wordfilter: { enabled, explicit, fuzzy, regex, whitelist, bypass } } = settings;
|
||||||
|
|
||||||
|
if (!enabled) return text;
|
||||||
|
if (member.roles.cache.map((r) => r.id).some((r) => bypass.includes(r))) return text;
|
||||||
|
|
||||||
|
let result = FilterUtil.filterExplicit(text.split(' '), explicit);
|
||||||
|
if (result) return text.replace(result.match, '[FILTERED]');
|
||||||
|
result = FilterUtil.filterRegex(text, regex, whitelist);
|
||||||
|
if (result) return text.replace(result.match, '[FILTERED]');
|
||||||
|
result = FilterUtil.filterFuzzy(text.split(' '), fuzzy, whitelist);
|
||||||
|
if (result) return text.replace(result.match, '[FILTERED]');
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = RemindCommand;
|
Loading…
Reference in New Issue
Block a user