feat: add internal role manager plugin; add role buttons plugin
This commit is contained in:
parent
9314d57645
commit
3fe71b3e27
23 changed files with 732 additions and 1 deletions
39
backend/src/data/GuildRoleButtons.ts
Normal file
39
backend/src/data/GuildRoleButtons.ts
Normal file
|
@ -0,0 +1,39 @@
|
|||
import { getRepository, Repository } from "typeorm";
|
||||
import { Reminder } from "./entities/Reminder";
|
||||
import { BaseRepository } from "./BaseRepository";
|
||||
import moment from "moment-timezone";
|
||||
import { DBDateFormat } from "../utils";
|
||||
import { BaseGuildRepository } from "./BaseGuildRepository";
|
||||
import { RoleQueueItem } from "./entities/RoleQueueItem";
|
||||
import { connection } from "./db";
|
||||
import { RoleButtonsItem } from "./entities/RoleButtonsItem";
|
||||
|
||||
export class GuildRoleButtons extends BaseGuildRepository {
|
||||
private roleButtons: Repository<RoleButtonsItem>;
|
||||
|
||||
constructor(guildId) {
|
||||
super(guildId);
|
||||
this.roleButtons = getRepository(RoleButtonsItem);
|
||||
}
|
||||
|
||||
getSavedRoleButtons(): Promise<RoleButtonsItem[]> {
|
||||
return this.roleButtons.find({ guild_id: this.guildId });
|
||||
}
|
||||
|
||||
async deleteRoleButtonItem(name: string): Promise<void> {
|
||||
await this.roleButtons.delete({
|
||||
guild_id: this.guildId,
|
||||
name,
|
||||
});
|
||||
}
|
||||
|
||||
async saveRoleButtonItem(name: string, channelId: string, messageId: string, hash: string): Promise<void> {
|
||||
await this.roleButtons.insert({
|
||||
guild_id: this.guildId,
|
||||
name,
|
||||
channel_id: channelId,
|
||||
message_id: messageId,
|
||||
hash,
|
||||
});
|
||||
}
|
||||
}
|
48
backend/src/data/GuildRoleQueue.ts
Normal file
48
backend/src/data/GuildRoleQueue.ts
Normal file
|
@ -0,0 +1,48 @@
|
|||
import { getRepository, Repository } from "typeorm";
|
||||
import { Reminder } from "./entities/Reminder";
|
||||
import { BaseRepository } from "./BaseRepository";
|
||||
import moment from "moment-timezone";
|
||||
import { DBDateFormat } from "../utils";
|
||||
import { BaseGuildRepository } from "./BaseGuildRepository";
|
||||
import { RoleQueueItem } from "./entities/RoleQueueItem";
|
||||
import { connection } from "./db";
|
||||
|
||||
export class GuildRoleQueue extends BaseGuildRepository {
|
||||
private roleQueue: Repository<RoleQueueItem>;
|
||||
|
||||
constructor(guildId) {
|
||||
super(guildId);
|
||||
this.roleQueue = getRepository(RoleQueueItem);
|
||||
}
|
||||
|
||||
consumeNextRoleAssignments(count: number): Promise<RoleQueueItem[]> {
|
||||
return connection.transaction(async (entityManager) => {
|
||||
const repository = entityManager.getRepository(RoleQueueItem);
|
||||
|
||||
const nextAssignments = await repository
|
||||
.createQueryBuilder()
|
||||
.where("guild_id = :guildId", { guildId: this.guildId })
|
||||
.addOrderBy("priority", "DESC")
|
||||
.addOrderBy("id", "ASC")
|
||||
.take(count)
|
||||
.getMany();
|
||||
|
||||
if (nextAssignments.length > 0) {
|
||||
const ids = nextAssignments.map((assignment) => assignment.id);
|
||||
await repository.createQueryBuilder().where("id IN (:ids)", { ids }).delete().execute();
|
||||
}
|
||||
|
||||
return nextAssignments;
|
||||
});
|
||||
}
|
||||
|
||||
async addQueueItem(userId: string, roleId: string, shouldAdd: boolean, priority = 0) {
|
||||
await this.roleQueue.insert({
|
||||
guild_id: this.guildId,
|
||||
user_id: userId,
|
||||
role_id: roleId,
|
||||
should_add: shouldAdd,
|
||||
priority,
|
||||
});
|
||||
}
|
||||
}
|
16
backend/src/data/entities/RoleButtonsItem.ts
Normal file
16
backend/src/data/entities/RoleButtonsItem.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
||||
|
||||
@Entity("role_buttons")
|
||||
export class RoleButtonsItem {
|
||||
@PrimaryGeneratedColumn() id: number;
|
||||
|
||||
@Column() guild_id: string;
|
||||
|
||||
@Column() name: string;
|
||||
|
||||
@Column() channel_id: string;
|
||||
|
||||
@Column() message_id: string;
|
||||
|
||||
@Column() hash: string;
|
||||
}
|
16
backend/src/data/entities/RoleQueueItem.ts
Normal file
16
backend/src/data/entities/RoleQueueItem.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
||||
|
||||
@Entity("role_queue")
|
||||
export class RoleQueueItem {
|
||||
@PrimaryGeneratedColumn() id: number;
|
||||
|
||||
@Column() guild_id: string;
|
||||
|
||||
@Column() user_id: string;
|
||||
|
||||
@Column() role_id: string;
|
||||
|
||||
@Column() should_add: boolean;
|
||||
|
||||
@Column() priority: number;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue