aboutsummaryrefslogtreecommitdiff
path: root/bot/src
diff options
context:
space:
mode:
Diffstat (limited to 'bot/src')
-rw-r--r--bot/src/bot.js2
-rw-r--r--bot/src/commands/quote.js2
-rw-r--r--bot/src/commands/serverinfo.js15
-rw-r--r--bot/src/commands/settings.js2
-rw-r--r--bot/src/commands/suggest.js46
-rw-r--r--bot/src/commands/userinfo.js14
-rw-r--r--bot/src/events/GuildBanAdd.js21
-rw-r--r--bot/src/events/GuildBanRemove.js16
-rw-r--r--bot/src/events/GuildCreate.js2
-rw-r--r--bot/src/events/GuildDelete.js2
-rw-r--r--bot/src/events/GuildMemberAdd.js4
-rw-r--r--bot/src/events/GuildMemberRemove.js4
-rw-r--r--bot/src/events/MessageBulkDelete.js32
-rw-r--r--bot/src/events/MessageDelete.js6
-rw-r--r--bot/src/events/MessageUpdate.js6
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] });
}
};