【问题标题】:Check that bot is in channel before on_voice_state_update process在 on_voice_state_update 进程之前检查机器人是否在频道中
【发布时间】:2020-05-31 07:41:49
【问题描述】:

我之前曾问过一个关于这个实际过程的问题,我得到了它的完美运行,但只有一个错误。

async def on_voice_state_update(self, member, before, after):
    def is_connected(member):
        voice_client = get(self.bot.voice_clients, guild=member.guild)
        return voice_client and voice_client.is_connected()

    if is_connected(member):
        await asyncio.sleep(9)
        if member.id == 'id of member' and after.afk and not before.afk:
            prevchannel = int(before.channel.id)
            channel = self.bot.get_channel(prevchannel)
            voice = await channel.connect()
            voice.play(discord.FFmpegPCMAudio('dir of mp3 file'))
            await asyncio.sleep(5)
            await voice.disconnect()
        else:
            pass
    else:
        if member.id == 'id of member' and after.afk and not before.afk:
            prevchannel = int(before.channel.id)
            channel = self.bot.get_channel(prevchannel)
            voice = await channel.connect()
            voice.play(discord.FFmpegPCMAudio('dir of mp3 file'))
            await asyncio.sleep(5)
            await voice.disconnect()
        else:
            pass

我正在尝试检查机器人是否已经连接到语音通道,以便如果多个人在相似的时间(例如 2 秒后)加入 afk,它会等到程序的下一次迭代执行: await asyncio.sleep(10)

问题

我似乎无法让 is_connected 函数工作,尽管我相信我正朝着正确的方向前进。我曾想过尝试获取机器人的用户 ID 并检查它是否连接到语音通道。应该是这样的:

def is_botconnected(member):
    botid = self.bot.get_user('id of bot')
    channel = (all the channels)
if botid in channel.members:
    await asyncio.sleep(9)
    #execute program
else:
    #execute program

【问题讨论】:

    标签: python discord discord.py discord.py-rewrite


    【解决方案1】:

    解决方案

    我设法通过使用bot.voice_clients 让它工作。

    async def on_voice_state_update(self, member, before, after):
        def is_connected(self):
            bot_client = get(self.bot.voice_clients)
            return bot_client and bot_client.is_connected()
    
        if is_connected(self):
            await asyncio.sleep(9)
            #execute program
        else:
            #execute program
    

    self 被使用,因为它是一个 cog。

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2021-08-01
      • 2020-12-22
      • 2020-12-30
      • 2021-07-28
      • 2021-08-18
      • 2023-02-20
      • 1970-01-01
      相关资源
      最近更新 更多