Где боты Discord могут найти сборочный пакет ffmpeg heroku - PullRequest
1 голос
/ 06 августа 2020

Я делаю бота, который выводит mp3-файл в голосовой чат с помощью discord.py. Он работает локально, используя:

vc.play(discord.FFmpegPCMAudio(executable="ffmpeg/bin/ffmpeg.exe", source=noise.mp3))

Однако сейчас я размещаю это на Heroku, у меня установлен пакет сборки, но как мой код получить к нему доступ вместо кода выше

1 Ответ

2 голосов
/ 11 августа 2020

Вы не включили свой код, поэтому я не знаю, хотите ли вы, чтобы он играл, когда вы пишете команду в Discord или когда бот готов , поэтому я решил заставить бота играть, когда он готов (если вы хотите, чтобы он присоединился по команде, вы можете легко отредактировать мой код или попросить меня сделать это). Также я думаю, будет проще, если вы используете для этого youtube_dl (если это ваша песня, которая недоступна на YouTube, вы можете загрузить ее как unpubli c, но не как частную!).

import discord
from discord.ext import commands
import youtube_dl
import ctypes
import ctypes.util

Token = "XXXXXX" #your token         
client = commands.Bot(command_prefix = ":") 

ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
}   

def endSong(guild, path):
    os.remove(path)

url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" #link to your song on YouTube
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    file = ydl.extract_info(url, download=True)
    guild = "1234567890" #id of your server which you can get by right clicking on server name and clicking "Copy ID" (developer mode must be on)
    path = str(file['title']) + "-" + str(file['id'] + ".mp3")

channel1 = client.get_channel(1234567890) #id of your channel (you get it like server id, but by right clicking on channel)                         
voice_client = await channel1.connect()                                           

voice_client.play(discord.FFmpegPCMAudio(path), after=lambda x: endSong(guild, path))
voice_client.source = discord.PCMVolumeTransformer(voice_client.source, 1)
    
while voice_client.is_playing(): #waits until song ends
    await asyncio.sleep(1)
else:
    await voice_client.disconnect() #and disconnects
    print("Disconnected")

Также не забудьте включить 4 сборочных пакета на Heroku, чтобы убедиться, что все будет работать ( Ваше приложение> Настройки> Сборочные пакеты :

И проверьте, есть ли все это в вашем requirements.txt :

  • pip
  • youtube_dl
  • discord.py [voice] ~ = 1.4.0
  • ffmpeg
  • colorlog
  • PyNaCl
...