Javascript 在Discord.js中计算单个用户的语音状态变化

Javascript 在Discord.js中计算单个用户的语音状态变化,javascript,discord,discord.js,Javascript,Discord,Discord.js,创建一个机器人,并试图找出某个用户何时在说话,在语音状态发生变化时播放音频。当前,如果它检测到频道内任何用户的语音状态发生变化,而不是某个用户的语音状态发生变化,并且无法确切了解原因,则会播放音频。每次有新用户发言时,Console都会记录一个新用户。您的结构做得很好,不过if(user&&speaking)可以很容易地修复。您在'speaking'函数的开头调用变量“user”,尽管您在过去的let user=message.indications.users.first()中已经声明了变量u

创建一个机器人,并试图找出某个用户何时在说话,在语音状态发生变化时播放音频。当前,如果它检测到频道内任何用户的语音状态发生变化,而不是某个用户的语音状态发生变化,并且无法确切了解原因,则会播放音频。每次有新用户发言时,Console都会记录一个新用户。

您的结构做得很好,不过
if(user&&speaking)
可以很容易地修复。您在'speaking'函数的开头调用变量“user”,尽管您在过去的
let user=message.indications.users.first()中已经声明了变量user
,要达到预期的结果,应该首先从这一行
连接中删除“user”变量。on('speaking',(user,speaking)=>{
,并将
if(user&&speaking){
替换为
if(user==speaking)
。 不同的是,现在你会说“如果提到的用户正在说话”,那么你就能够触发一个结果

我希望这是有帮助的

client.on('message', async message => {

    const voiceChannel = message.member.voice.channel;
    let user = message.mentions.users.first();
    let cleanMessage = message.content.toLowerCase();

    // starts by checking if message contains valid content
    if (!cleanMessage.match(start) && !cleanMessage.startsWith('quit') && !user) return;

    // join case
    if (cleanMessage.match(start) && user && voiceChannel) {

        console.log('connected!');
        
        voiceChannel.join()
        .then(connection => {

            connection.on('speaking', (user, speaking) => {
                if(user && speaking) {
                    dispatch = connection.play(fs.createReadStream(require("path").join(__dirname, './shush.webm')), { type: 'webm/opus'});
                    console.log(user);
                }
            })

            console.log(`${user.username} shushed!`);
            setTimeout(() => { voiceChannel.leave() }, 10000);

        }).catch(err => console.log(err));

        message.channel.send(`${user.username} shut up.`);
    }