10 秒后无法让机器人断开连接

Can't get the bot to disconnect after 10 seconds

我试图让我的 discord.py 机器人在加入 10 秒后断开连接。到目前为止,我可以让它加入,播放音频文件,但在设定的秒数后还没有离开。我有一个离开的离开功能,但我想将它添加到执行所有操作的现有功能中

import discord
from discord.ext import commands
from discord.voice_client import VoiceClient
import youtube_dl
import time

TOKEN = 'mytoken'

intents = discord.Intents.default()
intents.members = True
players = {}


client = commands.Bot(command_prefix='.')

@client.event
async def on_ready():
  print('bot online')

@client.command(pass_context=True)
async def leave(ctx):
  server = ctx.message.guild.voice_client
  await server.disconnect() 


@client.event
async def on_voice_state_update(member, before, after):
  if not before.channel and after.channel and member.id == 227490621084925953:
    channel = client.get_channel(967887213939523584)
    await channel.send('KARAN IS HERE')
    voiceChannel = client.get_channel(821051726899052624)
    vc = await voiceChannel.connect() 
    vc.play(discord.FFmpegPCMAudio(r"C:\Users\Amarn\OneDrive - Da Vinci College\Da Vinci College\software_developen\Assignments\jaar_1\periode_1\own_projects\discord\punjabi.mp3"), after=lambda e: print('done', e))
    time.sleep(10)   
    leave()

client.run(TOKEN)    

命令装饰完成后不能调用。您可以获得的最接近的是使用 invoke,但这需要创建上下文。

相反,只需将其内联。您可以从成员那里获取语音状态更新所涉及的公会。除了执行无效的 leave(),您还可以执行:

await member.guild.voice_client.disconnect()

leave函数需要在公会内部调用(使用.leave)。您需要做的是不要在 on_voice_state_update.

中调用 leave()

VoiceChannel#connect函数returns一个VoiceProtocol对象。所以,如果你使用 await vc.disconnect() 而不是 leave() 它应该可以正常工作