如果在某个语音频道中,需要帮助断开成员的连接

Posted

技术标签:

【中文标题】如果在某个语音频道中,需要帮助断开成员的连接【英文标题】:Need help disconnecting members if in a certain voice channel 【发布时间】:2020-09-25 07:29:52 【问题描述】:

因此,由于不和谐,我创建了一个 AFK 语音通道并将服务器设置为如果成员 AFK 15 分钟,它会将其发送到 AFK 语音通道。但我想让我的机器人立即将它们与频道断开连接。

我想到了两种方法,使用间隔每秒检查语音通道,或者如果 VoiceStateUpdate 是被移动到语音通道的成员,则添加一个侦听器。我正在尝试限制主文件中的侦听器数量,因此在client.once('ready', () => ) 中,我使用了一个间隔来每秒检查一次语音通道。

setInterval(function () 
      const VoiceChannel = "718634068543012924"
  if(VoiceChannel.members.length > 0) 
    const now = new Date()
    const time = (`$now.getDay(), $now.getDate()/$now.getMonth()/$now.getFullYear() $now.getHours():$now.getMinutes():$now.getSeconds()`)
      member.voice.kick("AFK");
      console.log(`AFK Member kicked.`)
  
  else 
      console.log("No one there bud.")
  
, 1000)

问题在于 members.length ,它带有错误

TypeError: Cannot read property 'length' of undefined
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)

我已经尝试过 .size 并且仍然无法正常工作,我真的不知道还能尝试什么或我做错了什么,我已经检查了 discord.js.org 文档,但我仍然感到困惑。因此,如果有任何方法可以在不添加其他侦听器的情况下做到这一点,您可以帮助我,我们将不胜感激。如果没有,我只会把它吸起来并添加一个。谢谢。

爱马仕

【问题讨论】:

【参考方案1】:

在检查 if 语句中的条件之前,您将 VoiceChannel 定义为字符串,导致 VoiceChannels.members 属性未定义。

使用您的客户端类实例正确定义包含语音通道的变量应该有望解决问题:

setInterval(function () 
    const voiceChannel = <Client>.channels.cache.get("718634068543012924")
    if(voiceChannel.members.length > 0) 
        const now = new Date()
        const time = (`$now.getDay(), $now.getDate()/$now.getMonth()/$now.getFullYear() $now.getHours():$now.getMinutes():$now.getSeconds()`)
        member.voice.kick("AFK");
        console.log(`AFK Member kicked.`)
     else 
        console.log("No one there bud.")
    
, 1000)

【讨论】:

什么是clientObjects?是否等于new Client()?。如果是这样,您应该使用&lt;Client&gt; 来暗示它是一个实例。 @Karizma discord.js.org/#/docs/main/stable/class/Client 只是这个类的一个实例。我会更新答案以提供更多说明。 我看到你已经对帖子进行了编辑,所以我猜你意识到我不是 OP。无论如何你应该注意&lt;Client&gt;.channels不是v12中的集合,而是&lt;Client&gt;.channels.cache,最后&lt;Collection&gt;.get("id")&lt;Collection&gt;["id"]更标准 我已经尝试过你的代码,但它给了我错误:TypeError: Cannot read property 'members' of undefined at Timeout._onTimeout (C:\Users\lukel\Desktop\Boit remake\index.js:29:21) at listOnTimeout (internal/timers.js:549:17) at processTimers (internal/timers.js:492:7) 我假设定义 voiceChannel 不起作用,因为成员未定义:/ @Hermes 您是否按原样复制代码?尝试将 voiceChannel 变量定义为 client.channels.cache.get("718634068543012924")

以上是关于如果在某个语音频道中,需要帮助断开成员的连接的主要内容,如果未能解决你的问题,请参考以下文章

如果猜测错误,将用户与频道断开连接 DiscordPy

有没有办法让我的不和谐机器人在播放完歌曲后断开与语音频道的连接?

如何使用 discord.py 机器人断开人们与语音频道的连接?

离开语音频道

(discord.py) 获取特定语音频道中所有成员的列表

django 频道如何知道客户端已断开连接?