WIP: feat/20-reactions-for-roles #59
@ -82,41 +82,5 @@ Für eine Erklärung wie das alles funktioniert mach einfach /mitgucken für ein
|
||||
|
||||
}
|
||||
|
||||
export async function manageAnnouncementRoles(guild: Guild, reaction: MessageReaction, requestId: string) {
|
||||
const guildId = guild.id
|
||||
logger.info("Managing roles", { guildId, requestId })
|
||||
|
||||
const announcementRole: Role | undefined = (await guild.roles.fetch()).find(role => role.id === config.bot.announcement_role)
|
||||
if (!announcementRole) {
|
||||
logger.error(`Could not find announcement role! Aborting! Was looking for role with id: ${config.bot.announcement_role}`, { guildId, requestId })
|
||||
return
|
||||
}
|
||||
|
||||
const usersWhoWantRole: User[] = (await reaction.users.fetch()).filter(user => !user.bot).map(user => user)
|
||||
|
||||
const allUsers = (await guild.members.fetch())
|
||||
|
||||
const usersWhoHaveRole: GuildMember[] = allUsers
|
||||
.filter(member => member.roles.cache
|
||||
.find(role => role.id === config.bot.announcement_role) !== undefined)
|
||||
.map(member => member)
|
||||
|
||||
const usersWhoNeedRoleRevoked: GuildMember[] = usersWhoHaveRole
|
||||
.filter(userWhoHas => !usersWhoWantRole.map(wanter => wanter.id).includes(userWhoHas.id))
|
||||
|
||||
const usersWhoDontHaveRole: GuildMember[] = allUsers
|
||||
.filter(member => member.roles.cache
|
||||
.find(role => role.id === config.bot.announcement_role) === undefined)
|
||||
.map(member => member)
|
||||
|
||||
const usersWhoNeedRole: GuildMember[] = usersWhoDontHaveRole
|
||||
.filter(userWhoNeeds => usersWhoWantRole.map(wanter => wanter.id).includes(userWhoNeeds.id))
|
||||
|
||||
|
||||
logger.debug(`Theses users will get the role removed: ${JSON.stringify(usersWhoNeedRoleRevoked)}`, { guildId, requestId })
|
||||
logger.debug(`Theses users will get the role added: ${JSON.stringify(usersWhoNeedRole)}`, { guildId, requestId })
|
||||
|
||||
usersWhoNeedRoleRevoked.forEach(user => user.roles.remove(announcementRole))
|
||||
usersWhoNeedRole.forEach(user => user.roles.add(announcementRole))
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
import { Guild, Role, User } from "discord.js";
|
||||
import { Guild, MessageReaction, Role, User } from "discord.js";
|
||||
import { ExtendedClient } from "../structures/client";
|
||||
import { GuildMember } from "discord.js";
|
||||
import { logger } from "../logger";
|
||||
import { config } from "../configuration";
|
||||
import { Maybe } from "../interfaces";
|
||||
|
||||
export default class RoleController {
|
||||
|
||||
@ -9,9 +12,11 @@ export default class RoleController {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
public async addRoleToUser(member: GuildMember, role: Role, guildId: string, requestId: string) {
|
||||
logger.info(`Adding Role ${role.id} to user ${member.id}|${member.user.username}`, { requestId, guildId })
|
||||
return await member.roles.add(role)
|
||||
}
|
||||
private async removeRoleFromUser(member: GuildMember, role: any, guildId: string, requestId: string) {
|
||||
private async removeRoleFromUser(member: GuildMember, role: Role, guildId: string, requestId: string) {
|
||||
logger.info(`Removing Role ${role.id} from user ${member.id}|${member.user.username}`, { requestId, guildId })
|
||||
return await member.roles.remove(role)
|
||||
}
|
||||
|
||||
@ -25,4 +30,48 @@ export default class RoleController {
|
||||
const guildMember = await guild.members.fetch(user)
|
||||
return this.removeRoleFromUser(guildMember, roleToRemove, guild.id, requestId)
|
||||
}
|
||||
|
||||
public async getAnnouncementRoleForGuild(guild: Guild, requestId: string): Promise<Maybe<Role>> {
|
||||
const mediaRole = this.getMediaRoleForGuild(guild.id)
|
||||
return guild.roles.fetch()
|
||||
.then(fetchedRoles => fetchedRoles.find(role => role.id === mediaRole.id))
|
||||
.catch(error => { logger.error(`Could not find announcement_role with id ${config.bot.announcement_role}. Error: ${error}`, { requestId, guildId: guild.id }) })
|
||||
}
|
||||
|
||||
public async manageAnnouncementRoles(guild: Guild, reaction: MessageReaction, requestId: string) {
|
||||
const guildId = guild.id
|
||||
logger.info("Managing roles", { guildId, requestId })
|
||||
|
||||
|
||||
const announcementRole = await this.getAnnouncementRoleForGuild(guild, requestId)
|
||||
if (!announcementRole)
|
||||
throw new Error(`No announcementRole found in guild ${guildId}`)
|
||||
|
||||
const usersWhoWantRole: User[] = (await reaction.users.fetch()).filter(user => !user.bot).map(user => user)
|
||||
|
||||
magnetotail
commented
add error to previous line to be consistent with rest of class. Also maybe put checking to getAnnouncementRoleForGuild, so calling methods can rely on the role to be there? add error to previous line to be consistent with rest of class. Also maybe put checking to getAnnouncementRoleForGuild, so calling methods can rely on the role to be there?
kenobi
commented
a50ac1716f5eccf38d88763742d26e573b460dca
|
||||
const allUsers = await guild.members.fetch()
|
||||
|
||||
const usersWhoHaveRole: GuildMember[] = allUsers
|
||||
.filter(member => member.roles.cache
|
||||
.find(role => role.id === announcementRole.id) !== undefined)
|
||||
.map(member => member)
|
||||
|
||||
const usersWhoNeedRoleRevoked: GuildMember[] = usersWhoHaveRole
|
||||
.filter(userWhoHas => !usersWhoWantRole.map(wanter => wanter.id).includes(userWhoHas.id))
|
||||
|
||||
const usersWhoDontHaveRole: GuildMember[] = allUsers
|
||||
.filter(member => member.roles.cache
|
||||
.find(role => role.id === announcementRole.id) === undefined)
|
||||
.map(member => member)
|
||||
|
||||
const usersWhoNeedRole: GuildMember[] = usersWhoDontHaveRole
|
||||
.filter(userWhoNeeds => usersWhoWantRole.map(wanter => wanter.id).includes(userWhoNeeds.id))
|
||||
|
||||
|
||||
logger.debug(`Theses users will get the role removed: ${JSON.stringify(usersWhoNeedRoleRevoked)}`, { guildId, requestId })
|
||||
logger.debug(`Theses users will get the role added: ${JSON.stringify(usersWhoNeedRole)}`, { guildId, requestId })
|
||||
|
||||
usersWhoNeedRoleRevoked.forEach(user => this.removeRoleFromUser(user, announcementRole, guild.id, requestId))
|
||||
usersWhoNeedRole.forEach(user => this.addRoleToUser(user, announcementRole, guild.id, requestId))
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ import { ApplicationCommandDataResolvable, Client, ClientOptions, Collection, Gu
|
||||
import fs from 'fs';
|
||||
import { ScheduledTask, schedule } from "node-cron";
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { manageAnnouncementRoles } from "../commands/announce";
|
||||
import { config } from "../configuration";
|
||||
import { Maybe } from "../interfaces";
|
||||
import { JellyfinHandler } from "../jellyfin/handler";
|
||||
@ -177,7 +176,7 @@ export class ExtendedClient extends Client {
|
||||
const reactions = message.reactions.resolve("🎫")
|
||||
//logger.debug(`reactions: ${JSON.stringify(reactions, null, 2)}`, { guildId: guild.id, requestId })
|
||||
if (reactions) {
|
||||
manageAnnouncementRoles(message.guild, reactions, requestId)
|
||||
this.roleController.manageAnnouncementRoles(message.guild, reactions, requestId)
|
||||
} else {
|
||||
logger.error("Did not get reactions! Aborting!", { guildId: guild.id, requestId })
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user
method called reactions but parameter is singular
1f372b0aac