mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
[Audio] V3/auto autostart only (#1420)
* Download jar at audio load * Messy... * Remove leftover log file stuff * Keep application.yml * Damn you windows
This commit is contained in:
parent
b27e0f2d21
commit
ccb322d08e
@ -1,8 +1,57 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
from aiohttp import ClientSession
|
||||||
|
import shutil
|
||||||
|
import asyncio
|
||||||
|
|
||||||
from .audio import Audio
|
from .audio import Audio
|
||||||
|
from .manager import start_lavalink_server
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
from redbot.core.data_manager import cog_data_path
|
||||||
|
|
||||||
|
LAVALINK_BUILD = 3065
|
||||||
|
LAVALINK_BUILD_URL = (
|
||||||
|
"https://ci.fredboat.com/repository/download/"
|
||||||
|
"Lavalink_Build/{}:id/Lavalink.jar?guest=1"
|
||||||
|
).format(LAVALINK_BUILD)
|
||||||
|
|
||||||
|
LAVALINK_DOWNLOAD_DIR = cog_data_path(raw_name="Audio")
|
||||||
|
LAVALINK_JAR_FILE = LAVALINK_DOWNLOAD_DIR / "Lavalink.jar"
|
||||||
|
|
||||||
|
APP_YML_FILE = LAVALINK_DOWNLOAD_DIR / "application.yml"
|
||||||
|
BUNDLED_APP_YML_FILE = Path(__file__).parent / "application.yml"
|
||||||
|
|
||||||
|
|
||||||
|
async def download_lavalink(session):
|
||||||
|
with LAVALINK_JAR_FILE.open(mode='wb') as f:
|
||||||
|
async with session.get(LAVALINK_BUILD_URL) as resp:
|
||||||
|
while True:
|
||||||
|
chunk = await resp.content.read(512)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
f.write(chunk)
|
||||||
|
|
||||||
|
|
||||||
|
async def maybe_download_lavalink(loop, cog):
|
||||||
|
jar_exists = LAVALINK_JAR_FILE.exists()
|
||||||
|
current_build = await cog.config.current_build()
|
||||||
|
|
||||||
|
if not jar_exists or current_build < LAVALINK_BUILD:
|
||||||
|
LAVALINK_DOWNLOAD_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
with ClientSession(loop=loop) as session:
|
||||||
|
await download_lavalink(session)
|
||||||
|
await cog.config.current_build.set(LAVALINK_BUILD)
|
||||||
|
|
||||||
|
shutil.copyfile(str(BUNDLED_APP_YML_FILE), str(APP_YML_FILE))
|
||||||
|
|
||||||
|
|
||||||
async def setup(bot: commands.Bot):
|
async def setup(bot: commands.Bot):
|
||||||
cog = Audio(bot)
|
cog = Audio(bot)
|
||||||
await cog.init_config()
|
await maybe_download_lavalink(bot.loop, cog)
|
||||||
bot.add_cog(cog)
|
await start_lavalink_server(bot.loop)
|
||||||
|
|
||||||
|
async def _finish():
|
||||||
|
await asyncio.sleep(10)
|
||||||
|
await cog.init_config()
|
||||||
|
bot.add_cog(cog)
|
||||||
|
|
||||||
|
bot.loop.create_task(_finish())
|
||||||
|
|||||||
@ -9,13 +9,12 @@ import math
|
|||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from redbot.core import Config, checks
|
from redbot.core import Config, checks
|
||||||
|
|
||||||
|
from .manager import shutdown_lavalink_server
|
||||||
|
|
||||||
__version__ = "2.0.2.9.b"
|
__version__ = "2.0.2.9.b"
|
||||||
__author__ = ["aikaterna", "billy/bollo/ati"]
|
__author__ = ["aikaterna", "billy/bollo/ati"]
|
||||||
|
|
||||||
|
|
||||||
LAVALINK_BUILD = 3065
|
|
||||||
|
|
||||||
|
|
||||||
class Audio:
|
class Audio:
|
||||||
def __init__(self, bot):
|
def __init__(self, bot):
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
@ -25,7 +24,8 @@ class Audio:
|
|||||||
"host": 'localhost',
|
"host": 'localhost',
|
||||||
"port": '2332',
|
"port": '2332',
|
||||||
"passw": 'youshallnotpass',
|
"passw": 'youshallnotpass',
|
||||||
"status": False
|
"status": False,
|
||||||
|
"current_build": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
default_guild = {
|
default_guild = {
|
||||||
@ -39,10 +39,6 @@ class Audio:
|
|||||||
self.config.register_global(**default_global)
|
self.config.register_global(**default_global)
|
||||||
|
|
||||||
self._lavalink = None
|
self._lavalink = None
|
||||||
self._lavalink_build_url = (
|
|
||||||
"https://ci.fredboat.com/repository/download/"
|
|
||||||
"Lavalink_Build/{}:id/Lavalink.jar"
|
|
||||||
).format(LAVALINK_BUILD)
|
|
||||||
|
|
||||||
async def init_config(self):
|
async def init_config(self):
|
||||||
host = await self.config.host()
|
host = await self.config.host()
|
||||||
@ -822,4 +818,6 @@ class Audio:
|
|||||||
return queue_total_duration
|
return queue_total_duration
|
||||||
|
|
||||||
def __unload(self):
|
def __unload(self):
|
||||||
|
self.bot.lavalink.ws._ws.close()
|
||||||
self.bot.lavalink.client.destroy()
|
self.bot.lavalink.client.destroy()
|
||||||
|
shutdown_lavalink_server()
|
||||||
|
|||||||
41
redbot/cogs/audio/manager.py
Normal file
41
redbot/cogs/audio/manager.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import shlex
|
||||||
|
import asyncio
|
||||||
|
from subprocess import Popen, DEVNULL
|
||||||
|
import os
|
||||||
|
|
||||||
|
proc = None
|
||||||
|
SHUTDOWN = asyncio.Event()
|
||||||
|
|
||||||
|
|
||||||
|
async def monitor_lavalink_server(loop):
|
||||||
|
while not SHUTDOWN.is_set():
|
||||||
|
if proc.poll() is not None:
|
||||||
|
break
|
||||||
|
await asyncio.sleep(0.5)
|
||||||
|
|
||||||
|
if not SHUTDOWN.is_set():
|
||||||
|
print("Lavalink jar shutdown, restarting.")
|
||||||
|
await start_lavalink_server(loop)
|
||||||
|
|
||||||
|
|
||||||
|
async def start_lavalink_server(loop):
|
||||||
|
from . import LAVALINK_DOWNLOAD_DIR, LAVALINK_JAR_FILE
|
||||||
|
start_cmd = "java -jar {}".format(LAVALINK_JAR_FILE.resolve())
|
||||||
|
|
||||||
|
global proc
|
||||||
|
proc = Popen(
|
||||||
|
shlex.split(start_cmd, posix=os.name == 'posix'),
|
||||||
|
cwd=str(LAVALINK_DOWNLOAD_DIR),
|
||||||
|
stdout=DEVNULL, stderr=DEVNULL
|
||||||
|
)
|
||||||
|
|
||||||
|
print("Lavalink jar started. PID: {}".format(proc.pid))
|
||||||
|
|
||||||
|
loop.create_task(monitor_lavalink_server(loop))
|
||||||
|
|
||||||
|
|
||||||
|
def shutdown_lavalink_server():
|
||||||
|
print("Shutting down lavalink server.")
|
||||||
|
SHUTDOWN.set()
|
||||||
|
if proc is not None:
|
||||||
|
proc.terminate()
|
||||||
1
setup.py
1
setup.py
@ -96,6 +96,7 @@ setup(
|
|||||||
version="{}.{}.{}b9".format(*get_version()),
|
version="{}.{}.{}b9".format(*get_version()),
|
||||||
packages=get_package_list(),
|
packages=get_package_list(),
|
||||||
package_data=find_locale_folders(),
|
package_data=find_locale_folders(),
|
||||||
|
include_package_data=True,
|
||||||
url='https://github.com/Cog-Creators/Red-DiscordBot',
|
url='https://github.com/Cog-Creators/Red-DiscordBot',
|
||||||
license='GPLv3',
|
license='GPLv3',
|
||||||
author='Cog-Creators',
|
author='Cog-Creators',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user