我目前正在为我的不和谐服务器开发一个discord.py重写(1.3.3)机器人。目前,我正试图让机器人在语音频道中播放音乐。根据discord.py留档,您将使用函数channel.connect()连接到语音通道,该通道将返回VoiceClient对象。
然而,我从未从通道中获得VoiceClient对象。连接()。机器人确实加入了我的频道,但它似乎陷入了一个无限循环。在“wait channel.connect()”行之后没有执行任何操作,因此不会打印“test”行。当我在服务器中更新bot的角色时,它会工作一次,但在我重新启动bot后,它将不再工作。
# This is just a function, not the command the user calls. The context is passed through
async def join(ctx):
voice_status = ctx.author.voice
# Checking if author voice_status is not none
if voice_status:
# Getting the channel of the author
channel = voice_status.channel
if ctx.voice_client is None:
# Connect the bot
vc = await channel.connect()
print("test")
我在github和overflow上发现了一些线程,人们遇到了相同的问题,但他们从未解决过。我确信代码是正确的。
我已经尝试重新安装和更新discord。皮耶。我还在discord API服务器上寻求帮助,但他们无法复制我的问题。
这是我的第一个溢出帖子,所以如果我的帖子有任何问题,我提前道歉。
干杯
这是老问题,但我花了很长时间自己解决这个问题,我还没有在网上找到任何答案。我的问题是我的机器人没有声音的意图。如果你的机器人只适合像你朋友这样的一小群人,只需设置intents
todiscord即可。意图。所有()
都可以工作。否则,您可以手动选择它们。
我删除了你的评论并添加了我自己的#评论
voice_status = ctx.author.voice
if voice_status: # this check does nothing. This is a discord.VoiceState object
channel = voice_status.channel
# channel is None if you are not connected to a voice channel
# channel is a Channel object if you are connected to a voice channel
if ctx.voice_client is None:
# I may be wrong but if I read the docs right this returns the voice client of the guild, something semi-related to the author.
vc = await channel.connect()
# You are not connected to a voice channel. So channel is None. Now you are trying to connect to a None channel.
print("test")
以下是一种让您的机器人加入语音频道的方法:
async def join(ctx):
channel = ctx.message.author.voice.channel
if not channel:
await ctx.send("You're not connected to any voice channel !")
else:
voice = get(self.bot.voice_clients, guild=ctx.guild)
if voice and voice.is_connected():
await voice.move_to(channel)
else:
voice = await channel.connect()
附言:如果你添加了一个play
命令,你仍然需要用这些命令来获取机器人的频道和声音:
voice = get(self.bot.voice_clients, guild=ctx.guild)
channel = ctx.message.author.voice.channel
我正在为我的discord服务器制作一个机器人,但我遇到了问题。我想要的是,当最后一个人离开一个语音频道(它是由机器人生成的)时,我想要删除该语音频道。 我也考虑过测试任何空的语音频道并删除它们,但我不知道如何做。
问题内容: 我试图比较两个相同类型的对象(在dosHave方法中),但是我从未返回过“ true”。这是我的代码: “ Osoba”类如下所示: 来自主代码: 无论我要使用什么输入,这部分都永远不会发生。“ kartoteka”是我当然进口的包裹。每个类都在单独的程序包中,但是使用它们没有问题。我已经尝试了一段时间,但没有任何帮助,似乎 从来都不是真的,但我不知道为什么。没有Boolean.TRU
问题内容: 我正在使用Asp.net MVC3,并尝试在服务器上做一个简单的Ajax发布,它返回部分视图并在搜索过程中更新我的项目列表。 Ajax成功调用服务器,服务器通过发送部分视图进行响应。但是部分视图始终在新页面中呈现。我发现这是因为它不知道即将到来的ajax调用,因此它呈现了一个新页面。 我的控制器代码非常简单: 但是无论如何,Request.IsAjaxRequest()始终返回fals
Python的新类型提示功能允许我们键入函数返回的提示… …或保留未指定的返回类型,PEP规定应导致静态分析器假设任何返回类型都是可能的: 任何没有注释的函数都应被视为具有最通用的类型 但是,我应该如何键入函数永远不会返回的提示?例如,键入 hint 这两个函数的返回值的正确方法是什么? 既没有指定
我正在制作一个discord机器人,我希望它在加入新公会时发送消息。 但是,我只想让它在它加入的公会的通道中发送消息: 我注意到的问题是只返回服务器的第一个通道的名称。我想通过所有渠道迭代,最后只在渠道上发送消息。 它的变通方法是什么?
我想发送消息,如果作者有角色,但如果我尝试此代码不工作(角色的id是正确的)。