Discord 音乐机器人 VoiceClient' 对象没有属性 'create_ytdl_player'

2024-04-27

我想编写自己的不和谐机器人,它可以播放 youtube 上的一些歌曲,但它不会创建 ydl 播放器,这是错误Command raised an exception: AttributeError: 'VoiceClient' object has no attribute 'create_ytdl_player'这是我的代码。提前致谢。

@client.command(pass_context=True)
async def s(ctx):
    user=ctx.message.author
    voicech = ctx.author.voice.channel
    voice = await  voicech.connect()
    player = await voice.create_ytdl_player("some url")

    
    
    player = await vc.create_ytdl_player()
    player.start()

create_ytdl_player是创建玩家的旧方法。和不和谐.py@rewrite https://discordpy.readthedocs.io/en/latest/(> v.1.0),播放音乐有点复杂。有两种播放音乐的方式。对于这两种方式,都需要使用 FFmpeg,因此您必须安装它 https://www.youtube.com/watch?v=a_KqycyErd8.

这里有两种播放视频的方法(youtube-dl and ffmpeg):

  • 从文件(您必须下载文件):
from discord.ext import commands
from discord.utils import get
from discord import FFmpegPCMAudio
from youtube_dl import YoutubeDL

@bot.command(brief="Plays a single video, from a youtube URL") #or bot.command()
async def play(ctx, url):
    voice = get(client.voice_clients, guild=ctx.guild)
    YDL_OPTIONS = {
        'format': 'bestaudio',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        'outtmpl': 'song.%(ext)s',
    }

    with YoutubeDL(Music.YDL_OPTIONS) as ydl:
        ydl.download("URL", download=True)

    if not voice.is_playing():
        voice.play(FFmpegPCMAudio("song.mp3"))
        voice.is_playing()
        await ctx.send(f"Now playing {url}")
    else:
        await ctx.send("Already playing song")
        return
  • 无需下载音乐。这种方式播放音乐更简单,但是,这会导致一个已知问题,这里解释得很好 https://support.discord.com/hc/en-us/articles/360035010351--Known-Issue-Music-Bots-Not-Playing-Music-From-Certain-Sources所以你必须添加一个FFMPEG_OPTIONS多变的:
from discord.ext import commands
from discord.utils import get
from discord import FFmpegPCMAudio
from youtube_dl import YoutubeDL

@bot.command(brief="Plays a single video, from a youtube URL")
async def play(ctx, url):
    YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist':'True'}
    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    voice = get(client.voice_clients, guild=ctx.guild)

    if not voice.is_playing():
        with YoutubeDL(ydl_opts) as ydl:
            info = ydl.extract_info(video_link, download=False)
        URL = info['formats'][0]['url']
        voice.play(FFmpegPCMAudio(URL, **FFMPEG_OPTIONS))
        voice.is_playing()
    else:
        await ctx.send("Already playing song")
        return

这些命令只会播放歌曲,因此您必须对所有其他命令(加入、离开等)进行编程。
互联网上有很多例子,一旦你习惯了创建音乐机器人,你应该看看它们。

参考: VoiceClient https://discordpy.readthedocs.io/en/latest/api.html?highlight=voice#discord.VoiceClient文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Discord 音乐机器人 VoiceClient' 对象没有属性 'create_ytdl_player' 的相关文章

  • OSError:[Errno 'jupyter-notebook' 未找到] 2

    您好 我已经安装了 Anaconda3 4 3 1 Windows x86 64 在我的桌面上 但运行命令时出现以下错误 Jupyter笔记本 来自命令提示符 Error C Users my pc gt jupyter notebook
  • 程序如何在Python中的两个函数之间进行选择?

    我有一个 Python 3 2 程序 可以计算未来任意时间段内的投资价值 它可以处理单利和复利 问题是我定义了两个函数 main 和 main2 第一个是简单函数 第二个是复利函数 现在我想做的是 根据用户的一些输入 程序在运行 main
  • 将yield语句转换为Python中的生成器表达式

    我有一个关于将yield语句转换为生成器表达式的问题 所以我有一个小的yield方法 它获取一个函数和一个起始数字作为其输入 并且基本上为每个先前被调用的数字调用该函数 即 第一次调用返回初始号码 第二次调用返回函数 初始编号 第三次调用返
  • 字符串的“相关矩阵”。名义数据的相似度

    这是我的数据框 df store 1 store 2 store 3 store 4 0 banana banana plum banana 1 orange tangerine pear orange 2 apple pear melon
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • 捕获 CommandOnCooldown 错误

    我正在制作一个有冷却时间的不和谐机器人 并且我正在尝试制作一个事件 当CommandOnCooldown发生错误时 机器人会通过私信告诉他们需要等待多长时间 这是我的代码 看起来一切正常 但它不知道 retry after 意味着什么 bo
  • Python 调度一个作业,每个工作日开始,每小时运行一次

    我目前有一个示例代码定义为 import schedule import time def job t print I m working t return schedule every day at 01 00 do job It is
  • python/pandas - 将列标题转换为索引

    我必须处理的数据将每小时数据视为列 我想将其转换为索引 示例如下所示 year month day 1 2 3 4 5 24 2015 1 1 a b c 2015 1 2 d e f 2015 1 3 g h i 我想让输出文件像这样 y
  • 什么时候会在 dict 上使用键值对作为 dict.update 方法?

    我注意到你可以做两件事来更新字典 并且它们似乎有相同的结果 a a update foo 1 a a update foo 1 两者都会产生如下所示的字典结果 foo 1 是否有任何理由更喜欢使用字典或键 值对作为更新方法 它们在功能上是否
  • Python 类:通过传递值实现单例还是非单例?

    我有一个 Python 3 类 目前是使用 a 定义的单例 singleton装饰器 但有时需要not成为单身人士 问题 是否可以在从类实例化对象时执行类似于传递参数的操作 并且该参数确定该类是否是单例 我试图找到一种替代方法来复制类并使其
  • sklearn pipeline + keras顺序模型-如何获取历史记录?

    Keras https keras io模型 当 fit被调用时 返回一个历史对象 如果我将此模型用作 sklearn 管道的一步 是否可以检索它 顺便说一句 我正在使用 python 3 6 提前致谢 History 回调记录每个时期的训
  • 错误:环境 /Users/myuser/.virtualenvs/iron 不包含激活脚本

    我正在 macOS Catalina 版本 10 15 1 上运行 python 3 7 6 并且我正在尝试安装和设置virtualenvwrapper我已经安装了pip3 install virtualenvwrapper 我的 bash
  • 从数据帧字典中获取单独的数据帧 Python

    我有一本字典d充满了数据帧的集合 key type size value gm1 dataframe mxn gm2 dataframe mxN gm10 dataframe nxM 我想使用它们来一一输出这些数据帧keys作为新数据框的名
  • Python IF 语句到单行

    是否可以将这段代码放在一行中 if x 0 a j sum elif x 1 b j sum e e D 这不是一个仅用于演示目的的工作示例 a j sum if x 0 else b j sum 如果您有 Python 3 8 或更高版本
  • 默认可变参数的惯用方式

    在 python 中 如果直接将可变类型设置为默认参数 则会出现众所周知的边缘情况 def foo x return x y foo y append 1 print foo 通常的解决方法是将参数默认为None然后将其放入体内 然而 有
  • 带括号的上下文管理器

    我试图了解新的新内容带括号的上下文管理器Python 3 10 中的功能 新功能中的顶部项目here https docs python org 3 10 whatsnew 3 10 html 我的测试示例是尝试编写 with open f
  • 模块“tensorflow”没有属性“random_uniform”

    我尝试执行一些深度学习应用程序 并收到模块 tensorflow 没有属性 random uniform 错误 在 CPU 上 代码运行良好 但速度非常慢 为了在 GPU 上运行代码 我需要更改一些定义 下面是我的代码 有任何想法吗 def
  • 在tensorflow .ckpt文件中使用预训练模型

    我有一个 ckpt 文件 我只想得到 cnn 的权重 我已经从 ckpt 检查点文件中进行了训练 inception resnet v2 2016 08 30 import tensorflow as tf saver tf train S
  • 如何得到将外力映射到广义力的矩阵?

    给定一个多体植物 我需要找到将外力 lambda 转换为广义力的矩阵 IE 以下方程中的 Phi 取自 Scott Kuindersma Frank Permenter 和 Russ Tedrake 的 稳定动态运动的有效可解二次规划 我的
  • 从 Python 中编译的正则表达式中提取命名组正则表达式模式

    我有一个 Python 正则表达式 其中包含多个命名组 但是 如果先前的组已匹配 则可能会错过与一组匹配的模式 因为似乎不允许重叠 举个例子 import re myText sgasgAAAaoasgosaegnsBBBausgisego

随机推荐