为了账号安全,请及时绑定邮箱和手机立即绑定

如何检测成员何时加入和离开语音频道

如何检测成员何时加入和离开语音频道

幕布斯6054654 2023-08-18 14:31:43
我正在开发一个不和谐的机器人,它需要检测用户何时加入和离开频道。我已经在第 4 行尝试过这个,因为如果用户的连接没有改变,它就不会运行。但这是行不通的。这是我的整个代码部分。client.on('voiceStateUpdate', (oldState, newState) => {// check for botif (oldState.member.user.bot) return;if (oldState.member.voice === newState.member.voice) return;//<- hereclient.channels.cache.get('777782275004825640').send(`${oldState.member} joined`);});我也尝试过.connection但它不适用于我当前的设置。任何帮助都会很棒!
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

我找到了!经过一些测试,我发现当频道更新时,会发生以下四种情况之一。

  1. 如果用户加入则oldState.channelID返回null

  2. 如果用户返回newState.channelIDnull

  3. 如果用户将自己静音或被震聋,则oldState.channelID等于newState.channelID

  4. 如果用户移动的频道 oldState.channelID不等于newState.channelID

Discord.Client()的设置为client,所以如果你的不同,请更改

client.on('voiceStateUpdate', (oldState, newState) => {

    if(oldState.channelID === newState.channelID) {

        console.log('a user has not moved!')

    }

    if(oldState.channelID != null && newState.channelID != null && newState.channelID != oldState.channelID) {

        console.log('a user switched channels')

    }

    if(oldState.channelID === null) {

        console.log('a user joined!')

    }

    if (newState.channelID === null) {

        console.log('a user left!')

    }

});


查看完整回答
反对 回复 2023-08-18
?
慕慕森

TA贡献1856条经验 获得超17个赞

尝试这个片段,请让我知道它对你有什么作用。


let oldChannel = oldState.voiceChannel;

let newChannel = newState.voiceChannel;


if(oldChannel === undefined && newChannel !== undefined) {

  // User has joined a channel

} else if(newChannel === undefined) {

  // User has left a channel

}


查看完整回答
反对 回复 2023-08-18
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信