discore.js
Version:
Discord.js-based powerful node.js module to interact with Discord API.
84 lines (78 loc) • 2.54 kB
JavaScript
const Event = require('../structures/Event');
const reactionControl = class extends Event {
get options() {
return { key: 'raw' };
}
async run(event) {
try {
if (!this.client) return;
if (!event.t) return;
if (
!['MESSAGE_REACTION_ADD', 'MESSAGE_REACTION_REMOVE'].includes(event.t)
) {
return;
}
if (!event.d) return;
if (!event.d.message_id) return;
if (!this.client._private.sentPages.has(event.d.message_id)) return;
if (!event.d.channel_id) return;
if (!event.d.emoji) return;
if (!event.d.user_id) return;
if (event.d.user_id === this.client.user.id) return;
const user = this.client.users.resolve(event.d.user_id);
if (!user) return;
const emoji = event.d.emoji.id
? `${event.d.emoji.name}:${event.d.emoji.id}`
: event.d.emoji.name;
if (!emoji) return;
const channel = this.client.channels.resolve(event.d.channel_id);
if (!channel) return;
const pages = this.client._private.sentPages.get(event.d.message_id);
if (!pages) return;
const message = pages.message;
if (!message) return;
const reaction = message.reactions.resolve(emoji);
if (!reaction) return;
reaction.users.set(user.id, user);
if (pages.filter(reaction, user) !== true) return;
let type;
if (
(reaction.emoji.id || event.d.emoji.name) ===
pages.pages.emojis.prevPage
) {
type = 'prev';
} else if (
(reaction.emoji.id || event.d.emoji.name) ===
pages.pages.emojis.nextPage
) {
type = 'next';
}
if (!type) return;
if (type === 'prev' && pages.curPage < 1) return;
if (type === 'next' && pages.curPage >= pages.pages.pages.length - 1) {
return;
}
if (type === 'prev') pages.curPage -= 1;
if (type === 'next') pages.curPage += 1;
await message
.edit(pages.pages.pages[pages.curPage].msg)
.catch(e => this.client.emit('error', e));
this.client._private.sentPages.set(message.id, pages);
} catch (e) {}
}
};
const deleteControl = class extends Event {
get options() {
return {
key: 'messageDelete',
};
}
async run(message) {
if (!this.client) return;
if (!message) return;
if (!message.id) return;
if (!this.client._private.sentPages.has(message.id)) return;
this.client._private.sentPages.delete(message.id);
}
};
module.exports = [reactionControl, deleteControl];