防止用户在 Discord 的昵称前加上点(discord.js / Discord Bot)

Prevent users from putting dots in front of their nicknames on Discord (discord.js / Discord Bot)

我正在尝试编写一个脚本来检测用户是否以及何时将他们在 discord 上的名称更改为 "bob" 中的“.bob”之类的名称,它会禁止此更改并将其保留为"bob".

if (user.nickname.startsWith(".")) {
    user.nickname = "bob";
}

尝试用以下方法替换所有“.”在凝视

user.nickname = user.nickname.replace(/\./g,'');

Codepen 供参考:https://codepen.io/YasirKamdar/pen/papGzK

您可以使用 guildMemberUpdate event to check when a member changes their nickname and then you can check if the new nickname startsWith a '.',下面是一个示例:

我更喜欢使用 displayName 而不是 nickname,因为成员没有昵称,他们的 nickname 将 return null

client.on('guildMemberUpdate', (oldMember, newMember) => {  // this event triggers when a member changes their nickname.
    if (newMember.displayName.startsWith('.')) { // checks if the new nickname starts with a .
        newMember.setNickname(oldMember.displayName) //changes the member's nickname back to their old nickname
            .catch(console.error);
    }
});

此外,请记住,这仅在成员的 highestRole 's position 低于机器人的 highestRole 位置时才有效,因此您可能需要首先检查 .catch()[ 中的句柄=24=]

Discord.js 有一个名为 guildMemberUpdate 的事件侦听器。当用户更新昵称时会执行此事件侦听器,因此您可以利用此事件侦听器发挥自己的优势。例如,

Client.on("guildMemberUpdate", (past, current) => {
    if (current.displayName.startsWith(".")) {
        current.setNickname(past.displayName);
    }
});

注意:为了使此代码正常工作,您的机器人必须具有 MANAGE_NICKNAMES 权限。 希望这对您有所帮助。