Compare commits

...

2 commits

Author SHA1 Message Date
bc3c16bdcb WIP: Start creating autokick command
All checks were successful
Test / build (push) Successful in 7s
2024-11-30 13:53:24 +00:00
8e16a4fda6 Add AutoKickConfig to database 2024-11-30 13:53:13 +00:00
6 changed files with 136 additions and 0 deletions

View file

@ -0,0 +1 @@
DROP TABLE auto_kick_config;

View file

@ -0,0 +1,10 @@
CREATE TABLE auto_kick_config (
Id varchar(255) NOT NULL,
WhenCreated datetime NOT NULL,
WhenUpdated datetime NOT NULL,
ServerId varchar(255) NOT NULL,
RoleId varchar(255) NOT NULL,
KickTime int NOT NULL,
NoticeTime int NULL,
NoticeChannelId varchar(255) NULL
);

View file

@ -0,0 +1,2 @@
ALTER TABLE auto_kick_config
ADD PRIMARY KEY (Id);

54
src/commands/autokick.ts Normal file
View file

@ -0,0 +1,54 @@
import {CommandInteraction, PermissionFlagsBits, SlashCommandBuilder} from "discord.js";
import {Command} from "../type/command";
export default class Autokick extends Command {
constructor() {
super();
this.CommandBuilder = new SlashCommandBuilder()
.setName("autokick")
.setDescription("Configure the auto kick functionality")
.setDefaultMemberPermissions(PermissionFlagsBits.KickMembers)
.addSubcommand(x => x
.setName("set")
.setDescription("Set the configuration")
.addRoleOption(y => y
.setName("role")
.setDescription("The role the user needs to be auto kicked")
.setRequired(true))
.addStringOption(y => y
.setName("kicktime")
.setDescription("The time with the role before being kicked (Ex: 2h 30m)")
.setRequired(true))
.addStringOption(y => y
.setName("noticetime")
.setDescription("The time before being kicked when a notification is sent (Ex: 2h 30m)"))
.addChannelOption(y => y
.setName("noticechannel")
.setDescription("The channel to send the notification to")))
.addSubcommand(x => x
.setName("unset")
.setDescription("Unset the current configuration"));
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.isChatInputCommand()) return;
const subcommand = interaction.options.getSubcommand();
switch (subcommand) {
case "set":
await this.set(interaction);
break;
case "unset":
await this.unset(interaction);
break;
}
}
private async set(interaction: CommandInteraction) {
}
private async unset(interaction: CommandInteraction) {
}
}

View file

@ -0,0 +1,50 @@
import {Column, Entity} from "typeorm";
import AppDataSource from "../dataSources/appDataSource";
import BaseEntity from "../../contracts/BaseEntity";
@Entity()
export default class AutoKickConfig extends BaseEntity {
constructor(serverId: string, roleId: string, kickTime: number, noticeTime?: number, noticeChannelId?: string) {
super();
this.ServerId = serverId;
this.RoleId = roleId;
this.KickTime = kickTime;
this.NoticeTime = noticeTime;
this.NoticeChannelId = noticeChannelId;
}
@Column()
ServerId: string;
@Column()
RoleId: string;
@Column({ type: "int" })
KickTime: number;
@Column({ type: "int", nullable: true })
NoticeTime?: number;
@Column({ nullable: true })
NoticeChannelId?: string;
public UpdateBasicDetails(roleId: string, kickTime: number, noticeTime?: number, noticeChannelId?: string) {
this.RoleId = roleId;
this.KickTime = kickTime;
this.NoticeTime = noticeTime;
this.NoticeChannelId = noticeChannelId;
}
public static async FetchOneByServerIdAndRoleId(serverId: string, roleId: string): Promise<AutoKickConfig | null> {
const repository = AppDataSource.getRepository(AutoKickConfig);
const query = repository
.createQueryBuilder("config")
.where("config.serverId = :serverId", { serverId })
.andWhere("config.roleId = :roleId", { roleId })
.getOne();
return query;
}
}

View file

@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";
import MigrationHelper from "../../../helpers/MigrationHelper";
export class CreateAutoKickConfig1732973911304 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
MigrationHelper.Up("1732973911304-createAutoKickConfig", "3.2.4", [
"01-AutoKickConfig-Table",
"02-AutoKickConfig-Key",
], queryRunner)
}
public async down(queryRunner: QueryRunner): Promise<void> {
MigrationHelper.Down("1732973911304-createAutoKickConfig", "3.2.4", [
"01-AutoKickConfig",
], queryRunner)
}
}