用户与服务器断开连接时,无法获取voiceStateUpdate

时间:2019-08-22 11:58:29

标签: node.js discord discord.js

我具有自动渠道功能,

所有更改均通过voiceStateUpdate事件触发。

一切正常,但是当用户与服务器断开连接时,不会调用voiceStateUpdate ...

那么我怎么知道用户是否断开与服务器的连接?

更新:

我终于在voiceStateUpdate中得到它,我只是不检查newMember还是oldMember,而是直接由客户端而不是由用户来更新频道。

3 个答案:

答案 0 :(得分:0)

当成员通过离开公会与语音通道断开连接时,当前没有发出voiceStateUpdate事件。这是Discord本身的限制,而不是库的限制。

我建议使用guildMemberRemove事件,该事件发出一个GuildMember对象。您可以使用该对象在公会中的所有语音通道中循环,并检查成员离开时与哪个语音通道断开连接。

答案 1 :(得分:0)

您可以保存语音通道中的用户,然后检查离开公会的用户是否在列表中。

答案 2 :(得分:0)

测试后,voiceStatusUpdate不会在用户退出时触发。 This seems to be an issue with Discord itself. guildMemberRemove事件确实会触发。因此,要变通解决此问题,您必须创建一个包含用户ID的数组,如果成员离开,请检查他们是否在语音通道中。如果要监视多个通道,可以将所有通道放在一个对象中,该对象以通道ID为键,并以参与者数组(使用其ID来保存内存)作为值。

根据您选择的方法,结果对象可能看起来像这样。

{
    "channel1ID": ["member1ID", "member2ID"],
    "channel2ID": ["member3ID", "member4ID"]
}

现在,当成员断开连接时,只需从其所在的语音通道数组中删除其名称即可。当成员离开时,请检查每个数组的ID。使用此功能,您还可以获得会员原来所属频道的ID。