如何检查机器人是否连接到频道? | discord.py
How to check if bot is connected to a channel? | discord.py
我决定尝试让我的 discord 机器人播放音乐,但我已经卡住了。主要是因为我找不到任何资源来帮助当前版本,我一直在从文档中获取所有内容。但是,我不知道如何检查机器人是否已连接到语音通道。
我试过 if not Client.is_connected():
,但是没有用。如果有任何更新的资源可以帮助我了解 discord.py 语音功能的基础知识,请给我一个 link :) 这是我目前的代码:
# ----- ATTEMPT AT VOICE COMMANDS ------
#discord.opus.load_opus() - what goes in bracket???
@client.command(name="join", pass_ctx=True)
async def join(ctx):
#if not is_connected(): - Client.is_connected() not working
user = ctx.message.author
vc = user.voice.channel
await vc.connect()
await ctx.send(f"Joined **{vc}**")
#else:
# await ctx.send("I'm already connected!")
@client.command(name="disconnect", pass_ctx=True)
async def disconnect(ctx):
# if not is_connected(): - once again can't work it out
vc = ctx.message.guild.voice_client # i don't even know how this worked :D
await vc.disconnect()
#else:
# await ctx.send("I'm not connected to any channels")
@client.command(name="play", pass_ctx=True)
async def play(ctx, songurl=None):
if not songurl: # this works at least
await ctx.send("Please specify a song")
return
if not is_connected(): # once again, how to check if bot is connected?
vc = ctx.message.author.voice.channel
if not vc: # i think this should work
await ctx.send("You're not in a voice channel!")
await vc.connect()
# haven't even worked out anything past this point and it's broken
ps:抱歉把我的整个 vc 部分都扔掉了,但我不太了解
这里真正重要的是播放命令,但我将其他命令包括在内只是因为(正如您从我的评论中看到的那样)我不明白发生了什么。我该怎么办?当前版本有什么好的资源吗?提前致谢。
一个bot可以同时连接多个公会的语音,所以需要获取VoiceClient
for the appropriate guild from Client.voice_clients
and then check VoiceClient.is_connected
:
def is_connected(ctx):
voice_client = get(ctx.bot.voice_clients, guild=ctx.guild)
return voice_client and voice_client.is_connected()
你也可以
client.command()
async def join(ctx):
user = ctx.message.author
vc = user.voice.channel
voice = discord.utils.get(client.voice_clients, guild=ctx.guild) # This allows for more functionality with voice channels
if voice == None: # None being the default value if the bot isnt in a channel (which is why the is_connected() is returning errors)
await vc.connect()
await ctx.send(f"Joined **{vc}**")
else:
await ctx.send("I'm already connected!")
在对我的机器人进行一些试验后,我发现与此类似的东西可能对你有用。它也非常快速和简单。
if ctx.guild.voice_client in bot.voice_clients:
# Do something here
我在 on_message
事件中使用了它,但它也可能适用于您的用例:
if not ctx.guild.voice_client in bot.voice_clients:
# Do something else here
我决定尝试让我的 discord 机器人播放音乐,但我已经卡住了。主要是因为我找不到任何资源来帮助当前版本,我一直在从文档中获取所有内容。但是,我不知道如何检查机器人是否已连接到语音通道。
我试过 if not Client.is_connected():
,但是没有用。如果有任何更新的资源可以帮助我了解 discord.py 语音功能的基础知识,请给我一个 link :) 这是我目前的代码:
# ----- ATTEMPT AT VOICE COMMANDS ------
#discord.opus.load_opus() - what goes in bracket???
@client.command(name="join", pass_ctx=True)
async def join(ctx):
#if not is_connected(): - Client.is_connected() not working
user = ctx.message.author
vc = user.voice.channel
await vc.connect()
await ctx.send(f"Joined **{vc}**")
#else:
# await ctx.send("I'm already connected!")
@client.command(name="disconnect", pass_ctx=True)
async def disconnect(ctx):
# if not is_connected(): - once again can't work it out
vc = ctx.message.guild.voice_client # i don't even know how this worked :D
await vc.disconnect()
#else:
# await ctx.send("I'm not connected to any channels")
@client.command(name="play", pass_ctx=True)
async def play(ctx, songurl=None):
if not songurl: # this works at least
await ctx.send("Please specify a song")
return
if not is_connected(): # once again, how to check if bot is connected?
vc = ctx.message.author.voice.channel
if not vc: # i think this should work
await ctx.send("You're not in a voice channel!")
await vc.connect()
# haven't even worked out anything past this point and it's broken
ps:抱歉把我的整个 vc 部分都扔掉了,但我不太了解
这里真正重要的是播放命令,但我将其他命令包括在内只是因为(正如您从我的评论中看到的那样)我不明白发生了什么。我该怎么办?当前版本有什么好的资源吗?提前致谢。
一个bot可以同时连接多个公会的语音,所以需要获取VoiceClient
for the appropriate guild from Client.voice_clients
and then check VoiceClient.is_connected
:
def is_connected(ctx):
voice_client = get(ctx.bot.voice_clients, guild=ctx.guild)
return voice_client and voice_client.is_connected()
你也可以
client.command()
async def join(ctx):
user = ctx.message.author
vc = user.voice.channel
voice = discord.utils.get(client.voice_clients, guild=ctx.guild) # This allows for more functionality with voice channels
if voice == None: # None being the default value if the bot isnt in a channel (which is why the is_connected() is returning errors)
await vc.connect()
await ctx.send(f"Joined **{vc}**")
else:
await ctx.send("I'm already connected!")
在对我的机器人进行一些试验后,我发现与此类似的东西可能对你有用。它也非常快速和简单。
if ctx.guild.voice_client in bot.voice_clients:
# Do something here
我在 on_message
事件中使用了它,但它也可能适用于您的用例:
if not ctx.guild.voice_client in bot.voice_clients:
# Do something else here