在 on_voice_state_update 进程之前检查机器人是否在频道中
Check that bot is in channel before on_voice_state_update process
我之前已经问过一个关于这个实际过程的问题,我让它运行得很好,但只有一个错误。
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
我正在尝试检查机器人是否已经连接到语音通道,以便如果有多个人同时加入 afk(比如 2 秒后),它会等到程序的下一次迭代执行: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
解决方案
我设法通过使用 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 是因为它是一个齿轮。
我之前已经问过一个关于这个实际过程的问题,我让它运行得很好,但只有一个错误。
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
我正在尝试检查机器人是否已经连接到语音通道,以便如果有多个人同时加入 afk(比如 2 秒后),它会等到程序的下一次迭代执行: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
解决方案
我设法通过使用 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 是因为它是一个齿轮。