From adbcbe9524af869877e840ea3e8224c7fcb258f5 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Sat, 14 Aug 2021 15:42:28 +0300 Subject: [PATCH] Fix error in log userMention() function The function assumed a GuildMember object where a new IConfigAccessibleMember object was used instead. --- .../src/plugins/Logs/util/getLogMessage.ts | 22 +++++++++++++++---- backend/src/utils/configAccessibleObjects.ts | 19 ++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/backend/src/plugins/Logs/util/getLogMessage.ts b/backend/src/plugins/Logs/util/getLogMessage.ts index 7ffd0a17..8b77b736 100644 --- a/backend/src/plugins/Logs/util/getLogMessage.ts +++ b/backend/src/plugins/Logs/util/getLogMessage.ts @@ -14,6 +14,11 @@ import { } from "../../../utils"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin"; import { FORMAT_NO_TIMESTAMP, LogsPluginType, TLogChannel } from "../types"; +import { + getConfigAccessibleMemberLevel, + IConfigAccessibleMember, + memberToConfigAccessibleMember, +} from "../../../utils/configAccessibleObjects"; export async function getLogMessage( pluginData: GuildPluginData, @@ -48,17 +53,26 @@ export async function getLogMessage( const mentions: string[] = []; for (const userOrMember of usersOrMembers) { let user; - let member; + let member: IConfigAccessibleMember | null = null; if (userOrMember.user) { - member = userOrMember; + member = userOrMember as IConfigAccessibleMember; user = member.user; } else { user = userOrMember; - member = await resolveMember(pluginData.client, pluginData.guild, user.id); + const apiMember = await resolveMember(pluginData.client, pluginData.guild, user.id); + if (apiMember) { + member = memberToConfigAccessibleMember(apiMember); + } } - const memberConfig = (await pluginData.config.getMatchingConfig({ member, userId: user.id })) || ({} as any); + const level = member ? getConfigAccessibleMemberLevel(pluginData, member) : 0; + const memberConfig = + (await pluginData.config.getMatchingConfig({ + level, + memberRoles: member ? member.roles.map(r => r.id) : [], + userId: user.id, + })) || ({} as any); // Revert to old behavior (verbose name w/o ping if allow_user_mentions is enabled (for whatever reason)) if (config.allow_user_mentions) { diff --git a/backend/src/utils/configAccessibleObjects.ts b/backend/src/utils/configAccessibleObjects.ts index 9319fc08..2e80c7f0 100644 --- a/backend/src/utils/configAccessibleObjects.ts +++ b/backend/src/utils/configAccessibleObjects.ts @@ -11,6 +11,7 @@ import { User, } from "discord.js"; import { UnknownUser } from "src/utils"; +import { GuildPluginData } from "knub"; export interface IConfigAccessibleUser { id: Snowflake | string; @@ -180,3 +181,21 @@ export function stickerToConfigAccessibleSticker(sticker: Sticker): IConfigAcces return toReturn; } + +export function getConfigAccessibleMemberLevel( + pluginData: GuildPluginData, + member: IConfigAccessibleMember, +): number { + if (member.id === pluginData.guild.ownerId) { + return 99999; + } + + const levels = pluginData.fullConfig.levels ?? {}; + for (const [id, level] of Object.entries(levels)) { + if (member.id === id || member.roles?.find(r => r.id === id)) { + return level as number; + } + } + + return 0; +}