【问题标题】:How To Connect Discord Bot To Voice Channel?如何将 Discord Bot 连接到语音频道?
【发布时间】:2021-03-20 04:12:14
【问题描述】:

查看了所有关于将 discord bot 连接到语音通道以播放声音的问题,但我找不到我需要的答案。我是 discord 库的新手,并没有解决事情是如何工作的,所以当我尝试在网站上给出答案时,我大多会收到这样的错误:

AttributeError: 'NoneType' object has no attribute 'channel'

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'channel'

我的代码如下所示

import discord
from dotenv import load_dotenv
from discord.ext import commands

load_dotenv()

token = "XXXXXXXXXXXXXXXXX"
client = commands.Bot(command_prefix='.')
voice = discord.VoiceChannel

@client.command(name="join")
async def join(ctx):
    channel = ctx.author.voice.channel
    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()

client.run(Token)

这只是其他发送或事件部分正在工作的代码的语音部分。

【问题讨论】:

标签: python python-3.x discord.py


【解决方案1】:

这是我使用的,我尽可能评论它

@ client.command(name='join',aliases = ['summon']) # CREATING COMMAND "JOIN" WITH ALIAS SUMMON
async def _join(ctx, *, channel: discord.VoiceChannel = None): # TAKING ARGUMENT CHANNEL SO PPL CAN MAKE THE BOT JOIN A VOICE CHANNEL THAT THEY ARE NOT IN
    """Joins a voice channel."""

    destination = channel if channel else ctx.author.voice.channel # CHOOSING THE DESTINATION, MIGHT BE THE REQUESTED ONE, BUT IF NOT THEN WE PICK AUTHORS VOICE CHANNEL

    if ctx.voice_client: # CHECKING IF THE BOT IS PLAYING SOMETHING
        await ctx.voice_state.voice.move_to(destination) # IF THE BOT IS PLAYING WE JUST MOVE THE BOT TO THE DESTINATION
        return

    await destination.connect() # CONNECTING TO DESTINATION
    await ctx.send(f"Succesfully joined the voice channel: {destination.name} ({destination.id}).")

顺便说一句,音乐和语音机器人真的很复杂,如果你是初学者,最好做一些更简单的事情,比如审核命令和游戏。

【讨论】:

  • 感谢您的回答,但我仍然遇到错误:discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.
  • 从函数中删除“self”参数,这个命令是从 cog 中获取的,我忘了删除 self。
【解决方案2】:
@client.command()
async def enter(ctx):
    connected = ctx.author.voice
    if not connected:
        await ctx.send("You need to be connected in a voice channel to use this command!")
        return
    global vc
    vc = await connected.channel.connect()

顺便说一句,别忘了安装 discord,py[voice] 模块。我希望它有所帮助:D

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 2021-04-29
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2022-01-23
    • 2021-01-05
    • 2020-06-26
    相关资源
    最近更新 更多