diff options
Diffstat (limited to 'bot/src')
| -rw-r--r-- | bot/src/bot.js | 2 | ||||
| -rw-r--r-- | bot/src/commands/quote.js | 2 | ||||
| -rw-r--r-- | bot/src/commands/serverinfo.js | 15 | ||||
| -rw-r--r-- | bot/src/commands/settings.js | 2 | ||||
| -rw-r--r-- | bot/src/commands/suggest.js | 46 | ||||
| -rw-r--r-- | bot/src/commands/userinfo.js | 14 | ||||
| -rw-r--r-- | bot/src/events/GuildBanAdd.js | 21 | ||||
| -rw-r--r-- | bot/src/events/GuildBanRemove.js | 16 | ||||
| -rw-r--r-- | bot/src/events/GuildCreate.js | 2 | ||||
| -rw-r--r-- | bot/src/events/GuildDelete.js | 2 | ||||
| -rw-r--r-- | bot/src/events/GuildMemberAdd.js | 4 | ||||
| -rw-r--r-- | bot/src/events/GuildMemberRemove.js | 4 | ||||
| -rw-r--r-- | bot/src/events/MessageBulkDelete.js | 32 | ||||
| -rw-r--r-- | bot/src/events/MessageDelete.js | 6 | ||||
| -rw-r--r-- | bot/src/events/MessageUpdate.js | 6 |
15 files changed, 126 insertions, 48 deletions
diff --git a/bot/src/bot.js b/bot/src/bot.js index 3236817..91c26c8 100644 --- a/bot/src/bot.js +++ b/bot/src/bot.js @@ -1,7 +1,7 @@ import { Client, GatewayIntentBits } from 'discord.js'; import 'dotenv/config'; import { init } from './init.js'; -const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildBans ] }); +const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildBans] }); init(client); diff --git a/bot/src/commands/quote.js b/bot/src/commands/quote.js index 3ae1de3..5e5ae5b 100644 --- a/bot/src/commands/quote.js +++ b/bot/src/commands/quote.js @@ -110,6 +110,8 @@ export default { if (!quoteID) { const quoteList = await quoteDB.findAll({ attributes: ['id'] }); const random = crypto.getRandomValues(new Uint32Array(1)); + + if (quoteList.length === 0) return await interaction.reply({ content: 'No quotes are currently in the database. You can add one by doing `/quote add`.', flags: MessageFlags.Ephemeral }); quoteID = quoteList[random[0] % quoteList.length].id; } diff --git a/bot/src/commands/serverinfo.js b/bot/src/commands/serverinfo.js index 01b39e8..480087d 100644 --- a/bot/src/commands/serverinfo.js +++ b/bot/src/commands/serverinfo.js @@ -6,25 +6,26 @@ export default { .setName('serverinfo') .setDescription('Information about this server.'), async execute(interaction) { - // const listedChannels = []; + // let listedChannels = []; let guildOwner = await interaction.guild.fetchOwner(); let memberCountNoBots = await interaction.guild.members.fetch().then((members) => members.filter(member => !member.user.bot).size); + // interaction.guild.channels.cache.each(channel => { + // listedChannels.push(channel); + // }); + const serverEmbed = new EmbedBuilder() .setAuthor({ name: `${interaction.guild.name}`, iconURL: interaction.guild.iconURL() }) .setDescription('Server Information') .setThumbnail(interaction.guild.iconURL()) .addFields( - { name: 'Main Information', value: `**Server Name:** ${interaction.guild.name}\n**Server ID:** ${interaction.guild.id}\n**Server Owner:** ${guildOwner.user.tag}`}, + { name: 'Main Information', value: `**Server Name:** ${interaction.guild.name}\n**Server ID:** ${interaction.guild.id}\n**Server Owner:** ${guildOwner.user.username}`}, { name: 'Join Dates', value: `**Created At:** ${interaction.guild.createdAt.toUTCString()}\n**AleeBot Joined:** ${interaction.guild.joinedAt.toUTCString()}`}, + { name: 'Total Channels (without threads)', value: `${interaction.guild.channels.channelCountWithoutThreads}` }, + // { name: 'Channels', value: listedChannels.join(' ') }, { name: 'Total Members (with bots)', value: `${interaction.guild.memberCount}` }, { name: 'Total Members (without bots)', value: `${memberCountNoBots}` } ) - /*message.guild.channels.cacheType.forEach(channel => { - listedChannels.push(channel) - })*/ - //.addField('Channels', `${listedChannels.join('\n')}`) - //.addField('Total Channels', message.guild.channelCountMode) .setColor(abEmbedColour); return await interaction.reply({ embeds: [serverEmbed] }); } diff --git a/bot/src/commands/settings.js b/bot/src/commands/settings.js index 5fdf0cd..88e108d 100644 --- a/bot/src/commands/settings.js +++ b/bot/src/commands/settings.js @@ -115,8 +115,8 @@ export default { const logSetting = await guildSettings.findOne({ where: { guildID: interaction.guild.id } }); guildEmbed.spliceFields(0, 1, { name: 'Logging', value: logSetting?.logChannelID ? `<#${logSetting.logChannelID}>` : 'N/A', inline: true }); - await interaction.editReply({ embeds: [guildEmbed], components: [row] }); + await interaction.deleteReply(); } diff --git a/bot/src/commands/suggest.js b/bot/src/commands/suggest.js index e4bed85..7bb91e2 100644 --- a/bot/src/commands/suggest.js +++ b/bot/src/commands/suggest.js @@ -8,6 +8,7 @@ import { EmbedBuilder } from 'discord.js'; import { abEmbedColour, featureSuggestChannel } from '../storage/consts.js'; +import { guildSettings } from '../models/guild-settings.js'; export default { data: new SlashCommandBuilder() @@ -50,7 +51,7 @@ export default { new EmbedBuilder() .setTitle('AleeBot Feature Suggestion') .setDescription(`This is an AleeBot feature suggested from ${modalInteraction.user.username}.`) - .addFields({ name: 'Suggestion Contents', value: feature }) + .addFields({ name: 'Suggestion Content', value: feature }) .setColor(abEmbedColour) .setFooter({ text: `Sending from ${modalInteraction.guild.name}`, iconURL: modalInteraction.guild.iconURL() }) ]}); @@ -62,5 +63,48 @@ export default { }); } + + if (interaction.options.getSubcommand() === 'guild') { + const guildSetting = await guildSettings.findOne({ where: { guildID: interaction.guild.id } }); + if (!guildSetting || !guildSetting.suggestionsChannelID) return await interaction.reply({ content: 'This server did not configure to have suggestions enabled.' }); + + const modal = new ModalBuilder() + .setCustomId(`suggest-${interaction.user.id}`) + .setTitle(`Suggestion for ${interaction.guild.name}`); + + const featureText = new TextInputBuilder() + .setCustomId('feature') + .setLabel('Suggestion') + .setMaxLength(200) + .setPlaceholder('Feature') + .setStyle(TextInputStyle.Paragraph); + + const firstActionRow = new ActionRowBuilder().addComponents(featureText); + + modal.addComponents(firstActionRow); + + await interaction.showModal(modal); + + const filter = (interaction) => interaction.customId === `suggest-${interaction.user.id}`; + + interaction.awaitModalSubmit({ filter, time: 1000 * 1200 }) + .then(async (modalInteraction) => { + const feature = modalInteraction.fields.getTextInputValue('feature'); + + modalInteraction.client.channels.cache.get(guildSetting.suggestionsChannelID).send({ embeds: [ + new EmbedBuilder() + .setTitle('Suggestion') + .setDescription(`This is a suggestion from ${interaction.user.username}.`) + .addFields({ name: 'Suggestion Content', value: feature }) + .setColor(abEmbedColour) + ]}); + + return await modalInteraction.reply({content: 'Your suggestion has been sent.', flags: MessageFlags.Ephemeral}); + }) + .catch((err) => { + console.error(err); + }); + + } } }; diff --git a/bot/src/commands/userinfo.js b/bot/src/commands/userinfo.js index c079661..0cf7332 100644 --- a/bot/src/commands/userinfo.js +++ b/bot/src/commands/userinfo.js @@ -10,16 +10,16 @@ export default { .setName('username') .setDescription('The user to get the information of')), async execute(interaction) { - const username = interaction.options.getUser('username') || interaction.user; - const member = interaction.guild.members.cache.get(username.id); + const user = interaction.options.getUser('username') || interaction.user; + const member = interaction.guild.members.cache.get(user.id); const userEmbed = new EmbedBuilder() - .setAuthor({ name: username.tag, iconURL: username.avatarURL() }) + .setAuthor({ name: user.username, iconURL: user.avatarURL() }) .setDescription('User Information') - .setThumbnail(username.avatarURL()) + .setThumbnail(user.avatarURL()) .addFields( - { name: 'Names', value: `**Display Name:** ${member.displayName}\n**Username:** ${username.username}`}, - { name: 'Identity', value: `**User ID:** ${username.id}` }, - { name: 'Create and Join Times', value: `**Created At:** ${username.createdAt.toUTCString()}\n**Joined Guild At:** ${member.joinedAt.toUTCString()}`} + { name: 'Names', value: `**Display Name:** ${member.displayName}\n**Username:** ${user.username}`}, + { name: 'Identity', value: `**User ID:** ${user.id}` }, + { name: 'Create and Join Times', value: `**Created At:** ${user.createdAt.toUTCString()}\n**Joined Guild At:** ${member.joinedAt.toUTCString()}`} ) .setColor(abEmbedColour); return await interaction.reply({ embeds: [userEmbed] }); diff --git a/bot/src/events/GuildBanAdd.js b/bot/src/events/GuildBanAdd.js index e68701d..54afc12 100644 --- a/bot/src/events/GuildBanAdd.js +++ b/bot/src/events/GuildBanAdd.js @@ -3,32 +3,31 @@ import { guildSettings } from '../models/guild-settings.js'; export default { name: Events.GuildBanAdd, - async execute(guild, user) { + async execute(ban) { + const guildSetting = await guildSettings.findOne({ where: { guildID: ban.guild.id } }); + if (!guildSetting || !guildSetting.logChannelID) return; - const banLog = await guild.fetchAuditLogs({ + const banLog = await ban.guild.fetchAuditLogs({ type: AuditLogEvent.MemberBanAdd, limit: 1, }); const banEntry = banLog.entries.first(); - const guildSetting = await guildSettings.findOne({ where: { guildID: guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; - const logEmbed = new EmbedBuilder() - .setAuthor({ name: 'AleeBot Logging', iconURL: guild.client.user.avatarURL() }) - .setDescription(`This user got banned from ${guild.name}`) + .setAuthor({ name: 'AleeBot Logging', iconURL: ban.guild.client.user.avatarURL() }) + .setDescription('This user got banned from this server.') .addFields( - { name: 'User:', value: `${user.tag}` }, - { name: 'User ID:', value: `${user.id}`}, + { name: 'User:', value: `${ban.user.username}` }, + { name: 'User ID:', value: `${ban.user.id}`}, { name: 'Reason:', value: `${banEntry.reason || 'No reason provided'}` } ) .setColor('#ff021b') .setTimestamp(); - let banMessage = guild.client.channels.cache.get(guildSetting.logChannelID); + let banMessage = ban.guild.client.channels.cache.get(guildSetting.logChannelID); if (!banMessage) return; - await banMessage.send({ embeds: [logEmbed]}); + await banMessage.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/GuildBanRemove.js b/bot/src/events/GuildBanRemove.js index 5b2e22c..1d6ac2a 100644 --- a/bot/src/events/GuildBanRemove.js +++ b/bot/src/events/GuildBanRemove.js @@ -3,23 +3,23 @@ import { guildSettings } from '../models/guild-settings.js'; export default { name: Events.GuildBanRemove, - async execute(guild, user) { - const guildSetting = await guildSettings.findOne({ where: { guildID: guild.id } }); + async execute(ban) { + const guildSetting = await guildSettings.findOne({ where: { guildID: ban.guild.id } }); if (!guildSetting || !guildSetting.logChannelID) return; const logEmbed = new EmbedBuilder() - .setAuthor({ name: 'AleeBot Logging', iconURL: guild.client.user.avatarURL() }) - .setDescription(`This user got unbanned from ${guild.name}`) + .setAuthor({ name: 'AleeBot Logging', iconURL: ban.guild.client.user.avatarURL() }) + .setDescription('This user got unbanned from this server.') .addFields( - { name: 'User:', value: `${user.tag}` }, - { name: 'User ID:', value: `${user.id}`} + { name: 'User:', value: `${ban.user.username}` }, + { name: 'User ID:', value: `${ban.user.id}`} ) .setColor('#ff021b') .setTimestamp(); - let banMessage = guild.client.channels.cache.get(guildSetting.logChannelID); + let banMessage = ban.guild.client.channels.cache.get(guildSetting.logChannelID); if (!banMessage) return; - await banMessage.send({ embeds: [logEmbed]}); + await banMessage.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/GuildCreate.js b/bot/src/events/GuildCreate.js index 4d73f08..0c59bb1 100644 --- a/bot/src/events/GuildCreate.js +++ b/bot/src/events/GuildCreate.js @@ -21,6 +21,6 @@ export default { let statusChannel = guild.client.channels.cache.get(process.env.statusChannelID); if (!statusChannel) return; - await statusChannel.send({ embeds: [logEmbed]}); + await statusChannel.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/GuildDelete.js b/bot/src/events/GuildDelete.js index 5ca1cbe..63c3c5b 100644 --- a/bot/src/events/GuildDelete.js +++ b/bot/src/events/GuildDelete.js @@ -24,6 +24,6 @@ export default { let statusChannel = guild.client.channels.cache.get(process.env.statusChannelID); if (!statusChannel) return; - await statusChannel.send({ embeds: [logEmbed]}); + await statusChannel.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/GuildMemberAdd.js b/bot/src/events/GuildMemberAdd.js index 4b39d6d..783b29e 100644 --- a/bot/src/events/GuildMemberAdd.js +++ b/bot/src/events/GuildMemberAdd.js @@ -11,7 +11,7 @@ export default { .setAuthor({ name: 'AleeBot Logging', iconURL: member.client.user.avatarURL() }) .setDescription('A user has joined this server!') .addFields( - { name: 'Username: ', value: `${member.user.tag}`, inline: true }, + { name: 'Username: ', value: `${member.user}`, inline: true }, { name: 'User ID: ', value: `${member.id}`, inline: true }, { name: 'Created At: ', value: `${member.user.createdAt.toUTCString()}`} ) @@ -21,6 +21,6 @@ export default { let guildMember = member.client.channels.cache.get(guildSetting.logChannelID); if (!guildMember) return; - await guildMember.send({ embeds: [logEmbed]}); + await guildMember.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/GuildMemberRemove.js b/bot/src/events/GuildMemberRemove.js index aa109b1..c031211 100644 --- a/bot/src/events/GuildMemberRemove.js +++ b/bot/src/events/GuildMemberRemove.js @@ -11,7 +11,7 @@ export default { .setAuthor({ name: 'AleeBot Logging', iconURL: member.client.user.avatarURL() }) .setDescription('A user has left this server!') .addFields( - { name: 'Username: ', value: `${member.user.tag}`, inline: true }, + { name: 'Username: ', value: `${member.user.username}`, inline: true }, { name: 'User ID: ', value: `${member.id}`, inline: true }, ) .setColor('#ec2727') @@ -20,6 +20,6 @@ export default { let guildMember = member.client.channels.cache.get(guildSetting.logChannelID); if (!guildMember) return; - await guildMember.send({ embeds: [logEmbed]}); + await guildMember.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/MessageBulkDelete.js b/bot/src/events/MessageBulkDelete.js new file mode 100644 index 0000000..1595012 --- /dev/null +++ b/bot/src/events/MessageBulkDelete.js @@ -0,0 +1,32 @@ +import { EmbedBuilder, Events, AttachmentBuilder } from 'discord.js'; +import { guildSettings } from '../models/guild-settings.js'; + +export default { + name: Events.MessageBulkDelete, + async execute(msg, channel) { + const guildSetting = await guildSettings.findOne({ where: { guildID: channel.guild.id } }); + if (!guildSetting || !guildSetting.logChannelID) return; + + const logEmbed = new EmbedBuilder() + .setAuthor({ name: 'AleeBot Logging', iconURL: channel.client.user.avatarURL() }) + .setDescription(`A bulk of ${msg.size} messages was deleted in ${channel}`) + .setColor('#ff021b') + .setTimestamp(); + + let messages = []; + + msg.forEach(message => { + messages.push(message.createdAt.toUTCString()); + messages.push(`${message.author.username} - ${message.author.id}`); + messages.push(message.content); + }); + + const messageContent = messages.join('\n'); + const attachment = new AttachmentBuilder(Buffer.from(messageContent, 'utf-8'), { name: 'messages.txt' }); + + let deleteMessage = channel.client.channels.cache.get(guildSetting.logChannelID); + if (!deleteMessage) return; + + await deleteMessage.send({ embeds: [logEmbed], files: [attachment] }); + } +}; diff --git a/bot/src/events/MessageDelete.js b/bot/src/events/MessageDelete.js index 2259d2f..62f8536 100644 --- a/bot/src/events/MessageDelete.js +++ b/bot/src/events/MessageDelete.js @@ -10,8 +10,8 @@ export default { if (!guildSetting || !guildSetting.logChannelID) return; const logEmbed = new EmbedBuilder() - .setAuthor('AleeBot Logging', msg.client.user.avatarURL()) - .setDescription(`A message from ${msg.author.username} was deleted in <#${msg.channel.id}>`) + .setAuthor({ name: 'AleeBot Logging', iconURL: msg.client.user.avatarURL() }) + .setDescription(`A message from ${msg.author.username} was deleted in ${msg.channel}`) .addFields({ name: 'Deleted Message: ', value: `\`\`\`${msg.content}\`\`\`` }) .setColor('#ff021b') .setTimestamp() @@ -20,6 +20,6 @@ export default { let deleteMessage = msg.client.channels.cache.get(guildSetting.logChannelID); if (!deleteMessage) return; - await deleteMessage.send({ embeds: [logEmbed]}); + await deleteMessage.send({ embeds: [logEmbed] }); } }; diff --git a/bot/src/events/MessageUpdate.js b/bot/src/events/MessageUpdate.js index 118f51d..f4cb769 100644 --- a/bot/src/events/MessageUpdate.js +++ b/bot/src/events/MessageUpdate.js @@ -10,18 +10,18 @@ export default { const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: msg.client.user.avatarURL() }) - .setDescription(`A message from ${msg.author.username} was edited in <#${msg.channel.id}>`) + .setDescription(`A message from ${msg.author.username} was edited in ${msg.channel}`) .addFields( { name: 'Before: ', value: `\`\`\`${msg.content}\`\`\`` }, { name: 'After: ', value: `\`\`\`${newmsg.content}\`\`\`` } ) .setColor('#ffff1a') .setTimestamp() - .setFooter(`Author ID: ${msg.author.id}`); + .setFooter({ text: `Author ID: ${msg.author.id}` }); let editMessage = msg.client.channels.cache.get(guildSetting.logChannelID); if (!editMessage) return; - await editMessage.send({ embeds: [logEmbed]}); + await editMessage.send({ embeds: [logEmbed] }); } }; |
