私は Discord ボットをオンラインで永続的にホストしようとしています。すべての音声チャンネル (Musik コマンド) が機能しなくなりましたが、大きな変化はありません。
requirements.txt ファイルには次のものが含まれています。
不和
、youtube_dl
,ffmpeg
ビルド ログでは、問題なくインストールされており、ボットはログ上ですぐにオンラインになります。
参考までに: 私は Github を使用してコードを Heroku にプッシュしています (Github に接続されています)。
global voice
channel = ctx.message.author.voice.channel
voice = get(client.voice_clients, guild=ctx.guild)
if voice and voice.is_connected():
await voice.move_to(channel)
else:
voice = await channel.connect()
song_there = os.path.isfile("song.mp3")
try:
if song_there:
os.remove("song.mp3")
queues.clear()
except PermissionError:
return
ydl_opts = {
'format': 'bestaudio/best',
'quiet': True,
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
for file in os.listdir("./"):
if file.endswith(".mp3"):
name = file
os.rename(file, "song.mp3")
def my_after(error):
coro = voice.disconnect()
for file in os.listdir("./"):
if file.endswith(".mp3"):
os.remove("song.mp3")
fut = asyncio.run_coroutine_threadsafe(coro, client.loop)
try:
fut.result()
except:
pass
voice.play(discord.FFmpegPCMAudio('song.mp3'), after=my_after)
voice.source = discord.PCMVolumeTransformer(voice.source)
voice.source.volume = 0.10
上記は単なるコード例であり、私の音楽コマンドの 1 つがどのように見えるかを示しています。
ローカル PC で動作させるためにインポートしたものはすべてここにあります
import discord
import random
import asyncio
import youtube_dl
import os
import shutil
from discord import FFmpegPCMAudio
from discord.ext import commands
from discord.ext.commands import has_permissions, MissingPermissions
from discord.ext.commands import Bot as BotBase
from discord.utils import get
youtube_dl と ffmpegPCMAudio が (コードにあるように) オーディオ ファイルをダウンロードして Queue フォルダーに保存することを認識しています。しかし、それを Heroku に転送して実行可能にするには、どうすればよいでしょうか?
------------------------
ビルドパック
まず、すべてが動作することを確認するには、Heraku に 4 つのビルドパックが必要です ([アプリ] > [設定] > [ビルドパック])。
ヘロク/パイソン
https://github.com/heroku/heroku-buildpack-apt.git
https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git
https://github.com/xrisk/heroku-opus.git
そして、requirements.txt にこれらがすべて含まれているかどうかを確認してください。
ピップ
youtube_dl
discord.py[音声]
ffmpeg
ピナクロ
あなたのコード
これをコードに追加します。
import ctypes
import ctypes.util
find_opus = ctypes.util.find_library('opus')
discord.opus.load_opus(find_opus)
それでもうまくいかない場合は...
すべてを試した場合は、次のことを試してみてください:
Aptfile という名前の新しいファイルを作成します (あなたが怒ったのと同じ方法)ファイル Procfile なので、CMD では、echo>Aptfile となります。次に、これを中に貼り付けます。
libopus0
git
libopus-dev
libssl-dev
libffi-dev
libsodium-dev
:repo:ppa:mc3man/xerus-media -y
2
すごいですね、ビルドパックと要件に沿って本当にうまくいきました - どうもありがとう!補足: github.com/heroku/heroku-buildpack-apt.git ビルドパックは動作するために必要ありません (ビルドパックを入手して削除し、再度プッシュすると失敗しました)
– 傑作
2020 年 9 月 7 日 20:26
スキップ コマンドがあるのに、「discord.ext.commands.errors.CommandInvokeError: コマンドで例外が発生しました: ClientException: すでにオーディオを再生しています」と表示されます。
– 傑作
2020 年 9 月 7 日 20:54
------------------------
Heraku の設定タブで、次のビルドパックを追加します。
https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git
https://github.com/kitcast/buildpack-ffmpeg.git
https://github.com/alevfalse/heroku-buildpack-ffmpeg.git
https://github.com/Crazycatz00/heroku-buildpack-libopus.git
https://github.com/guilherme-otran/heroku-buildpack-ffprobe.git
その後、次のようになります。
ボットを再デプロイし、動作することを確認します
3
残念ながら、そうではありませんでした。いくつかのコンポーネントがインストールされましたが、変化はありませんでした。リンクが 2 回貼り付けられていることに気づきました。写真からリンクを入力する必要がありますが、問題ありません。 ffmpeg をrequirements.txt から削除する必要がありますか?
– 傑作
2020 年 9 月 4 日 17:13
はい、requirements.txt に ffmpeg を含める必要はありません。リンクを 2 回貼り付けたことに気づきませんでした。2 つのリンクのうち 1 つは異なるものであるはずです。今それを編集し、もう一方を https://github.com/alevfalse/heroku-buildpack-ffmpeg.git に置き換えました。同じことを行ってから再デプロイし、今度は機能するかどうかを確認します。
– エックス ディー
2020 年 9 月 4 日 17:53
いいえ。 ffmpeg がrequirements.txt から削除され、すべてのビルド パックが含まれます。うまくいきませんでした
– 傑作
2020 年 9 月 4 日 18:17