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()
它应该可以正常工作
我试图让我的 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()
它应该可以正常工作