Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python discord.py-命令引发异常:OpusNotLoaded_Python_Discord.py - Fatal编程技术网

Python discord.py-命令引发异常:OpusNotLoaded

Python discord.py-命令引发异常:OpusNotLoaded,python,discord.py,Python,Discord.py,我当时正在制作一个音乐机器人,但我遇到了这个问题,我正在运行Python3.6.8,它托管在heroku上 我听说我需要使用discord.opus.LoadOpus或类似的东西,但我不知道如何将其添加到我的代码中,以及在哪里,请帮助 这是我的密码 import discord import asyncio from discord.ext import commands client = commands.Bot(command_prefix='!') songs = asyncio.Que

我当时正在制作一个音乐机器人,但我遇到了这个问题,我正在运行Python3.6.8,它托管在heroku上

我听说我需要使用discord.opus.LoadOpus或类似的东西,但我不知道如何将其添加到我的代码中,以及在哪里,请帮助

这是我的密码

import discord
import asyncio
from discord.ext import commands

client = commands.Bot(command_prefix='!')
songs = asyncio.Queue()
play_next_song = asyncio.Event()


@client.event
async def on_ready():
    print('client ready')


async def audio_player_task():
    while True:
        play_next_song.clear()
        current = await songs.get()
        current.start()
        await play_next_song.wait()


def toggle_next():
    client.loop.call_soon_threadsafe(play_next_song.set)


@client.command(pass_context=True)
async def play(ctx, url):
    if not client.is_voice_connected(ctx.message.server):
        voice = await client.join_voice_channel(ctx.message.author.voice_channel)
    else:
        voice = client.voice_client_in(ctx.message.server)

    player = await voice.create_ytdl_player(url, after=toggle_next)
    await songs.put(player)

client.loop.create_task(audio_player_task())

client.run('TOKEN')
我有一个错误:

Ignoring exception in command play
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 50, in wrapped
ret = yield from coro(*args, **kwargs)
File "Draco.py", line 30, in play
voice = await client.join_voice_channel(ctx.message.author.voice_channel)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/client.py", line 3209, in join_voice_channel
voice = VoiceClient(**kwargs)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/voice_client.py", line 230, in __init__
self.encoder = opus.Encoder(48000, 2)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/opus.py", line 197, in __init__
raise OpusNotLoaded()
discord.opus.OpusNotLoaded

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/bot.py", line 846, in process_commands
yield from command.invoke(ctx)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 374, in invoke
yield from injected(*ctx.args, **ctx.kwargs)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/ext/commands/core.py", line 54, in wrapped
raise CommandInvokeError(e) from e
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: OpusNotLoaded:

尝试使用以下方式加载opus模块:

discord.opus.load_opus()

在你尝试用你的机器人做任何与语音频道相关的事情之前,任何地方

根据,您不应该在windows环境中需要它,这可能就是为什么它在本地计算机上工作,而不是在heroku(基于unix)上工作的原因

此外,我会做以下工作:

discord.opus.load_opus()
if not discord.opus.is_loaded():
    raise RunTimeError('Opus failed to load')

因此,您可以确定,如果未正确加载异常并知道立即查找的位置,将引发异常。如果在加载时发生异常,它仍然会传播。

我也有类似的问题。我不知道这对你是否有效,但你可以试试 (当我试图在我的计算机上运行它时,我得到了一个错误,但在Heroku上它工作得很好)

我将此添加到脚本中:

import ctypes
import ctypes.util
 
print("ctypes - Find opus:")
a = ctypes.util.find_library('opus')
print(a)
 
print("Discord - Load Opus:")
b = discord.opus.load_opus(a)
print(b)
 
print("Discord - Is loaded:")
c = discord.opus.is_loaded()
print(c)
请记住将其放在与音频链接的任何内容之前(最好的选择是将其粘贴在开头)。

您不需要向代码中添加任何内容,请尝试在Heroku上将其添加到构建包中:

https://github.com/xrisk/heroku-opus.git
我是Mac用户(不使用Heroku),我也犯了同样的错误。我尝试了以下方法:
discord.opus.load_opus()
,导致必需的参数错误。
discord.opus.load_opus('opus')
导致另一个错误

对我来说,唯一解决错误的方法是:

»打开Mac终端

»在终端
brew安装opus
中编写以下代码,然后输入

»打开编写bot代码的IDE

»尝试在代码开头或音乐命令上方键入此命令
discord.opus.load_opus()

»不协调地运行您的机器人


现在,您将不会收到任何错误,机器人将在语音频道播放音乐。

我应该在代码中的何处添加这些错误?我对这个有点陌生,抱歉“在你尝试做任何与语音频道相关的事情之前的任何地方”,它可能在你的机器人初始化的第一行的某个地方。另外,创建自己的discord bot很有趣,但这不是学习Python的最佳方法。不幸的是,我建议您也遵循更基本的教程。TypeError:load_opus()缺少1个必需的位置参数:“name”应该是什么名称?从我在网上看到的情况来看,它应该在没有参数的情况下工作。name='opus'有效吗?似乎您的问题无法解决,因为您正在使用heroku: