refactor: auto format

This commit is contained in:
Baipyrus 2024-03-23 22:47:24 +01:00
parent bba1617926
commit 0d80761e2c
5 changed files with 195 additions and 192 deletions

View File

@ -10,6 +10,7 @@
Download the current source code [here](https://git.baipyr.us/Baipyrus/DiscordJS-Example/archive/main.zip). Download the current source code [here](https://git.baipyr.us/Baipyrus/DiscordJS-Example/archive/main.zip).
Or clone the repository manually: Or clone the repository manually:
```bash ```bash
git clone https://git.baipyr.us/Baipyrus/DiscordJS-Example.git git clone https://git.baipyr.us/Baipyrus/DiscordJS-Example.git
``` ```
@ -17,6 +18,7 @@ git clone https://git.baipyr.us/Baipyrus/DiscordJS-Example.git
## Installation ## Installation
Install the required dependencies: Install the required dependencies:
```bash ```bash
npm install npm install
``` ```
@ -24,6 +26,7 @@ npm install
## Running ## Running
Start the bot with: Start the bot with:
```bash ```bash
npm run start npm run start
``` ```

View File

@ -1,103 +1,103 @@
import { SlashCommandBuilder, PermissionFlagsBits } from 'discord.js'; import { SlashCommandBuilder, PermissionFlagsBits } from 'discord.js';
import { Role, Guild } from '../../../database.js'; import { Role, Guild } from '../../../database.js';
/** /**
* @param {Guild} guild * @param {Guild} guild
* @param {Role} role * @param {Role} role
*/ */
const registerRole = async (guild, role) => { const registerRole = async (guild, role) => {
// Check if guild exists in database, otherwise create it // Check if guild exists in database, otherwise create it
const guildData = { id: guild.id }; const guildData = { id: guild.id };
await Guild.findOrCreate({ await Guild.findOrCreate({
where: guildData, where: guildData,
defaults: guildData defaults: guildData
}); });
// Register role in database // Register role in database
await Role.create({ await Role.create({
guild: guild.id, guild: guild.id,
id: role.id, id: role.id,
assign: true assign: true
}); });
}; };
export const data = new SlashCommandBuilder() export const data = new SlashCommandBuilder()
.setName('member_roles') .setName('member_roles')
.setDMPermission(false) .setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageRoles) .setDefaultMemberPermissions(PermissionFlagsBits.ManageRoles)
.setDescription('Assigns roles to new members.') .setDescription('Assigns roles to new members.')
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
.setName('add') .setName('add')
.setDescription('Registers a role to be assigned to new members.') .setDescription('Registers a role to be assigned to new members.')
.addRoleOption((option) => .addRoleOption((option) =>
option option
.setName('role') .setName('role')
.setDescription('The role to assign to new members.') .setDescription('The role to assign to new members.')
.setRequired(true) .setRequired(true)
) )
) )
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
.setName('remove') .setName('remove')
.setDescription('Unregisters a role from new member assignment.') .setDescription('Unregisters a role from new member assignment.')
.addRoleOption((option) => .addRoleOption((option) =>
option option
.setName('role') .setName('role')
.setDescription('The role to unregister from assignmment.') .setDescription('The role to unregister from assignmment.')
.setRequired(true) .setRequired(true)
) )
); );
/** @param {ChatInputCommandInteraction} interaction */ /** @param {ChatInputCommandInteraction} interaction */
export async function execute(interaction) { export async function execute(interaction) {
const { options } = interaction; const { options } = interaction;
// Get command options // Get command options
const role = options.getRole('role'); const role = options.getRole('role');
switch (options.getSubcommand()) { switch (options.getSubcommand()) {
case 'add': case 'add':
// Search for role in database // Search for role in database
const found = await Role.findOne({ const found = await Role.findOne({
where: { where: {
id: role.id id: role.id
} }
}); });
// Toggle role assignment if found // Toggle role assignment if found
if (found) { if (found) {
found.assign = true; found.assign = true;
await found.save(); await found.save();
// Otherwise create new database entry // Otherwise create new database entry
} else await registerRole(interaction.guild, role); } else await registerRole(interaction.guild, role);
// Reply successfully to acknowledge command // Reply successfully to acknowledge command
await interaction.reply({ await interaction.reply({
content: 'Successfully registered role.', content: 'Successfully registered role.',
ephemeral: true ephemeral: true
}); });
console.info(`[INFO] Registered role to be assigned with ID '${role.id}'.`); console.info(`[INFO] Registered role to be assigned with ID '${role.id}'.`);
break; break;
case 'remove': case 'remove':
// Remove role from database // Remove role from database
const count = await Role.destroy({ const count = await Role.destroy({
where: { where: {
id: role.id, id: role.id,
assign: true assign: true
} }
}); });
// Set reply based on result of deletion // Set reply based on result of deletion
let response = 'Successfully removed'; let response = 'Successfully removed';
if (count === 0) response = 'Failed to remove'; if (count === 0) response = 'Failed to remove';
// Reply to acknowledge command // Reply to acknowledge command
await interaction.reply({ await interaction.reply({
content: `${response} role from new member assignment!`, content: `${response} role from new member assignment!`,
ephemeral: true ephemeral: true
}); });
console.info(`[INFO] Removed role to be assigned with ID '${role.id}'.`); console.info(`[INFO] Removed role to be assigned with ID '${role.id}'.`);
break; break;
} }
} }

View File

@ -1,27 +1,27 @@
import { Events, GuildMember } from 'discord.js'; import { Events, GuildMember } from 'discord.js';
import { Role } from '../../database.js'; import { Role } from '../../database.js';
export const name = Events.GuildMemberAdd; export const name = Events.GuildMemberAdd;
/** @param {GuildMember} member */ /** @param {GuildMember} member */
export async function execute(member) { export async function execute(member) {
// Find roles to be assigned in guild from database // Find roles to be assigned in guild from database
const roles = await Role.findAll({ const roles = await Role.findAll({
where: { where: {
guild: member.guild.id, guild: member.guild.id,
assign: true assign: true
} }
}); });
// Ignore if no none found // Ignore if no none found
if (roles.length === 0) return; if (roles.length === 0) return;
try { try {
// Add roles to member // Add roles to member
await member.roles.add(roles.map((role) => role.id)); await member.roles.add(roles.map((role) => role.id));
} catch (error) { } catch (error) {
// Missing permissions // Missing permissions
console.error(error); console.error(error);
await member.user.send('Could not assign roles. Please contact server staff.'); await member.user.send('Could not assign roles. Please contact server staff.');
} }
console.info(`[INFO] Added ${roles.length} roles to new member with ID '${member.user.id}'.`); console.info(`[INFO] Added ${roles.length} roles to new member with ID '${member.user.id}'.`);
} }

View File

@ -1,24 +1,24 @@
import { DataTypes, Sequelize } from 'sequelize'; import { DataTypes, Sequelize } from 'sequelize';
/** /**
* @typedef {Object} Guild * @typedef {Object} Guild
* @property {string} id A Discord guild ID. * @property {string} id A Discord guild ID.
* @property {(model: Object) => void} hasMany Defines an One-To-Many relationship. * @property {(model: Object) => void} hasMany Defines an One-To-Many relationship.
* @property {(conditions: Object) => Promise<Guild>} findOne Finds one instance in the database matching the provided condition(-s). * @property {(conditions: Object) => Promise<Guild>} findOne Finds one instance in the database matching the provided condition(-s).
* @property {(conditions: Object) => Promise<Array<Guild>>} findAll Finds all instances in the database matching the provided condition(-s). * @property {(conditions: Object) => Promise<Array<Guild>>} findAll Finds all instances in the database matching the provided condition(-s).
* @property {(conditions: Object) => Promise<Guild>} findOrCreate Finds or creates an instance in the database matching the provided condition(-s) or default values. * @property {(conditions: Object) => Promise<Guild>} findOrCreate Finds or creates an instance in the database matching the provided condition(-s) or default values.
*/ */
/** /**
* The definition of the `Guild` table in the database. * The definition of the `Guild` table in the database.
* @param {Sequelize} sequelize * @param {Sequelize} sequelize
* @returns {Guild} * @returns {Guild}
*/ */
export default function (sequelize) { export default function (sequelize) {
return sequelize.define('Guilds', { return sequelize.define('Guilds', {
id: { id: {
type: DataTypes.STRING, type: DataTypes.STRING,
primaryKey: true primaryKey: true
} }
}); });
} }

View File

@ -1,38 +1,38 @@
import { DataTypes, Deferrable, Sequelize } from 'sequelize'; import { DataTypes, Deferrable, Sequelize } from 'sequelize';
/** /**
* @typedef {Object} Role * @typedef {Object} Role
* @property {string} id A Discord role ID. * @property {string} id A Discord role ID.
* @property {boolean} assign Whether or not the role should be assigned to new members. * @property {boolean} assign Whether or not the role should be assigned to new members.
* @property {string} guild A Discord guild ID as a foreign key reference. * @property {string} guild A Discord guild ID as a foreign key reference.
* @property {(model: Object) => void} hasMany Defines an One-To-Many relationship. * @property {(model: Object) => void} hasMany Defines an One-To-Many relationship.
* @property {(conditions: Object) => Promise<Role>} findOne Finds one instance in the database matching the provided condition(-s). * @property {(conditions: Object) => Promise<Role>} findOne Finds one instance in the database matching the provided condition(-s).
* @property {(conditions: Object) => Promise<Array<Role>>} findAll Finds all instances in the database matching the provided condition(-s). * @property {(conditions: Object) => Promise<Array<Role>>} findAll Finds all instances in the database matching the provided condition(-s).
* @property {(conditions: Object) => Promise<Role>} findOrCreate Finds or creates an instance in the database matching the provided condition(-s) or default values. * @property {(conditions: Object) => Promise<Role>} findOrCreate Finds or creates an instance in the database matching the provided condition(-s) or default values.
*/ */
/** /**
* The definition of the `Role` table in the database. * The definition of the `Role` table in the database.
* @param {Sequelize} sequelize * @param {Sequelize} sequelize
* @returns {Role} * @returns {Role}
*/ */
export default function (sequelize) { export default function (sequelize) {
return sequelize.define('Roles', { return sequelize.define('Roles', {
id: { id: {
type: DataTypes.STRING, type: DataTypes.STRING,
primaryKey: true primaryKey: true
}, },
assign: { assign: {
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
defaultValue: false defaultValue: false
}, },
guild: { guild: {
type: DataTypes.STRING, type: DataTypes.STRING,
references: { references: {
deferrable: Deferrable.INITIALLY_IMMEDIATE, deferrable: Deferrable.INITIALLY_IMMEDIATE,
model: 'Guilds', model: 'Guilds',
key: 'id' key: 'id'
} }
} }
}); });
} }