Discord.net:用户最初连接到语音通道时未触发 UserVoiceStateUpdated 事件

Discord.net: UserVoiceStateUpdated Event not fired when User initially connects to voice channel

我正在尝试让我的机器人识别任何公会成员何时加入特定的语音频道,然后对其做出反应。我试图通过订阅 UserVoiceStateUpdated 事件来做到这一点。这基本上按预期工作,但是当用户首次加入任何语音频道时,不会触发该事件。当用户随后从一个语音通道切换到另一个语音通道时,它工作正常。一旦您完全断开用户与语音的连接并再次重新连接,就需要在执行我的事件处理程序之前更改语音通道。

我是不是做错了什么?这是预期的行为吗?如果是这样,我可以通过其他方式实现吗?


再次澄清一下,这就是我正在做的事情以及机器人对此的反应:

  1. 用户连接到语音 - 未触发 UserVoiceStateUpdated
  2. 然后用户切换到另一个语音通道 - UserVoiceStateUpdated 正确触发我的事件处理程序
  3. 用户再次切换语音通道 - UserVoiceStateUpdated 再次触发
  4. 用户完全断开与语音的连接 - UserVoiceStateUpdated 触发器
  5. 用户重新连接到任何语音通道 - 未执行 UserVoiceStateUpdated 处理程序
  6. 用户切换语音通道 - UserVoiceStateUpdated 按预期触发

尝试使用 .net Framework 4.7 和 .net Core 2.0,以及 Discord.net 版本 1.0、1.0.1 和 1.0.2。总是一样。

所以在添加更多日志记录后,我发现每次事件未触发时都会记录此消息:"A UserVoiceStateUpdated handler is blocking the gateway task."

然后我完全从头开始,创建了一个新的 discord 应用程序、bot 用户等,并且成功了。我无法真正解释它是如何解决问题的,但确实如此。