Discord-Bot/src/events/message/messageCreate.js
2022-12-09 19:54:59 +01:00

442 lines
13 KiB
JavaScript

const Discord = require("discord.js");
const Functions = require("../../database/models/functions");
const afk = require("../../database/models/afk");
const chatBotSchema = require("../../database/models/chatbot-channel");
const messagesSchema = require("../../database/models/messages");
const messageSchema = require("../../database/models/levelMessages");
const messageRewards = require("../../database/models/messageRewards");
const Schema = require("../../database/models/stickymessages");
const levelRewards = require("../../database/models/levelRewards");
const levelLogs = require("../../database/models/levelChannels");
const Commands = require("../../database/models/customCommand");
const CommandsSchema = require("../../database/models/customCommandAdvanced");
module.exports = async (client, message) => {
const dmlog = new Discord.WebhookClient({
id: client.webhooks.dmLogs.id,
token: client.webhooks.dmLogs.token,
});
if (message.author.bot) return;
if (message.channel.type === "DM") {
let embedLogs = new Discord.EmbedBuilder()
.setTitle(`💬・New DM message!`)
.setDescription(`Bot has received a new DM message!`)
.addField("👤┆Send By", `${message.author} (${message.author.tag})`, true)
.addField(`💬┆Message`, `${message.content || "None"}`, true)
.setColor(client.config.colors.normal)
.setTimestamp();
if (message.attachments.size > 0)
embedLogs.addField(
`📃┆Attachments`,
`${message.attachments.first()?.url}`,
false
);
return dmlog.send({
username: "Bot DM",
embeds: [embedLogs],
});
}
// Levels
Functions.findOne({ Guild: message.guild.id }, async (err, data) => {
if (data) {
if (data.Levels == true) {
const randomXP = Math.floor(Math.random() * 9) + 1;
const hasLeveledUp = await client.addXP(
message.author.id,
message.guild.id,
randomXP
);
if (hasLeveledUp) {
const user = await client.fetchLevels(
message.author.id,
message.guild.id
);
const levelData = await levelLogs.findOne({
Guild: message.guild.id,
});
const messageData = await messageSchema.findOne({
Guild: message.guild.id,
});
if (messageData) {
var levelMessage = messageData.Message;
levelMessage = levelMessage.replace(
`{user:username}`,
message.author.username
);
levelMessage = levelMessage.replace(
`{user:discriminator}`,
message.author.discriminator
);
levelMessage = levelMessage.replace(
`{user:tag}`,
message.author.tag
);
levelMessage = levelMessage.replace(
`{user:mention}`,
message.author
);
levelMessage = levelMessage.replace(`{user:level}`, user.level);
levelMessage = levelMessage.replace(`{user:xp}`, user.xp);
try {
if (levelData) {
await client.channels.cache
.get(levelData.Channel)
.send({ content: levelMessage })
.catch(() => {});
} else {
await message.channel.send({ content: levelMessage });
}
} catch {
await message.channel.send({ content: levelMessage });
}
} else {
try {
if (levelData) {
await client.channels.cache
.get(levelData.Channel)
.send({
content: `**GG** <@!${message.author.id}>, you are now level **${user.level}**`,
})
.catch(() => {});
} else {
message.channel.send({
content: `**GG** <@!${message.author.id}>, you are now level **${user.level}**`,
});
}
} catch {
message.channel.send({
content: `**GG** <@!${message.author.id}>, you are now level **${user.level}**`,
});
}
}
levelRewards.findOne(
{ Guild: message.guild.id, Level: user.level },
async (err, data) => {
if (data) {
message.guild.members.cache
.get(message.author.id)
.roles.add(data.Role)
.catch((e) => {});
}
}
);
}
}
}
});
// Message tracker system
messagesSchema.findOne(
{ Guild: message.guild.id, User: message.author.id },
async (err, data) => {
if (data) {
data.Messages += 1;
data.save();
messageRewards.findOne(
{ Guild: message.guild.id, Messages: data.Messages },
async (err, data) => {
if (data) {
try {
message.guild.members.cache
.get(message.author.id)
.roles.add(data.Role);
} catch {}
}
}
);
} else {
new messagesSchema({
Guild: message.guild.id,
User: message.author.id,
Messages: 1,
}).save();
}
}
);
// AFK system
afk.findOne(
{ Guild: message.guild.id, User: message.author.id },
async (err, data) => {
if (data) {
await afk.deleteOne({
Guild: message.guild.id,
User: message.author.id,
});
client
.simpleEmbed(
{
desc: `${message.author} is no longer afk!`,
},
message.channel
)
.then(async (m) => {
setTimeout(() => {
m.delete();
}, 5000);
});
if (message.member.displayName.startsWith(`[AFK] `)) {
let name = message.member.displayName.replace(`[AFK] `, ``);
message.member.setNickname(name).catch((e) => {});
}
}
}
);
message.mentions.users.forEach(async (u) => {
if (
!message.content.includes("@here") &&
!message.content.includes("@everyone")
) {
afk.findOne(
{ Guild: message.guild.id, User: u.id },
async (err, data) => {
if (data) {
client.simpleEmbed(
{ desc: `${u} is currently afk! **Reason:** ${data.Message}` },
message.channel
);
}
}
);
}
});
// Chat bot
chatBotSchema.findOne({ Guild: message.guild.id }, async (err, data) => {
if (!data) return;
if (message.channel.id !== data.Channel) return;
try {
const input = message;
try {
fetch(
`https://api.monkedev.com/fun/chat?msg=${encodeURIComponent(input)}`
)
.catch(() => {})
.then((res) => res.json())
.catch(() => {})
.then(async (json) => {
if (json) {
if (
json.response !== " " ||
json.response !== undefined ||
json.response !== "" ||
json.response !== null
) {
try {
return message
.reply({ content: json.response })
.catch(() => {});
} catch {}
}
}
})
.catch(() => {});
} catch {}
} catch {}
});
// Sticky messages
try {
Schema.findOne(
{ Guild: message.guild.id, Channel: message.channel.id },
async (err, data) => {
if (!data) return;
const lastStickyMessage = await message.channel.messages
.fetch(data.LastMessage)
.catch(() => {});
if (!lastStickyMessage) return;
await lastStickyMessage.delete({ timeout: 1000 });
const newMessage = await client.simpleEmbed(
{ desc: `${data.Content}` },
message.channel
);
data.LastMessage = newMessage.id;
data.save();
}
);
} catch {}
// Prefix
var guildSettings = await Functions.findOne({ Guild: message.guild.id });
if (!guildSettings) {
new Functions({
Guild: message.guild.id,
Prefix: client.config.discord.prefix,
}).save();
guildSettings = await Functions.findOne({ Guild: message.guild.id });
}
if (!guildSettings || !guildSettings.Prefix) {
Functions.findOne({ Guild: message.guild.id }, async (err, data) => {
data.Prefix = client.config.discord.prefix;
data.save();
});
guildSettings = await Functions.findOne({ Guild: message.guild.id });
}
if (!guildSettings || !guildSettings.Prefix) {
var prefix = client.config.Discord.prefix;
} else {
var prefix = guildSettings.Prefix;
}
const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const prefixRegex = new RegExp(
`^(<@!?${client.user.id}>|${escapeRegex(prefix)})\\s*`
);
if (!prefixRegex.test(message.content.toLowerCase())) return;
const [, matchedPrefix] = message.content.toLowerCase().match(prefixRegex);
const args = message.content.slice(matchedPrefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
if (
message.mentions.users.first() &&
message.mentions.users.first().id == client.user.id &&
command.length === 0
) {
let row = new Discord.MessageActionRow().addComponents(
new Discord.MessageButton()
.setLabel("Invite")
.setURL(
"https://discord.com/oauth2/authorize?&client_id=798144456528363550&scope=applications.commands+bot&permissions=8"
)
.setStyle("LINK"),
new Discord.MessageButton()
.setLabel("Support server")
.setURL("https://discord.gg/56FZySQaY7")
.setStyle("LINK")
);
client
.embed(
{
title: "Hi, i'm Bot",
desc: `Use with commands via Discord ${client.emotes.normal.slash} commands`,
fields: [
{
name: "📢┆Alert!",
value: 'After more than 1 year we decided to stop Bot on April 15th, for more information go to [this server](https://discord.gg/techpoint)',
inline: false,
},
{
name: "📨┆Invite me",
value: `Invite Bot in your own server! [Click here](${client.config.discord.botInvite})`,
},
{
name: "❓┇I don't see any slash commands",
value:
"The bot may not have permissions for this. Open the invite link again and select your server. The bot then gets the correct permissions",
},
{
name: "❓┆Need support?",
value: `For questions you can join our [support server](${client.config.discord.serverInvite})!`,
},
{
name: "🐞┆Found a bug?",
value: `Report all bugs via: \`/report bug\`!`,
},
],
components: [row],
},
message.channel
)
.catch(() => {});
}
const cmd = await Commands.findOne({
Guild: message.guild.id,
Name: command,
});
if (cmd) {
return message.channel.send({ content: cmdx.Responce });
}
const cmdx = await CommandsSchema.findOne({
Guild: message.guild.id,
Name: command,
});
if (cmdx) {
if (cmdx.Action == "Normal") {
return message.channel.send({ content: cmdx.Responce });
} else if (cmdx.Action == "Embed") {
return client.simpleEmbed(
{
desc: `${cmdx.Responce}`,
},
message.channel
);
} else if (cmdx.Action == "DM") {
return message.author.send({ content: cmdx.Responce }).catch((e) => {
client.errNormal(
{
error: "I can't DM you, maybe you have DM turned off!",
},
message.channel
);
});
}
}
if (command) {
let row = new Discord.MessageActionRow().addComponents(
new Discord.MessageButton()
.setLabel("Invite")
.setURL(
"https://discord.com/oauth2/authorize?&client_id=798144456528363550&scope=applications.commands+bot&permissions=8"
)
.setStyle("LINK"),
new Discord.MessageButton()
.setLabel("Support server")
.setURL("https://discord.gg/56FZySQaY7")
.setStyle("LINK")
);
client.embed(
{
title: "👋・Hi, i'm Bot",
desc: `Bot is now completely in ${client.emotes.normal.slash} commands. The current message commands have expired! Try our new improved commands and make your server better with Bot!`,
fields: [
{
name: "📢┇Alert!",
value: 'After more than 1 year we decided to stop Bot on April 15th, for more information go to [this server](https://discord.gg/techpoint)',
inline: false,
},
{
name: "❓┇I don't see any slash commands",
value:
"The bot may not have permissions for this. Open the invite link again and select your server. The bot then gets the correct permissions",
},
],
components: [row],
},
message.channel
);
}
};