Zonies-Bot/functions/messageCollector.js
2025-05-12 12:57:59 -05:00

72 lines
3.6 KiB
JavaScript

const Embed = require("../functions/embed");
async function Collector(client, message, db) {
const regex = /{role:(.*?)}/;
const regexAll = /{role:(.*?)}/g;
const collector = client.messageCollector.get(message.authorId);
if (!message.content.match(regexAll) || message.content.match(regexAll)?.length === 0) {
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(`${client.translate.get(db.language, "Events.messageCreate.noRoles")}: \`{role:Red}\``)] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
const roles = message.content.match(regexAll).map((r) => r?.match(regex)[1]);
if (roles.length > 20) {
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(client.translate.get(db.language, "Events.messageCreate.maxRoles"))] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
collector.regex = roles
const roleIds = []
let newRoles = roles.map((r) => {
return [...message.server.roles].map((r) => r).find((role) => r.toLowerCase() === role[1]?.name?.toLowerCase());
})
newRoles.map((r) => roleIds.push(r));
if (roleIds.map((r) => !r).includes(true)) {
let unknown = [];
roleIds.map((r, i) => {
i++
if (!r) {
unknown.push(roles[i - 1]);
}
});
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(`${client.translate.get(db.language, "Events.messageCreate.unknown")}\n${unknown.map(e => `\`{role:${e}}\``).join(", ")}`)] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
let duplicate = [];
roleIds.map((r, i) => {
i++
if (roleIds.filter(e => e[0] === r[0]).length > 1) duplicate.push(roleIds[i - 1]);
});
if (duplicate.length > 0) {
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(`${client.translate.get(db.language, "Events.messageCreate.duplicate")}\n${duplicate.map(e => `\`{role:${e[1].name}}\``)}`)] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
let positions = [];
const botRole = message.channel.server.member.orderedRoles.reverse()[0]
if (!botRole) {
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(client.translate.get(db.language, "Events.messageCreate.noBotRole"))] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
roleIds.map((r, i) => {
i++
if (r[1].rank <= botRole.rank) positions.push(roleIds[i - 1])
});
if (positions.length > 0) {
message.reply({ embeds: [new Embed().setColor("#FF0000").setDescription(`${client.translate.get(db.language, "Events.messageCreate.positions")}\n${positions.map(e => `\`{role:${e[1].name}}\``)}`)] }, false).catch(() => { return });
return message.react(client.config.emojis.cross).catch(() => { return });
}
message.delete().catch(() => { });
collector.roles = roleIds;
const react = [client.config.emojis.check];
return message.channel.sendMessage(collector.type === "content" ? { content: message.content, interactions: [react] } : { embeds: [new Embed().setDescription(message.content).setColor("#A52F05")], interactions: [react] }).then((msg) => {
collector.messageId = msg.id;
});
}
module.exports = Collector;