当人们耳聋时,discord 机器人不会感动他们

discord bot isn't moving people when they deafen

基本上,我试图让我的机器人在人们耳聋时立即将他们转移到 afk,但是当我测试它时没有任何反应。我用过 console.log 当有人耳聋但仍然没有。

代码:

const Discord = require("discord.js");

const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_VOICE_STATES", "GUILD_MEMBERS", "GUILD_PRESENCES"] });



client.on("voiceStateUpdate", (oldState, newState) =>
{


    let memchange = newState.member;
    if (memchange.selfDeaf)
    {
        console.log('User has deafened');
        memchange.setChannel(afkchannelid);
    }
});



client.once('ready', () => {
    console.log('Discord bot is now online')
    
    });
    

我原本认为您的问题可能是一个简单的意图问题,但是,经过进一步调查,这是一个关于您使用 newState.member.selfDeaf 的问题。更正后的代码附有简短说明:

查看有关 voiceState 的官方 Discord.js 文档:

根据您的操作,您正在尝试访问 newState.member.selfDeaf,而 newState.member 没有 selfDeaf 属性(GuildMember Documentation);因此 if 语句不会评估为真,也不会 运行.

const Discord = require("discord.js");

const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "GUILD_VOICE_STATES", "GUILD_MEMBERS", "GUILD_PRESENCES"] });



client.on("voiceStateUpdate", (oldState, newState) =>
{
    if (newState.selfDeaf)
    {
        console.log('User has deafened');
        newState.member.setChannel(afkchannelid);
    }
});



client.once('ready', () => {
    console.log('Discord bot is now online')
});