zappyzep/backend/src/data/GuildReactionRoles.ts
Dragory d2a6cb1684 Add --exclusive/-e to !reaction_roles
When reaction roles are set as exclusive, a user can only have 1
reaction role from that message. Others are removed automatically when
picking a role if needed.
2019-11-30 23:39:32 +02:00

63 lines
1.5 KiB
TypeScript

import { ReactionRole } from "./entities/ReactionRole";
import { BaseGuildRepository } from "./BaseGuildRepository";
import { getRepository, Repository } from "typeorm";
export class GuildReactionRoles extends BaseGuildRepository {
private reactionRoles: Repository<ReactionRole>;
constructor(guildId) {
super(guildId);
this.reactionRoles = getRepository(ReactionRole);
}
async all(): Promise<ReactionRole[]> {
return this.reactionRoles.find({
where: {
guild_id: this.guildId,
},
});
}
async getForMessage(messageId: string): Promise<ReactionRole[]> {
return this.reactionRoles.find({
where: {
guild_id: this.guildId,
message_id: messageId,
},
});
}
async getByMessageAndEmoji(messageId: string, emoji: string): Promise<ReactionRole> {
return this.reactionRoles.findOne({
where: {
guild_id: this.guildId,
message_id: messageId,
emoji,
},
});
}
async removeFromMessage(messageId: string, emoji: string = null) {
const criteria: any = {
guild_id: this.guildId,
message_id: messageId,
};
if (emoji) {
criteria.emoji = emoji;
}
await this.reactionRoles.delete(criteria);
}
async add(channelId: string, messageId: string, emoji: string, roleId: string, exclusive?: boolean) {
await this.reactionRoles.insert({
guild_id: this.guildId,
channel_id: channelId,
message_id: messageId,
emoji,
role_id: roleId,
is_exclusive: Boolean(exclusive),
});
}
}