aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/extensions/BotClient.ts118
-rw-r--r--src/lib/models/Ban.ts44
-rw-r--r--src/lib/models/Guild.ts19
-rw-r--r--src/lib/models/Level.ts19
-rw-r--r--src/lib/models/Modlog.ts50
-rw-r--r--src/listeners/client/syncslashcommands.ts (renamed from src/listeners/client/CreateSlashCommands.ts)29
-rw-r--r--src/listeners/guild/syncunban.ts (renamed from src/listeners/guild/Unban.ts)0
7 files changed, 152 insertions, 127 deletions
diff --git a/src/lib/extensions/BotClient.ts b/src/lib/extensions/BotClient.ts
index 99b40ef..76b1a1b 100644
--- a/src/lib/extensions/BotClient.ts
+++ b/src/lib/extensions/BotClient.ts
@@ -6,13 +6,12 @@ import {
} from 'discord-akairo';
import { Guild } from 'discord.js';
import * as path from 'path';
-import { DataTypes, Sequelize } from 'sequelize';
+import { Sequelize } from 'sequelize';
import * as Models from '../models';
import { BotGuild } from './BotGuild';
import { BotMessage } from './BotMessage';
import { Util } from './Util';
import * as Tasks from '../../tasks';
-import { v4 as uuidv4 } from 'uuid';
import { exit } from 'process';
import { Intents } from 'discord.js';
import * as config from '../../config/options';
@@ -139,117 +138,10 @@ export class BotClient extends AkairoClient {
public async dbPreInit(): Promise<void> {
await this.db.authenticate();
- Models.Guild.init(
- {
- id: {
- type: DataTypes.STRING,
- primaryKey: true
- },
- prefix: {
- type: DataTypes.STRING,
- allowNull: false,
- defaultValue: this.config.prefix
- }
- },
- { sequelize: this.db }
- );
- Models.Modlog.init(
- {
- id: {
- type: DataTypes.STRING,
- primaryKey: true,
- allowNull: false,
- defaultValue: uuidv4
- },
- type: {
- type: new DataTypes.ENUM(
- 'BAN',
- 'TEMPBAN',
- 'MUTE',
- 'TEMPMUTE',
- 'KICK',
- 'WARN'
- ),
- allowNull: false
- },
- user: {
- type: DataTypes.STRING,
- allowNull: false
- },
- moderator: {
- type: DataTypes.STRING,
- allowNull: false
- },
- duration: {
- type: DataTypes.STRING,
- allowNull: true
- },
- reason: {
- type: DataTypes.STRING,
- allowNull: true
- },
- guild: {
- type: DataTypes.STRING,
- references: {
- model: Models.Guild
- }
- }
- },
- { sequelize: this.db }
- );
- Models.Ban.init(
- {
- id: {
- type: DataTypes.STRING,
- primaryKey: true,
- allowNull: false,
- defaultValue: uuidv4
- },
- user: {
- type: DataTypes.STRING,
- allowNull: false
- },
- guild: {
- type: DataTypes.STRING,
- allowNull: false,
- references: {
- model: Models.Guild,
- key: 'id'
- }
- },
- expires: {
- type: DataTypes.DATE,
- allowNull: true
- },
- reason: {
- type: DataTypes.STRING,
- allowNull: true
- },
- modlog: {
- type: DataTypes.STRING,
- allowNull: false,
- references: {
- model: Models.Modlog
- }
- }
- },
- { sequelize: this.db }
- );
- Models.Level.init(
- {
- id: {
- type: DataTypes.STRING,
- primaryKey: true,
- allowNull: false
- },
- xp: {
- type: DataTypes.INTEGER,
- allowNull: false,
- defaultValue: 0
- }
- },
- { sequelize: this.db }
- );
+ Models.Guild.initModel(this.db, this);
+ Models.Modlog.initModel(this.db);
+ Models.Ban.initModel(this.db);
+ Models.Level.initModel(this.db);
try {
await this.db.sync(); // Sync all tables to fix everything if updated
} catch {
diff --git a/src/lib/models/Ban.ts b/src/lib/models/Ban.ts
index 032a48b..c30c4c5 100644
--- a/src/lib/models/Ban.ts
+++ b/src/lib/models/Ban.ts
@@ -1,4 +1,7 @@
+import { DataTypes, Sequelize } from 'sequelize';
import { BaseModel } from './BaseModel';
+import * as Models from './';
+import { v4 as uuidv4 } from 'uuid';
export interface BanModel {
id: string;
@@ -44,4 +47,45 @@ export class Ban
* The ref to the modlog entry
*/
modlog: string;
+
+ static initModel(sequelize: Sequelize): void {
+ Ban.init(
+ {
+ id: {
+ type: DataTypes.STRING,
+ primaryKey: true,
+ allowNull: false,
+ defaultValue: uuidv4
+ },
+ user: {
+ type: DataTypes.STRING,
+ allowNull: false
+ },
+ guild: {
+ type: DataTypes.STRING,
+ allowNull: false,
+ references: {
+ model: Models.Guild,
+ key: 'id'
+ }
+ },
+ expires: {
+ type: DataTypes.DATE,
+ allowNull: true
+ },
+ reason: {
+ type: DataTypes.STRING,
+ allowNull: true
+ },
+ modlog: {
+ type: DataTypes.STRING,
+ allowNull: false,
+ references: {
+ model: Models.Modlog
+ }
+ }
+ },
+ { sequelize: sequelize }
+ );
+ }
}
diff --git a/src/lib/models/Guild.ts b/src/lib/models/Guild.ts
index 3e6c6bf..e4e317f 100644
--- a/src/lib/models/Guild.ts
+++ b/src/lib/models/Guild.ts
@@ -1,4 +1,5 @@
-import { Optional } from 'sequelize';
+import { DataTypes, Optional, Sequelize } from 'sequelize';
+import { BotClient } from '../extensions/BotClient';
import { BaseModel } from './BaseModel';
export interface GuildModel {
@@ -12,4 +13,20 @@ export class Guild
implements GuildModel {
id: string;
prefix: string;
+ static initModel(seqeulize: Sequelize, client: BotClient): void {
+ Guild.init(
+ {
+ id: {
+ type: DataTypes.STRING,
+ primaryKey: true
+ },
+ prefix: {
+ type: DataTypes.STRING,
+ allowNull: false,
+ defaultValue: client.config.prefix
+ }
+ },
+ { sequelize: seqeulize }
+ );
+ }
}
diff --git a/src/lib/models/Level.ts b/src/lib/models/Level.ts
index f08f29b..426ec1a 100644
--- a/src/lib/models/Level.ts
+++ b/src/lib/models/Level.ts
@@ -1,3 +1,4 @@
+import { DataTypes, Sequelize } from 'sequelize';
import { BaseModel } from './BaseModel';
export interface LevelModel {
@@ -16,6 +17,24 @@ export class Level extends BaseModel<LevelModel, LevelModelCreationAttributes> {
get level(): number {
return Level.convertXpToLevel(this.xp);
}
+
+ static initModel(sequelize: Sequelize): void {
+ Level.init(
+ {
+ id: {
+ type: DataTypes.STRING,
+ primaryKey: true,
+ allowNull: false
+ },
+ xp: {
+ type: DataTypes.INTEGER,
+ allowNull: false,
+ defaultValue: 0
+ }
+ },
+ { sequelize: sequelize }
+ );
+ }
static convertXpToLevel(xp: number): number {
let i = 1;
let lvl: number;
diff --git a/src/lib/models/Modlog.ts b/src/lib/models/Modlog.ts
index 0a3feba..6dd5e26 100644
--- a/src/lib/models/Modlog.ts
+++ b/src/lib/models/Modlog.ts
@@ -1,4 +1,7 @@
+import { DataTypes, Sequelize } from 'sequelize';
import { BaseModel } from './BaseModel';
+import { v4 as uuidv4 } from 'uuid';
+import * as Models from './';
export enum ModlogType {
BAN = 'BAN',
@@ -39,4 +42,51 @@ export class Modlog
guild: string;
reason: string | null;
duration: number | null;
+
+ static initModel(sequelize: Sequelize): void {
+ Modlog.init(
+ {
+ id: {
+ type: DataTypes.STRING,
+ primaryKey: true,
+ allowNull: false,
+ defaultValue: uuidv4
+ },
+ type: {
+ type: new DataTypes.ENUM(
+ 'BAN',
+ 'TEMPBAN',
+ 'MUTE',
+ 'TEMPMUTE',
+ 'KICK',
+ 'WARN'
+ ),
+ allowNull: false
+ },
+ user: {
+ type: DataTypes.STRING,
+ allowNull: false
+ },
+ moderator: {
+ type: DataTypes.STRING,
+ allowNull: false
+ },
+ duration: {
+ type: DataTypes.STRING,
+ allowNull: true
+ },
+ reason: {
+ type: DataTypes.STRING,
+ allowNull: true
+ },
+ guild: {
+ type: DataTypes.STRING,
+ references: {
+ model: Models.Guild
+ }
+ }
+ },
+ { sequelize: sequelize }
+ );
+ }
}
diff --git a/src/listeners/client/CreateSlashCommands.ts b/src/listeners/client/syncslashcommands.ts
index c395b3a..2388104 100644
--- a/src/listeners/client/CreateSlashCommands.ts
+++ b/src/listeners/client/syncslashcommands.ts
@@ -10,39 +10,42 @@ export default class CreateSlashCommands extends BotListener {
}
async exec(): Promise<void> {
try {
- const enabled = await this.client.application.commands.fetch();
- for (const command of enabled) {
+ const registered = await this.client.application.commands.fetch();
+ for (const [, registeredCommand] of registered) {
if (
!this.client.commandHandler.modules.find(
- (cmd) => cmd.id == command[1].name
+ (cmd) => cmd.id == registeredCommand.name
)
) {
- await this.client.application.commands.delete(command[1].id);
+ await this.client.application.commands.delete(registeredCommand.id);
this.client.logger.verbose(
- `{red Deleted slash command ${command[1].name}}`
+ `{red Deleted slash command ${registeredCommand.name}}`
);
}
}
- for (const cmd of this.client.commandHandler.modules) {
- if (cmd[1].execSlash) {
- const found = enabled.find((i) => i.name == cmd[1].id);
+ for (const [, botCommand] of this.client.commandHandler.modules) {
+ if (botCommand.execSlash) {
+ const found = registered.find((i) => i.name == botCommand.id);
const slashdata = {
- name: cmd[1].id,
- description: cmd[1].description.content,
- options: cmd[1].options.slashCommandOptions
+ name: botCommand.id,
+ description: botCommand.description.content,
+ options: botCommand.options.slashCommandOptions
};
if (found?.id) {
if (slashdata.description !== found.description) {
await this.client.application.commands.edit(found.id, slashdata);
+ this.client.logger.verbose(
+ `{orange Edited slash command ${botCommand.id}}`
+ );
}
} else {
+ await this.client.application.commands.create(slashdata);
this.client.logger.verbose(
- `{red Deleted slash command ${cmd[1].id}}`
+ `{green Created slash command ${botCommand.id}}`
);
- await this.client.application.commands.create(slashdata);
}
}
}
diff --git a/src/listeners/guild/Unban.ts b/src/listeners/guild/syncunban.ts
index 63267bd..63267bd 100644
--- a/src/listeners/guild/Unban.ts
+++ b/src/listeners/guild/syncunban.ts