136 lines
3.8 KiB
JavaScript
136 lines
3.8 KiB
JavaScript
const { EmbedBuilder } = require("discord.js");
|
|
const emojiRegex = require("emoji-regex");
|
|
const irregularsRegex = require("../util/irregularsRegex.js");
|
|
const irregulars = require("../util/irregulars.json");
|
|
const fs = require("fs");
|
|
|
|
const getEmojis = (message) => {
|
|
const { content } = message;
|
|
const result = [];
|
|
// Normal emojis
|
|
const normalEmojis = content.match(emojiRegex());
|
|
if (normalEmojis) {
|
|
// for (const emoji of normalEmojis) {
|
|
normalEmojis.forEach((emoji) => {
|
|
result.push(emoji);
|
|
});
|
|
}
|
|
// Text emojis e.g ♥ ✂ 🗨
|
|
const textEmojis = content.match(irregularsRegex());
|
|
if (textEmojis) {
|
|
textEmojis.forEach((emoji) => {
|
|
result.push(irregulars[emoji.trim()]);
|
|
});
|
|
}
|
|
// Guild emojis
|
|
let guildEmojis = content.match(/:[_a-zA-Z0-9]*>/g);
|
|
if (guildEmojis) {
|
|
guildEmojis = guildEmojis.map((e) => e.substring(1, e.length - 1));
|
|
guildEmojis.forEach((e) => {
|
|
try {
|
|
const guildEmoji = message.guild.emojis.get(e);
|
|
if (guildEmoji) {
|
|
result.push(guildEmoji);
|
|
}
|
|
} catch (error) {
|
|
console.log(error);
|
|
console.log("tried using guild emote lmao");
|
|
}
|
|
});
|
|
}
|
|
// Attempt to sort the results if its not null
|
|
if (result) {
|
|
const query = message.content;
|
|
result.sort((a, b) => {
|
|
const irregularA = getKeyByValue(irregulars, a);
|
|
const irregularB = getKeyByValue(irregulars, b);
|
|
const index1 = irregularA || a;
|
|
const index2 = irregularB || b;
|
|
return query.indexOf(index1) - query.indexOf(index2);
|
|
});
|
|
}
|
|
return result;
|
|
};
|
|
|
|
let collectors = [];
|
|
|
|
const whitelist = ["440163494529073152", "436321340304392222"];
|
|
|
|
module.exports = {
|
|
name: "createreactionrole",
|
|
description: "creates reaction role, requires whitelist",
|
|
execute(message, args) {
|
|
if (whitelist.includes(message.author.id)) {
|
|
let emojis = getEmojis(message);
|
|
let emoji = emojis[0];
|
|
let role = message.mentions.roles.first();
|
|
if (!role) {
|
|
console.log("role variable missing");
|
|
fs.appendFileSync(
|
|
"../pepperbot/src/logs/failed.log",
|
|
"role variable missing" +
|
|
"from: " +
|
|
message.content +
|
|
" at " +
|
|
Date() +
|
|
"\n"
|
|
);
|
|
return;
|
|
}
|
|
if (!emoji) {
|
|
console.log("emoji variable missing");
|
|
fs.appendFileSync(
|
|
"../pepperbot/src/logs/failed.log",
|
|
" emoji variable missing" +
|
|
"from: " +
|
|
message.content +
|
|
" at " +
|
|
Date() +
|
|
"\n"
|
|
);
|
|
return;
|
|
}
|
|
|
|
const embed = new EmbedBuilder();
|
|
|
|
embed.setThumbnail(
|
|
"https://cdn.discordapp.com/attachments/755150633191080073/1149152214850469908/Map_Icon.png"
|
|
);
|
|
embed.setColor(0xff0000);
|
|
|
|
embed.setTitle(role.name);
|
|
embed.setDescription(
|
|
"React with " + emoji + " to recieve the " + role.name + " role."
|
|
);
|
|
|
|
message.channel.send({ embeds: [embed] }).then((m) => m.react(emoji));
|
|
|
|
const collectorFilter = function (reaction) {
|
|
return true;
|
|
};
|
|
|
|
const collector = message.createReactionCollector({
|
|
filter: collectorFilter,
|
|
});
|
|
collectors.push(collector);
|
|
|
|
collector.on("collect", (reaction, user) => {
|
|
console.log(`Collected ${reaction.emoji.name} from ${user.tag}`);
|
|
});
|
|
} else {
|
|
message.reply("UNAUTHORIZED");
|
|
const path = require("path");
|
|
const scriptName = path.basename(__filename);
|
|
fs.appendFileSync(
|
|
"../pepperbot/src/logs/failed.log",
|
|
"non whitelisted user " +
|
|
message.author.username +
|
|
" (" +
|
|
message.author +
|
|
") attempted accessing " +
|
|
scriptName +
|
|
"\n"
|
|
);
|
|
}
|
|
},
|
|
};
|