fix(megahal): replace input mentions with raw usernames

This commit is contained in:
2024-08-07 12:15:01 +03:00
parent f52557eb33
commit 2883aa3442
2 changed files with 20 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ import path from 'node:path'
import { fileExists, getFileSize } from '@/utils/file_utils'
import { formatBytes } from '@/utils/string_utils'
import { isWhitelisted } from '@/lib/whitelist'
import { getMentionUsername } from '@/utils/discord_utils'
let muted = false
const BRAIN_FILE = path.resolve(process.cwd(), 'data', 'brain.dat')
// every 20 messages
@@ -75,7 +76,7 @@ export async function trainMegahal(message: Discord.Message, replyChance: number
(msg, trigger) =>
msg.toLowerCase().startsWith(trigger.toLowerCase()) ? msg.substring(trigger.length) : msg,
message.content,
)
).replace(/<@!?(\d+)>/g, (_, id) => getMentionUsername(message, id))
logger.debug('Learning from message:', JSON.stringify(input))
if (totalMsgCount >= SAVE_RATE) {

View File

@@ -4,3 +4,21 @@ export async function isAdministrator(member: Discord.GuildMember): Promise<bool
// TODO check role permissions
return member.permissions.has(PermissionsBitField.Flags.ManageGuild)
}
/**
* Gets username from mention.
*
* If clean is true (default), will try to fetch nickname from CA style - "Real Name (Nickname)"
*/
export function getMentionUsername(message: Discord.Message, userId: string, clean = true): string {
const displayName = message.mentions.members!.get(userId)?.nickname ?? 'Unknown'
if (clean) {
const startParenIdx = displayName.indexOf('(')
const endParenIdx = displayName.indexOf(')')
if (startParenIdx !== -1 && endParenIdx !== -1) {
return displayName.substring(startParenIdx + 1, endParenIdx)
}
return displayName
}
return displayName
}