javascript - 如何使用 Discord.js v13 实时获取发言状态

标签 javascript discord discord.js

我尝试使用 discord.js v13 实时检测每个成员是否在语音 channel 上讲话。 换句话说,我想在我的应用程序中重现不和谐的绿色圆圈。 但是,我找不到合适的代码示例或文章。 你能给我一些建议吗?

编辑:

根据建议,我能够解决它。 The example of Recorder BOT很有用。 代码示例如下所示。

const { Client, Intents, VoiceChannel } = require('discord.js')
const { joinVoiceChannel, getVoiceConnection, entersState, VoiceConnectionStatus } = require('@discordjs/voice');
const client = new Client({ intents: ['GUILD_VOICE_STATES', 'GUILD_MESSAGES', 'GUILDS'] });

client.on("messageCreate", async (message) => {
  if(message.content.toLowerCase() === "test") {
    var connection = getVoiceConnection(message.guildId)
    if(!connection){
      connection = joinVoiceChannel({
        channelId: message.member.voice.channelId,
        guildId: message.guildId,
        adapterCreator: message.guild.voiceAdapterCreator,
        selfDeaf: false,
        selfMute: true,
      });
    }
    try {
      await entersState(connection, VoiceConnectionStatus.Ready, 20e3);
      connection.receiver.speaking.on("start", (userId) => {
        console.log(  `${userId} start`  );
      });
      connection.receiver.speaking.on("end", (userId) => {
        console.log(  `${userId} end`  );
      });
      console.log(  "Ready"  );
    } catch (error) {
      console.warn(error);
    }

  }
});

client.login('YOUR-TOKEN')

最佳答案

搜索这个似乎表明这曾经是可能的,但众所周知被破坏了,因为事件不会触发,或者只会触发一次。

client.voiceStateUpdate 事件曾经为您提供一个具有说话属性的 VoiceState,它会告诉您是否有人在说话(这似乎从未真正起作用)。

VoiceState 的当前 discord.js 文档显示此属性不再存在,并且您不能单独使用 discord.js 来完成您要问的事情。

编辑:根据下面 MrMythical 的评论,discord.js/voice 有 voiceRecievers,它公开了 voiceReciever.speakingMap.users ,当前正在说话的用户的 map 。你可以通过注册一个监听器来获取它的事件。

关于javascript - 如何使用 Discord.js v13 实时获取发言状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70770884/

相关文章:

javascript - 如果字段值从加载的表单默认值更改,则禁用/启用按钮

javascript - 如何在 Canvas 中显示组和非组形状的尺寸

javascript - 如何创建适合移动设备的响应式菜单?

python - 限制命令

javascript - 如何使用discord.js 创建具有权限的discord 类别?

javascript - Discord.js 等级系统

javascript - HTML onclick 和 href

javascript - toFixed 不是一个函数吗?

javascript - discord.js 禁用 “interaction failed”

javascript - 有没有办法检测特定消息的消息 react ?