Fix error in log userMention() function

The function assumed a GuildMember object where a new
IConfigAccessibleMember object was used instead.
This commit is contained in:
Dragory 2021-08-14 15:42:28 +03:00
parent fa18c234d6
commit adbcbe9524
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
2 changed files with 37 additions and 4 deletions

View file

@ -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<LogsPluginType>,
@ -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) {

View file

@ -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<any>,
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;
}