如何检测用户何时加入语音频道?

Posted

技术标签:

【中文标题】如何检测用户何时加入语音频道?【英文标题】:How to detect when a user joins a voice channel? 【发布时间】:2021-01-28 05:05:42 【问题描述】:

我目前正在尝试为我的服务器制作一个机器人,我想做的一件事是让它检测用户何时加入任何语音频道并让它发送消息。我个人无法弄清楚或在互联网上找到任何答案,因为大多数时候人们是根据命令检测它,而我希望它是被动的。我知道 voiceStateUpdate 已更改,并且有些事情与我过去看到其他人使用它的方式不同。

如果有人有任何解决方案,请告诉我,谢谢。

【问题讨论】:

【参考方案1】:
client.on('voiceStateUpdate', (oldState, newState) => 
    if(newState.channelID === null) //left
        console.log('user left channel', oldState.channelID);
    else if(oldState.channelID === null) // joined
        console.log('user joined channel', newState.channelID);
    else // moved
        console.log('user moved channels', oldState.channelID, newState.channelID);
);

【讨论】:

【参考方案2】:

在 discord.js v.12 中,您需要使用的侦听器确实是 voiceStateUpdate。它有参数oldStatenewState。有了这些,您可以检测到很多东西,包括 member 对象。

使用它,您可以使用类似的方法来检测用户或机器人是否正在连接或断开语音通道。

client.on('voiceStateUpdate', (oldState, newState) => 
    // check for bot
    if (oldState.member.user.bot) return;

    // the rest of your code
)

【讨论】:

非常感谢,由于某种原因,我过于复杂了哈哈。 先查看文档总是一个好主意 :) 这并没有说明如何判断它们是断开连接还是连接,只是两者之一。文档没有说,因为它通常很糟糕。 @stackers 看看this 能不能帮到你

以上是关于如何检测用户何时加入语音频道?的主要内容,如果未能解决你的问题,请参考以下文章

加入机器人 discord.js 的语音频道后如何忽略相同的命令

Discord.js 尝试在用户加入语音频道时发送消息

如何使用 Discord.py Cogs 使 Discord Bot 加入语音频道并在成员加入频道时播放音频文件

如何检测用户是不是因网络断开而离开凤凰频道?

机器人加入公会的所有语音频道并播放文件

C# Discord.NET 加入语音频道时出错