diff options
| -rw-r--r-- | bot/package.json | 2 | ||||
| -rw-r--r-- | bot/src/commands/adventure.js | 12 | ||||
| -rw-r--r-- | bot/src/commands/settings.js | 24 | ||||
| -rw-r--r-- | bot/src/commands/warn.js | 12 | ||||
| -rw-r--r-- | bot/src/db/migrations/20250401223204-rename-logchannelid.js | 45 | ||||
| -rw-r--r-- | bot/src/db/models/guild-settings.js | 10 | ||||
| -rw-r--r-- | bot/src/db/models/warn.js | 42 | ||||
| -rw-r--r-- | bot/src/events/GuildBanAdd.js | 4 | ||||
| -rw-r--r-- | bot/src/events/GuildBanRemove.js | 4 | ||||
| -rw-r--r-- | bot/src/events/GuildMemberAdd.js | 4 | ||||
| -rw-r--r-- | bot/src/events/GuildMemberRemove.js | 4 | ||||
| -rw-r--r-- | bot/src/events/GuildMemberUpdate.js | 4 | ||||
| -rw-r--r-- | bot/src/events/MessageBulkDelete.js | 4 | ||||
| -rw-r--r-- | bot/src/events/MessageDelete.js | 4 | ||||
| -rw-r--r-- | bot/src/events/MessageUpdate.js | 4 |
15 files changed, 156 insertions, 23 deletions
diff --git a/bot/package.json b/bot/package.json index 17d7d66..ac40765 100644 --- a/bot/package.json +++ b/bot/package.json @@ -1,6 +1,6 @@ { "name": "aleebot", - "version": "4.0.0", + "version": "4.1.0 Beta", "main": "src/bot.js", "type": "module", "author": "Andrew Lee", diff --git a/bot/src/commands/adventure.js b/bot/src/commands/adventure.js new file mode 100644 index 0000000..0565478 --- /dev/null +++ b/bot/src/commands/adventure.js @@ -0,0 +1,12 @@ +// The plan for this command is that the user can select a story, then the bot sends the story that the user selected, and it will be interactive +// so it will be like an adventure story, and it will have multiple paths that the user can select. +import { SlashCommandBuilder } from 'discord.js'; + +export default { + data: new SlashCommandBuilder() + .setName('adventure') + .setDescription('Select an interactive story'), + async execute(interaction) { + return await interaction.reply('Hello world'); + } +}; diff --git a/bot/src/commands/settings.js b/bot/src/commands/settings.js index 36fe4d9..872bbd7 100644 --- a/bot/src/commands/settings.js +++ b/bot/src/commands/settings.js @@ -13,8 +13,16 @@ export default { .setDescription('Sets the settings for this guild.') .addChannelOption(option => option - .setName('log') - .setDescription('Log channel.')) + .setName('memberlog') + .setDescription('Member Log channel.')) + .addChannelOption(option => + option + .setName('messagelog') + .setDescription('Message Log channel.')) + .addChannelOption(option => + option + .setName('warnlog') + .setDescription('Warn Log channel.')) .addChannelOption(option => option .setName('suggestion') @@ -45,7 +53,9 @@ export default { if (interaction.options.getSubcommand() === 'clear') { await guildSettings.update({ - logChannelID: null, + memberLogChannelID: null, + messageLogChannelID: null, + warnLogChannelID: null, suggestionsChannelID: null, qotdChannelID: null, qotdToggle: null, @@ -62,7 +72,9 @@ export default { // Handle clearing settings if (areAllSettingsEmpty(interaction)) { guildEmbed.addFields( - { name: 'Logging', value: guildSetting?.logChannelID ? `<#${guildSetting.logChannelID}>` : 'N/A', inline: true }, + { name: 'Member Log', value: guildSetting?.memberLogChannelID ? `<#${guildSetting.memberLogChannelID}>` : 'N/A', inline: true }, + { name: 'Message Log', value: guildSetting?.messageLogChannelID ? `<#${guildSetting.messageLogChannelID}>` : 'N/A', inline: true }, + { name: 'Warn Log', value: guildSetting?.warnLogChannelID ? `<#${guildSetting.warnLogChannelID}>` : 'N/A', inline: true }, { name: 'Suggestions', value: guildSetting?.suggestionsChannelID ? `<#${guildSetting.suggestionsChannelID}>` : 'N/A', inline: true }, { name: 'QOTD Channel', value: guildSetting?.qotdChannelID ? `<#${guildSetting.qotdChannelID}>` : 'N/A', inline: true }, { name: 'LLM Chatbot', value: guildSetting?.ollamaEnabled ? 'Enabled' : 'Disabled', inline: true }, @@ -73,7 +85,9 @@ export default { // Process each setting type guildEmbed.setDescription('Updated this setting.'); - await updateChannelSetting(interaction, guildEmbed, 'log', 'logChannelID', 'Logging'); + await updateChannelSetting(interaction, guildEmbed, 'memberlog', 'memberLogChannelID', 'Member Log'); + await updateChannelSetting(interaction, guildEmbed, 'messagelog', 'messageLogChannelID', 'Message Log'); + await updateChannelSetting(interaction, guildEmbed, 'warnlog', 'warnLogChannelID', 'Warn Log'); await updateChannelSetting(interaction, guildEmbed, 'suggestion', 'suggestionsChannelID', 'Suggestions'); await updateChannelSetting(interaction, guildEmbed, 'qotd', 'qotdChannelID', 'QOTD Channel'); await updateBooleanSetting(interaction, guildEmbed, 'qotdtoggle', 'qotdToggle', 'Quote of the Day'); diff --git a/bot/src/commands/warn.js b/bot/src/commands/warn.js new file mode 100644 index 0000000..a053c12 --- /dev/null +++ b/bot/src/commands/warn.js @@ -0,0 +1,12 @@ +import { PermissionFlagsBits, SlashCommandBuilder } from 'discord.js'; + +export default { + data: new SlashCommandBuilder() + .setName('warn') + .setDescription('Warns a member of the server') + .setContexts(0) + .setDefaultMemberPermissions(PermissionFlagsBits.KickMembers), + async execute(interaction) { + return await interaction.reply('Hello world'); + } +}; diff --git a/bot/src/db/migrations/20250401223204-rename-logchannelid.js b/bot/src/db/migrations/20250401223204-rename-logchannelid.js new file mode 100644 index 0000000..2313c4f --- /dev/null +++ b/bot/src/db/migrations/20250401223204-rename-logchannelid.js @@ -0,0 +1,45 @@ +'use strict'; + +/** @type {import('sequelize-cli').Migration} */ +export const up = async (queryInterface, Sequelize) => { +// Assuming we have a table in SQLite created as follows: + await queryInterface.createTable('guild-settings', { + id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + guildID: { + type: Sequelize.STRING, + allowNull: false + }, + memberLogChannelID: { + type: Sequelize.STRING, + allowNull: true + }, + messageLogChannelID: { + type: Sequelize.STRING, + allowNull: true + }, + suggestionsChannelID: { + type: Sequelize.STRING, + allowNull: true + }, + qotdChannelID: { + type: Sequelize.STRING, + allowNull: true + }, + qotdToggle: { + type: Sequelize.BOOLEAN, + allowNull: true + }, + ollamaEnabled: { + type: Sequelize.BOOLEAN, + allowNull: true + }, + }); +}; + +export const down = async (queryInterface) => { + +}; diff --git a/bot/src/db/models/guild-settings.js b/bot/src/db/models/guild-settings.js index c6bcaa4..09cddd2 100644 --- a/bot/src/db/models/guild-settings.js +++ b/bot/src/db/models/guild-settings.js @@ -11,7 +11,15 @@ export const guildSettings = sequelize.define('guild-settings', { type: STRING, allowNull: false }, - logChannelID: { + memberLogChannelID: { + type: STRING, + allowNull: true + }, + messageLogChannelID: { + type: STRING, + allowNull: true + }, + warnLogChannelID: { type: STRING, allowNull: true }, diff --git a/bot/src/db/models/warn.js b/bot/src/db/models/warn.js new file mode 100644 index 0000000..d766238 --- /dev/null +++ b/bot/src/db/models/warn.js @@ -0,0 +1,42 @@ +import { INTEGER, STRING } from 'sequelize'; +import { sequelize } from '../../utils/sequelize.js'; + +export const warnSettings = sequelize.define('warn-settings', { + id: { + type: INTEGER, + primaryKey: true, + autoIncrement: true, + }, + guildID: { + type: STRING, + allowNull: false + }, + strikes: { + type: STRING, + allowNull: false + }, + punishment: { + type: STRING, + allowNull: false + } +}); + +export const warnLog = sequelize.define('warn-log', { + id: { + type: INTEGER, + primaryKey: true, + autoIncrement: true, + }, + guildID: { + type: STRING, + allowNull: false + }, + userID: { + type: STRING, + allowNull: false + }, + reason: { + type: STRING, + allowNull: false + } +}); diff --git a/bot/src/events/GuildBanAdd.js b/bot/src/events/GuildBanAdd.js index 1ea9df5..10a7c6e 100644 --- a/bot/src/events/GuildBanAdd.js +++ b/bot/src/events/GuildBanAdd.js @@ -6,7 +6,7 @@ export default { async execute(ban) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: ban.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.memberLogChannelID) return; const banLog = await ban.guild.fetchAuditLogs({ type: AuditLogEvent.MemberBanAdd, @@ -26,7 +26,7 @@ export default { .setColor('#ff021b') .setTimestamp(); - let banMessage = ban.guild.client.channels.cache.get(guildSetting.logChannelID); + let banMessage = ban.guild.client.channels.cache.get(guildSetting.memberLogChannelID); if (!banMessage) return; await banMessage.send({ embeds: [logEmbed] }); diff --git a/bot/src/events/GuildBanRemove.js b/bot/src/events/GuildBanRemove.js index 976145d..9b3524c 100644 --- a/bot/src/events/GuildBanRemove.js +++ b/bot/src/events/GuildBanRemove.js @@ -6,7 +6,7 @@ export default { async execute(ban) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: ban.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.memberLogChannelID) return; const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: ban.guild.client.user.avatarURL() }) @@ -18,7 +18,7 @@ export default { .setColor('#ff021b') .setTimestamp(); - let banMessage = ban.guild.client.channels.cache.get(guildSetting.logChannelID); + let banMessage = ban.guild.client.channels.cache.get(guildSetting.memberLogChannelID); if (!banMessage) return; await banMessage.send({ embeds: [logEmbed] }); diff --git a/bot/src/events/GuildMemberAdd.js b/bot/src/events/GuildMemberAdd.js index 9c3df76..312f195 100644 --- a/bot/src/events/GuildMemberAdd.js +++ b/bot/src/events/GuildMemberAdd.js @@ -7,7 +7,7 @@ export default { async execute(member) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: member.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.memberLogChannelID) return; const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: member.client.user.avatarURL() }) @@ -20,7 +20,7 @@ export default { .setColor('#4bff31') .setTimestamp(); - let guildMember = member.client.channels.cache.get(guildSetting.logChannelID); + let guildMember = member.client.channels.cache.get(guildSetting.memberLogChannelID); if (!guildMember) return; await guildMember.send({ embeds: [logEmbed] }); diff --git a/bot/src/events/GuildMemberRemove.js b/bot/src/events/GuildMemberRemove.js index e89c2c4..d330609 100644 --- a/bot/src/events/GuildMemberRemove.js +++ b/bot/src/events/GuildMemberRemove.js @@ -6,7 +6,7 @@ export default { async execute(member) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: member.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.memberLogChannelID) return; const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: member.client.user.avatarURL() }) @@ -18,7 +18,7 @@ export default { .setColor('#ec2727') .setTimestamp(); - let guildMember = member.client.channels.cache.get(guildSetting.logChannelID); + let guildMember = member.client.channels.cache.get(guildSetting.memberLogChannelID); if (!guildMember) return; await guildMember.send({ embeds: [logEmbed] }); diff --git a/bot/src/events/GuildMemberUpdate.js b/bot/src/events/GuildMemberUpdate.js index b9185cf..33d4c71 100644 --- a/bot/src/events/GuildMemberUpdate.js +++ b/bot/src/events/GuildMemberUpdate.js @@ -7,7 +7,7 @@ export default { try { if (member.nickname === newMember.nickname) return; const guildSetting = await guildSettings.findOne({ where: { guildID: member.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.memberLogChannelID) return; const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: member.client.user.avatarURL() }) @@ -19,7 +19,7 @@ export default { .setColor('#ffff1a') .setTimestamp(); - let guildMember = member.client.channels.cache.get(guildSetting.logChannelID); + let guildMember = member.client.channels.cache.get(guildSetting.memberLogChannelID); if (!guildMember) return; await guildMember.send({ embeds: [logEmbed] }); diff --git a/bot/src/events/MessageBulkDelete.js b/bot/src/events/MessageBulkDelete.js index 583c6d2..a31638f 100644 --- a/bot/src/events/MessageBulkDelete.js +++ b/bot/src/events/MessageBulkDelete.js @@ -6,7 +6,7 @@ export default { async execute(msg, channel) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: channel.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.messageLogChannelID) return; const logEmbed = new EmbedBuilder() .setAuthor({ name: 'AleeBot Logging', iconURL: channel.client.user.avatarURL() }) @@ -26,7 +26,7 @@ export default { 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); + let deleteMessage = channel.client.channels.cache.get(guildSetting.messageLogChannelID); 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 d318105..4620071 100644 --- a/bot/src/events/MessageDelete.js +++ b/bot/src/events/MessageDelete.js @@ -8,7 +8,7 @@ export default { if (!msg.content) return; const guildSetting = await guildSettings.findOne({ where: { guildID: msg.guild.id } }); - if (!guildSetting || !guildSetting.logChannelID) return; + if (!guildSetting || !guildSetting.messageLogChannelID) return; const useEmbedFields = msg.content.length <= 1024; @@ -23,7 +23,7 @@ export default { logEmbed.addFields({ name: 'Deleted Message: ', value: `\`\`\`\n${msg.content}\n\`\`\`` }); } - let deleteMessage = msg.client.channels.cache.get(guildSetting.logChannelID); + let deleteMessage = msg.client.channels.cache.get(guildSetting.messageLogChannelID); if (!deleteMessage) return; if (useEmbedFields) { diff --git a/bot/src/events/MessageUpdate.js b/bot/src/events/MessageUpdate.js index 00c605a..f960166 100644 --- a/bot/src/events/MessageUpdate.js +++ b/bot/src/events/MessageUpdate.js @@ -6,7 +6,7 @@ export default { async execute(msg, newmsg) { try { const guildSetting = await guildSettings.findOne({ where: { guildID: msg.guild.id } }); - if (!msg.guild || !guildSetting || !guildSetting.logChannelID) return; + if (!msg.guild || !guildSetting || !guildSetting.messageLogChannelID) return; if (msg.content === newmsg.content) return; const useEmbedFields = msg.content.length <= 1024 && @@ -26,7 +26,7 @@ export default { ); } - let editMessage = msg.client.channels.cache.get(guildSetting.logChannelID); + let editMessage = msg.client.channels.cache.get(guildSetting.messageLogChannelID); if (!editMessage) return; if (useEmbedFields) { |
