我具有自动渠道功能,
所有更改均通过voiceStateUpdate事件触发。
一切正常,但是当用户与服务器断开连接时,不会调用voiceStateUpdate ...
那么我怎么知道用户是否断开与服务器的连接?
更新:
我终于在voiceStateUpdate中得到它,我只是不检查newMember还是oldMember,而是直接由客户端而不是由用户来更新频道。
答案 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。