python Discord.py .connect()永远不会返回

iyzzxitl  于 2022-12-02  发布在  Python
关注(0)|答案(4)|浏览(146)

我目前正在discord.py为discord服务器开发一个www.example.com -rewrite(1.3.3)bot。目前,我正在尝试让bot播放语音通道中的音乐。根据discord.py文档,您将使用函数channel.connect()连接到语音通道,它将返回一个VoiceClient对象。
然而,我从来没有从channel.connect()中得到一个VoiceClient对象。bot确实加入了我的频道,但它似乎陷入了一个无限循环。在“await 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.py。我也在discord API服务器中寻求帮助,但他们无法复制我的问题。
这是我的第一个溢出后,所以我道歉提前如果有任何错误与我的职位。
干杯

mfuanj7w

mfuanj7w1#

以下是让机器人加入语音通道的方法:

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()

PS:如果你加了play命令,你还是要把bot的频道和声音跟那些对行:

voice = get(self.bot.voice_clients, guild=ctx.guild)
channel = ctx.message.author.voice.channel
iqjalb3h

iqjalb3h2#

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

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")
vq8itlhq

vq8itlhq3#

我觉得这是个老问题,但我自己花了很长时间来解决这个问题,而且我在网上也没有找到任何答案。我的问题是我的机器人没有语音方面的意向。如果你的机器人只是为一小群人,比如你的朋友,只要设置intentsdiscord.Intents.all()就可以了。否则你可以手动选择它们。

kgsdhlau

kgsdhlau4#

您有问题discord RTC。您的机器人尝试连接,但rtc被防火墙阻止。您应该在防火墙中启用DNS UDP。

相关问题