JaBa/events/MessageHandler.js

163 lines
5 KiB
JavaScript
Raw Normal View History

const { PermissionsBitField, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
2023-06-06 22:48:46 +05:00
const BaseEvent = require("../base/BaseEvent");
const xpCooldown = {};
2022-01-04 02:18:28 +05:00
class MessageCreate extends BaseEvent {
constructor() {
super({
name: "messageCreate",
once: false,
});
2022-01-04 02:18:28 +05:00
}
/**
*
* @param {import("../base/JaBa")} client
* @param {import("discord.js").Message} message
*/
async execute(client, message) {
2022-02-15 01:26:29 +05:00
if (message.guild && message.guild.id === "568120814776614924") return;
2022-01-04 02:18:28 +05:00
const data = {};
2023-06-27 21:19:55 +05:00
2022-01-04 02:18:28 +05:00
if (message.author.bot) return;
2023-06-29 14:00:08 +05:00
if (message.content.match(new RegExp(`^<@!?${client.user.id}>( |)$`))) return message.replyT("misc:HELLO_SERVER", null, { mention: true });
2023-06-27 21:19:55 +05:00
const userData = await client.findOrCreateUser({ id: message.author.id });
data.userData = userData;
2022-01-04 02:18:28 +05:00
if (message.guild && !message.member) await message.guild.members.fetch(message.author.id);
if (message.guild) {
2023-10-15 15:05:10 +05:00
const guildData = await client.findOrCreateGuild(message.guildId);
2023-07-10 21:07:24 +05:00
const memberData = await client.findOrCreateMember({ id: message.author.id, guildId: message.guildId });
2023-06-29 14:00:08 +05:00
message.guild.data = data.guildData = guildData;
2022-01-04 02:18:28 +05:00
data.memberData = memberData;
2022-01-13 00:26:23 +05:00
}
2022-01-04 02:18:28 +05:00
if (message.guild) {
2023-06-27 21:19:55 +05:00
await updateXp(client, message, data.memberData);
2022-01-04 02:18:28 +05:00
2023-10-21 21:15:25 +05:00
if (message.content.match(/(https|http):\/\/(ptb\.|canary\.)?(discord.com)\/(channels)\/\d+\/\d+\/\d+/g)) {
2023-06-08 12:53:31 +05:00
const link = message.content.match(/(https|http):\/\/(ptb\.|canary\.)?(discord.com)\/(channels)\/\d+\/\d+\/\d+/g)[0],
2023-06-08 12:31:06 +05:00
ids = link.match(/\d+/g),
channelId = ids[1],
messageId = ids[2];
const msg = await client.channels.cache.get(channelId).messages.fetch(messageId);
const embed = new EmbedBuilder()
.setAuthor({
name: message.translate("misc:QUOTE_TITLE", {
user: msg.author.getUsername(),
}),
iconURL: "https://wynem.com/assets/images/icons/quote.webp",
})
2023-06-22 17:36:58 +05:00
.setThumbnail(msg.author.displayAvatarURL())
.setFooter({
text: message.translate("misc:QUOTE_FOOTER", { user: message.author.getUsername() }),
})
.setColor(client.config.embed.color)
.setTimestamp(msg.createdTimestamp);
2023-10-21 21:15:25 +05:00
if (msg.content !== "") embed.addFields([
{
name: message.translate("misc:QUOTE_CONTENT"),
value: msg.content,
},
]);
if (msg.attachments.size > 0) {
embed.addFields([
{
name: message.translate("misc:QUOTE_ATTACHED"),
value: msg.attachments.map(a => { return `[${a.name}](${a.url})`; }).join(", "),
},
]);
}
2023-07-05 00:58:06 +05:00
const row = new ActionRowBuilder().addComponents(
new ButtonBuilder().setLabel(message.translate("misc:QUOTE_JUMP")).setStyle(ButtonStyle.Link).setURL(msg.url),
new ButtonBuilder().setCustomId("quote_delete").setEmoji("1102200816582000750").setStyle(ButtonStyle.Danger),
);
2023-10-21 21:15:25 +05:00
await message.reply({
embeds: [embed],
components: [row],
});
const filter = i => i.user.id === message.author.id;
2023-07-05 00:58:06 +05:00
const collector = message.channel.createMessageComponentCollector({ filter, time: 60 * 1000 });
collector.on("collect", async i => {
2023-10-21 21:15:25 +05:00
if (i.isButton() && i.customId === "quote_delete") {
console.log(i.message);
if (i.message.deletable) i.message.delete();
}
});
}
if (data.guildData.plugins.automod.enabled && !data.guildData.plugins.automod.ignored.includes(message.channelId))
if (/(discord\.(gg|io|me|li)\/.+|discordapp\.com\/invite\/.+)/i.test(message.content))
if (!message.channel.permissionsFor(message.member).has(PermissionsBitField.Flags.ManageMessages)) {
2023-07-05 00:58:06 +05:00
await message.error("administration/automod:DELETED", null, { mention: true });
2023-06-17 00:44:47 +05:00
message.delete();
2022-01-13 00:26:23 +05:00
}
2022-01-04 02:18:28 +05:00
const afkReason = data.userData.afk;
if (afkReason) {
data.userData.afk = null;
2022-01-04 02:18:28 +05:00
await data.userData.save();
2023-07-03 19:30:47 +05:00
message.replyT("general/afk:DELETED", {
user: message.author.username,
2022-10-09 14:26:22 +05:00
}, { mention: true });
2022-01-13 00:26:23 +05:00
}
2022-01-04 02:18:28 +05:00
2023-07-02 21:02:55 +05:00
message.mentions.users.forEach(async u => {
2023-07-05 00:58:06 +05:00
const userData = await client.findOrCreateUser({ id: u.id });
2023-07-02 21:02:55 +05:00
if (userData.afk) message.replyT("general/afk:IS_AFK", { user: u.getUsername(), reason: userData.afk }, { ephemeral: true });
2022-01-04 02:18:28 +05:00
});
2022-01-13 00:26:23 +05:00
}
return;
2022-01-04 02:18:28 +05:00
}
}
2022-01-04 02:18:28 +05:00
/**
*
* @param {import("../base/JaBa")} client
* @param {import("discord.js").Message} msg
2023-06-27 21:19:55 +05:00
* @param {import("../base/Member")} memberData
* @returns
*/
2023-06-27 21:19:55 +05:00
async function updateXp(client, msg, memberData) {
const points = parseInt(memberData.exp),
level = parseInt(memberData.level),
isInCooldown = xpCooldown[msg.author.id];
2023-07-05 00:58:06 +05:00
if (isInCooldown) if (isInCooldown > Date.now()) return;
2022-01-04 02:18:28 +05:00
2023-07-05 00:58:06 +05:00
const toWait = Date.now() + 60 * 1000; // 1 min
2022-01-04 02:18:28 +05:00
xpCooldown[msg.author.id] = toWait;
const won = client.functions.randomNum(1, 2);
2022-01-04 02:18:28 +05:00
const newXp = parseInt(points + won, 10);
const neededXp = 5 * (level * level) + 80 * level + 100;
if (newXp > neededXp) {
2023-06-27 21:19:55 +05:00
memberData.level = parseInt(level + 1, 10);
memberData.exp = 0;
msg.replyT("misc:LEVEL_UP", {
2023-06-27 21:19:55 +05:00
level: memberData.level,
}, { mention: false });
2023-06-27 21:19:55 +05:00
} else memberData.exp = parseInt(newXp, 10);
2022-01-04 02:18:28 +05:00
2023-06-27 21:19:55 +05:00
await memberData.save();
}
2023-07-05 00:58:06 +05:00
module.exports = MessageCreate;