当前位置: 首页 > 知识库问答 >
问题:

不一致py频道。connect()永远不会返回

贺宏富
2023-03-14

我目前正在为我的不和谐服务器开发一个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服务器上寻求帮助,但他们无法复制我的问题。

这是我的第一个溢出帖子,所以如果我的帖子有任何问题,我提前道歉。

干杯

共有3个答案

柯苗宣
2023-03-14

这是老问题,但我花了很长时间自己解决这个问题,我还没有在网上找到任何答案。我的问题是我的机器人没有声音的意图。如果你的机器人只适合像你朋友这样的一小群人,只需设置intentstodiscord即可。意图。所有()都可以工作。否则,您可以手动选择它们。

赫连照
2023-03-14

我删除了你的评论并添加了我自己的#评论

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")
狄新翰
2023-03-14

以下是一种让您的机器人加入语音频道的方法:

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是正确的)。