From 3dddae6dca7520e8254b228f31695f1b28be61af Mon Sep 17 00:00:00 2001 From: Minzkraut Date: Sun, 17 Apr 2022 16:07:57 +0200 Subject: [PATCH] Basic User and Guild registration --- commands/register.js | 32 ++++++++++++++++++++++ commands/userlist.js | 24 +++++++++++++++++ events/interactionCreate.js | 22 +++++++++++++++ migrations/20220417130917-create-guild.js | 6 ++--- migrations/20220417132721-create-user.js | 33 +++++++++++++++++++++++ models/guild.js | 6 ++--- models/user.js | 25 +++++++++++++++++ 7 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 commands/register.js create mode 100644 commands/userlist.js create mode 100644 migrations/20220417132721-create-user.js create mode 100644 models/user.js diff --git a/commands/register.js b/commands/register.js new file mode 100644 index 0000000..4d64eda --- /dev/null +++ b/commands/register.js @@ -0,0 +1,32 @@ +//User registration +const { SlashCommandBuilder } = require("@discordjs/builders"); +const { User } = require("../models"); + +module.exports = { + data: new SlashCommandBuilder() + .setName("register") + .setDescription("Register yourself"), + async execute(interaction) { + let user = await User.findOne({ + where: { + userID: interaction.user.id + } + }); + if (user) { + interaction.reply({ + content: "You are already registered", + ephemeral: true + }); + } else { + await User.create({ + userID: interaction.user.id, + banned: false, + registredAt: new Date() + }); + interaction.reply({ + content: "You are now registered", + ephemeral: false + }); + } + } +} \ No newline at end of file diff --git a/commands/userlist.js b/commands/userlist.js new file mode 100644 index 0000000..b13b1da --- /dev/null +++ b/commands/userlist.js @@ -0,0 +1,24 @@ +const { SlashCommandBuilder } = require("@discordjs/builders"); +const { User } = require("../models"); + + +module.exports = { + data: new SlashCommandBuilder() + .setName("userlist") + .setDescription("List all users"), + async execute(interaction) { + let users = await User.findAll(); + let userList = ""; + for (let i = 0; i < users.length; i++) { + let username = await interaction.client.users.fetch(users[i].userID); + userList += `${username.username}#${username.discriminator}`; + } + if (userList === "") { + userList = "No users found"; + } + interaction.reply({ + content: userList, + ephemeral: false + }); + } +} \ No newline at end of file diff --git a/events/interactionCreate.js b/events/interactionCreate.js index 168c603..546b644 100644 --- a/events/interactionCreate.js +++ b/events/interactionCreate.js @@ -1,12 +1,34 @@ require("dotenv").config(); const { REST } = require("@discordjs/rest"); const { Routes } = require("discord-api-types/v9") +const { Guild } = require("../models"); module.exports = { name: "interactionCreate", async execute (interaction) { if (!interaction.isCommand()) return; + const guild = await interaction.guild; + //check if guild exists in database + let guildData = await Guild.findOne({ + where: { + guildID: guild.id + } + }); + + if (!guildData) { + //create guild in database + await Guild.create({ + guildID: guild.id, + ownerID: guild.ownerId, + }); + //send guild registered message to the interations channel + interaction.channel.send({ + content: `Guild ${guild.name} registered`, + ephemeral: false + }); + + } const command = interaction.client.commands.get(interaction.commandName); if (!command) return; diff --git a/migrations/20220417130917-create-guild.js b/migrations/20220417130917-create-guild.js index 4b8fbb4..6c438ab 100644 --- a/migrations/20220417130917-create-guild.js +++ b/migrations/20220417130917-create-guild.js @@ -8,13 +8,13 @@ module.exports = { primaryKey: true, type: Sequelize.INTEGER }, - gid: { + guildID: { type: Sequelize.STRING }, - adminRole: { + adminRoleID: { type: Sequelize.STRING }, - owderId: { + owderID: { type: Sequelize.STRING }, createdAt: { diff --git a/migrations/20220417132721-create-user.js b/migrations/20220417132721-create-user.js new file mode 100644 index 0000000..15c9419 --- /dev/null +++ b/migrations/20220417132721-create-user.js @@ -0,0 +1,33 @@ +'use strict'; +module.exports = { + async up(queryInterface, Sequelize) { + await queryInterface.createTable('Users', { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + userID: { + type: Sequelize.STRING + }, + banned: { + type: Sequelize.BOOLEAN + }, + registredAt: { + type: Sequelize.DATE + }, + createdAt: { + allowNull: false, + type: Sequelize.DATE + }, + updatedAt: { + allowNull: false, + type: Sequelize.DATE + } + }); + }, + async down(queryInterface, Sequelize) { + await queryInterface.dropTable('Users'); + } +}; \ No newline at end of file diff --git a/models/guild.js b/models/guild.js index 3952440..276ca66 100644 --- a/models/guild.js +++ b/models/guild.js @@ -14,9 +14,9 @@ module.exports = (sequelize, DataTypes) => { } } Guild.init({ - gid: DataTypes.STRING, - adminRole: DataTypes.STRING, - owderId: DataTypes.STRING + guildID: DataTypes.STRING, + adminRoleID: DataTypes.STRING, + owderID: DataTypes.STRING }, { sequelize, modelName: 'Guild', diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..21f935e --- /dev/null +++ b/models/user.js @@ -0,0 +1,25 @@ +'use strict'; +const { + Model +} = require('sequelize'); +module.exports = (sequelize, DataTypes) => { + class User extends Model { + /** + * Helper method for defining associations. + * This method is not a part of Sequelize lifecycle. + * The `models/index` file will call this method automatically. + */ + static associate(models) { + // define association here + } + } + User.init({ + userID: DataTypes.STRING, + banned: DataTypes.BOOLEAN, + registredAt: DataTypes.DATE + }, { + sequelize, + modelName: 'User', + }); + return User; +}; \ No newline at end of file