aboutsummaryrefslogtreecommitdiff
path: root/src/lib/models/instance/ActivePunishment.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/models/instance/ActivePunishment.ts')
-rw-r--r--src/lib/models/instance/ActivePunishment.ts91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/lib/models/instance/ActivePunishment.ts b/src/lib/models/instance/ActivePunishment.ts
new file mode 100644
index 0000000..1d6104f
--- /dev/null
+++ b/src/lib/models/instance/ActivePunishment.ts
@@ -0,0 +1,91 @@
+import { type Snowflake } from 'discord.js';
+import { nanoid } from 'nanoid';
+import { type Sequelize } from 'sequelize';
+import { BaseModel } from '../BaseModel.js';
+const { DataTypes } = (await import('sequelize')).default;
+
+export enum ActivePunishmentType {
+ BAN = 'BAN',
+ MUTE = 'MUTE',
+ ROLE = 'ROLE',
+ BLOCK = 'BLOCK'
+}
+
+export interface ActivePunishmentModel {
+ id: string;
+ type: ActivePunishmentType;
+ user: Snowflake;
+ guild: Snowflake;
+ extraInfo: Snowflake;
+ expires: Date | null;
+ modlog: string;
+}
+
+export interface ActivePunishmentModelCreationAttributes {
+ id?: string;
+ type: ActivePunishmentType;
+ user: Snowflake;
+ guild: Snowflake;
+ extraInfo?: Snowflake;
+ expires?: Date;
+ modlog: string;
+}
+
+export class ActivePunishment
+ extends BaseModel<ActivePunishmentModel, ActivePunishmentModelCreationAttributes>
+ implements ActivePunishmentModel
+{
+ /**
+ * The ID of this punishment (no real use just for a primary key)
+ */
+ public declare id: string;
+
+ /**
+ * The type of punishment.
+ */
+ public declare type: ActivePunishmentType;
+
+ /**
+ * The user who is punished.
+ */
+ public declare user: Snowflake;
+
+ /**
+ * The guild they are punished in.
+ */
+ public declare guild: Snowflake;
+
+ /**
+ * Additional info about the punishment if applicable. The channel id for channel blocks and role for punishment roles.
+ */
+ public declare extraInfo: Snowflake;
+
+ /**
+ * The date when this punishment expires (optional).
+ */
+ public declare expires: Date | null;
+
+ /**
+ * The reference to the modlog entry.
+ */
+ public declare modlog: string;
+
+ /**
+ * Initializes the model.
+ * @param sequelize The sequelize instance.
+ */
+ public static initModel(sequelize: Sequelize): void {
+ ActivePunishment.init(
+ {
+ id: { type: DataTypes.STRING, primaryKey: true, allowNull: false, defaultValue: nanoid },
+ type: { type: DataTypes.STRING, allowNull: false },
+ user: { type: DataTypes.STRING, allowNull: false },
+ guild: { type: DataTypes.STRING, allowNull: false, references: { model: 'Guilds', key: 'id' } },
+ extraInfo: { type: DataTypes.STRING, allowNull: true },
+ expires: { type: DataTypes.DATE, allowNull: true },
+ modlog: { type: DataTypes.STRING, allowNull: true, references: { model: 'ModLogs', key: 'id' } }
+ },
+ { sequelize }
+ );
+ }
+}