Я ранее задавал вопрос о фактическом процессе этого, и у меня он работал отлично, но есть только одна ошибка.
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, хотя я считаю, что иду в правильном направлении. Я подумал о том, чтобы попытаться получить идентификатор пользователя бота и проверить, подключен ли он к голосовому каналу. Это будет примерно так:
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