Skip to content

Commit dc7efa7

Browse files
committed
wrong ignore (oops)
1 parent 719efcc commit dc7efa7

File tree

3 files changed

+95
-1
lines changed

3 files changed

+95
-1
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
nameless.sqlite
1010

1111
# Ignore lavalink stuffs
12-
lavalink/
12+
**/bin/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .start import main, start, stop
2+
3+
__all__ = ["start", "stop", "main"]
+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import asyncio
2+
import base64
3+
import logging
4+
import signal
5+
from pathlib import Path
6+
7+
import aiohttp
8+
9+
from nameless.config import nameless_config
10+
11+
CWD = Path(__file__).parent
12+
LAVALINK_URL = (
13+
"https://github.com/lavalink-devs/Lavalink/releases/latest/download/Lavalink.jar"
14+
)
15+
LAVALINK_BIN = CWD / "bin" / "Lavalink.jar"
16+
LAVALINK_CONFIG = CWD / "bin" / "application.yml"
17+
18+
proc: asyncio.subprocess.Process | None = None
19+
task: asyncio.Task[None] | None = None
20+
stop_event = asyncio.Event()
21+
22+
23+
async def start():
24+
"""Start the Lavalink server from /bin folder."""
25+
global proc, stop_event
26+
while True:
27+
proc = await asyncio.create_subprocess_exec(
28+
"java", "-jar", "Lavalink.jar", cwd=CWD / "bin", stdout=-3
29+
)
30+
await proc.wait()
31+
if nameless_config["nameless"]["is_shutting_down"]:
32+
stop_event.set()
33+
break
34+
35+
logging.warning("Lavalink server stopped. Restarting in 5 seconds...")
36+
await asyncio.sleep(5)
37+
38+
39+
async def stop():
40+
"""Stop the Lavalink server."""
41+
global proc, task, stop_event
42+
43+
if proc:
44+
proc.send_signal(signal.CTRL_C_EVENT)
45+
await proc.wait()
46+
proc = None
47+
48+
if task:
49+
await stop_event.wait()
50+
task.cancel()
51+
task = None
52+
53+
54+
def check_file():
55+
"""Check if the Lavalink.jar file exists."""
56+
try:
57+
with open(LAVALINK_BIN):
58+
return True
59+
except FileNotFoundError:
60+
return False
61+
62+
63+
async def default_config():
64+
"""Create a default Lavalink configuration file."""
65+
LAVALINK_CONFIG.parent.mkdir(parents=True, exist_ok=True)
66+
with open(LAVALINK_CONFIG, "wb") as f:
67+
config = base64.b64decode(
68+
"c2VydmVyOiAjIFJFU1QgYW5kIFdTIHNlcnZlcg0KICBwb3J0OiAyMzMzDQogIGFkZHJlc3M6IDAuMC4wLjANCiAgaHR0cDI6DQogICAgZW5hYmxlZDogZmFsc2UgIyBXaGV0aGVyIHRvIGVuYWJsZSBIVFRQLzIgc3VwcG9ydA0KcGx1Z2luczoNCiAgeW91dHViZToNCiAgICBlbmFibGVkOiB0cnVlICMgV2hldGhlciB0aGlzIHNvdXJjZSBjYW4gYmUgdXNlZC4NCiAgICBhbGxvd1NlYXJjaDogdHJ1ZSAjIFdoZXRoZXIgInl0c2VhcmNoOiIgYW5kICJ5dG1zZWFyY2g6IiBjYW4gYmUgdXNlZC4NCiAgICBhbGxvd0RpcmVjdFZpZGVvSWRzOiB0cnVlICMgV2hldGhlciBqdXN0IHZpZGVvIElEcyBjYW4gbWF0Y2guIElmIGZhbHNlLCBvbmx5IGNvbXBsZXRlIFVSTHMgd2lsbCBiZSBsb2FkZWQuDQogICAgYWxsb3dEaXJlY3RQbGF5bGlzdElkczogdHJ1ZSAjIFdoZXRoZXIganVzdCBwbGF5bGlzdCBJRHMgY2FuIG1hdGNoLiBJZiBmYWxzZSwgb25seSBjb21wbGV0ZSBVUkxzIHdpbGwgYmUgbG9hZGVkLg0KICAgICMgVGhlIGNsaWVudHMgdG8gdXNlIGZvciB0cmFjayBsb2FkaW5nLiBTZWUgYmVsb3cgZm9yIGEgbGlzdCBvZiB2YWxpZCBjbGllbnRzLg0KICAgICMgQ2xpZW50cyBhcmUgcXVlcmllZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZ2l2ZW4gKHNvIHRoZSBmaXJzdCBjbGllbnQgaXMgcXVlcmllZCBmaXJzdCBhbmQgc28gb24uLi4pDQogICAgY2xpZW50czoNCiAgICAgIC0gTVVTSUMNCiAgICAgIC0gV0VCDQogICAgICAtIFdFQkVNQkVEREVEIA0KbGF2YWxpbms6DQogIHBsdWdpbnM6DQogICAgIyAgICAtIGRlcGVuZGVuY3k6ICJjb20uZ2l0aHViLmV4YW1wbGU6ZXhhbXBsZS1wbHVnaW46MS4wLjAiICMgcmVxdWlyZWQsIHRoZSBjb29yZGluYXRlcyBvZiB5b3VyIHBsdWdpbg0KICAgICMgICAgICByZXBvc2l0b3J5OiAiaHR0cHM6Ly9tYXZlbi5leGFtcGxlLmNvbS9yZWxlYXNlcyIgIyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gdGhlIExhdmFsaW5rIHJlbGVhc2VzIHJlcG9zaXRvcnkgYnkgZGVmYXVsdA0KICAgICMgICAgICBzbmFwc2hvdDogZmFsc2UgIyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gZmFsc2UsIHVzZWQgdG8gdGVsbCBMYXZhbGluayB0byB1c2UgdGhlIHNuYXBzaG90IHJlcG9zaXRvcnkgaW5zdGVhZCBvZiB0aGUgcmVsZWFzZSByZXBvc2l0b3J5DQogICAgIyAgcGx1Z2luc0RpcjogIi4vcGx1Z2lucyIgIyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gIi4vcGx1Z2lucyINCiAgICAjICBkZWZhdWx0UGx1Z2luUmVwb3NpdG9yeTogImh0dHBzOi8vbWF2ZW4ubGF2YWxpbmsuZGV2L3JlbGVhc2VzIiAjIG9wdGlvbmFsLCBkZWZhdWx0cyB0byB0aGUgTGF2YWxpbmsgcmVsZWFzZSByZXBvc2l0b3J5DQogICAgIyAgZGVmYXVsdFBsdWdpblNuYXBzaG90UmVwb3NpdG9yeTogImh0dHBzOi8vbWF2ZW4ubGF2YWxpbmsuZGV2L3NuYXBzaG90cyIgIyBvcHRpb25hbCwgZGVmYXVsdHMgdG8gdGhlIExhdmFsaW5rIHNuYXBzaG90IHJlcG9zaXRvcnkNCiAgICAjIFJlcGxhY2UgVkVSU0lPTiB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXMgc2hvd24gYnkgdGhlIFJlbGVhc2VzIHRhYiBvciBhIGxvbmcgY29tbWl0IGhhc2ggZm9yIHNuYXBzaG90cy4NCiAgICAtIGRlcGVuZGVuY3k6ICJkZXYubGF2YWxpbmsueW91dHViZTp5b3V0dWJlLXBsdWdpbjoxLjEwLjIiDQogICAgICBzbmFwc2hvdDogZmFsc2UNCiAgICAtIGRlcGVuZGVuY3k6ICJjb20uZ2l0aHViLnRvcGkzMTQuc3BvbnNvcmJsb2NrOnNwb25zb3JibG9jay1wbHVnaW46My4wLjEiDQogICAgICByZXBvc2l0b3J5OiAiaHR0cHM6Ly9tYXZlbi5sYXZhbGluay5kZXYvcmVsZWFzZXMiDQogICAgICBzbmFwc2hvdDogZmFsc2UNCiAgc2VydmVyOg0KICAgIHBhc3N3b3JkOiAieW91c2hhbGxub3RwYXNzIg0KICAgIHNvdXJjZXM6DQogICAgICB5b3V0dWJlOiBmYWxzZQ0KICAgICAgYmFuZGNhbXA6IHRydWUNCiAgICAgIHNvdW5kY2xvdWQ6IHRydWUNCiAgICAgIHR3aXRjaDogdHJ1ZQ0KICAgICAgdmltZW86IHRydWUNCiAgICAgIG5pY286IHRydWUNCiAgICAgIGh0dHA6IHRydWUgIyB3YXJuaW5nOiBrZWVwaW5nIEhUVFAgZW5hYmxlZCB3aXRob3V0IGEgcHJveHkgY29uZmlndXJlZCBjb3VsZCBleHBvc2UgeW91ciBzZXJ2ZXIncyBJUCBhZGRyZXNzLg0KICAgICAgbG9jYWw6IGZhbHNlDQogICAgZmlsdGVyczogIyBBbGwgZmlsdGVycyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0DQogICAgICB2b2x1bWU6IHRydWUNCiAgICAgIGVxdWFsaXplcjogdHJ1ZQ0KICAgICAga2FyYW9rZTogdHJ1ZQ0KICAgICAgdGltZXNjYWxlOiB0cnVlDQogICAgICB0cmVtb2xvOiB0cnVlDQogICAgICB2aWJyYXRvOiB0cnVlDQogICAgICBkaXN0b3J0aW9uOiB0cnVlDQogICAgICByb3RhdGlvbjogdHJ1ZQ0KICAgICAgY2hhbm5lbE1peDogdHJ1ZQ0KICAgICAgbG93UGFzczogdHJ1ZQ0KICAgIG5vbkFsbG9jYXRpbmdGcmFtZUJ1ZmZlcjogZmFsc2UgIyBTZXR0aW5nIHRvIHRydWUgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zIG1hZGUgYnkgZWFjaCBwbGF5ZXIgYXQgdGhlIGV4cGVuc2Ugb2YgZnJhbWUgcmVidWlsZGluZyAoZS5nLiBub24taW5zdGFudGFuZW91cyB2b2x1bWUgY2hhbmdlcykNCiAgICBidWZmZXJEdXJhdGlvbk1zOiA0MDAgIyBUaGUgZHVyYXRpb24gb2YgdGhlIE5BUyBidWZmZXIuIEhpZ2hlciB2YWx1ZXMgZmFyZSBiZXR0ZXIgYWdhaW5zdCBsb25nZXIgR0MgcGF1c2VzLiBEdXJhdGlvbiA8PSAwIHRvIGRpc2FibGUgSkRBLU5BUy4gTWluaW11bSBvZiA0MG1zLCBsb3dlciB2YWx1ZXMgbWF5IGludHJvZHVjZSBwYXVzZXMuDQogICAgZnJhbWVCdWZmZXJEdXJhdGlvbk1zOiA1MDAwICMgSG93IG1hbnkgbWlsbGlzZWNvbmRzIG9mIGF1ZGlvIHRvIGtlZXAgYnVmZmVyZWQNCiAgICBvcHVzRW5jb2RpbmdRdWFsaXR5OiAxMCAjIE9wdXMgZW5jb2RlciBxdWFsaXR5LiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDEwLCB3aGVyZSAxMCBpcyBiZXN0IHF1YWxpdHkgYnV0IGlzIHRoZSBtb3N0IGV4cGVuc2l2ZSBvbiB0aGUgQ1BVLg0KICAgIHJlc2FtcGxpbmdRdWFsaXR5OiBMT1cgIyBRdWFsaXR5IG9mIHJlc2FtcGxpbmcgb3BlcmF0aW9ucy4gVmFsaWQgdmFsdWVzIGFyZSBMT1csIE1FRElVTSBhbmQgSElHSCwgd2hlcmUgSElHSCB1c2VzIHRoZSBtb3N0IENQVS4NCiAgICB0cmFja1N0dWNrVGhyZXNob2xkTXM6IDEwMDAwICMgVGhlIHRocmVzaG9sZCBmb3IgaG93IGxvbmcgYSB0cmFjayBjYW4gYmUgc3R1Y2suIEEgdHJhY2sgaXMgc3R1Y2sgaWYgZG9lcyBub3QgcmV0dXJuIGFueSBhdWRpbyBkYXRhLg0KICAgIHVzZVNlZWtHaG9zdGluZzogdHJ1ZSAjIFNlZWsgZ2hvc3RpbmcgaXMgdGhlIGVmZmVjdCB3aGVyZSB3aGlsc3QgYSBzZWVrIGlzIGluIHByb2dyZXNzLCB0aGUgYXVkaW8gYnVmZmVyIGlzIHJlYWQgZnJvbSB1bnRpbCBlbXB0eSwgb3IgdW50aWwgc2VlayBpcyByZWFkeS4NCiAgICB5b3V0dWJlUGxheWxpc3RMb2FkTGltaXQ6IDYgIyBOdW1iZXIgb2YgcGFnZXMgYXQgMTAwIGVhY2gNCiAgICBwbGF5ZXJVcGRhdGVJbnRlcnZhbDogNSAjIEhvdyBmcmVxdWVudGx5IHRvIHNlbmQgcGxheWVyIHVwZGF0ZXMgdG8gY2xpZW50cywgaW4gc2Vjb25kcw0KICAgIHlvdXR1YmVTZWFyY2hFbmFibGVkOiB0cnVlDQogICAgc291bmRjbG91ZFNlYXJjaEVuYWJsZWQ6IHRydWUNCiAgICBnYy13YXJuaW5nczogdHJ1ZQ0KICAgICNyYXRlbGltaXQ6DQogICAgICAjaXBCbG9ja3M6IFsiMS4wLjAuMC84IiwgIi4uLiJdICMgbGlzdCBvZiBpcCBibG9ja3MNCiAgICAgICNleGNsdWRlZElwczogWyIuLi4iLCAiLi4uIl0gIyBpcHMgd2hpY2ggc2hvdWxkIGJlIGV4cGxpY2l0IGV4Y2x1ZGVkIGZyb20gdXNhZ2UgYnkgbGF2YWxpbmsNCiAgICAgICNzdHJhdGVneTogIlJvdGF0ZU9uQmFuIiAjIFJvdGF0ZU9uQmFuIHwgTG9hZEJhbGFuY2UgfCBOYW5vU3dpdGNoIHwgUm90YXRpbmdOYW5vU3dpdGNoDQogICAgICAjc2VhcmNoVHJpZ2dlcnNGYWlsOiB0cnVlICMgV2hldGhlciBhIHNlYXJjaCA0Mjkgc2hvdWxkIHRyaWdnZXIgbWFya2luZyB0aGUgaXAgYXMgZmFpbGluZw0KICAgICAgI3JldHJ5TGltaXQ6IC0xICMgLTEgPSB1c2UgZGVmYXVsdCBsYXZhcGxheWVyIHZhbHVlIHwgMCA9IGluZmluaXR5IHwgPjAgPSByZXRyeSB3aWxsIGhhcHBlbiB0aGlzIG51bWJlcnMgdGltZXMNCiAgICAjeW91dHViZUNvbmZpZzogIyBSZXF1aXJlZCBmb3IgYXZvaWRpbmcgYWxsIGFnZSByZXN0cmljdGlvbnMgYnkgWW91VHViZSwgc29tZSByZXN0cmljdGVkIHZpZGVvcyBzdGlsbCBjYW4gYmUgcGxheWVkIHdpdGhvdXQuDQogICAgICAjZW1haWw6ICIiICMgRW1haWwgb2YgR29vZ2xlIGFjY291bnQNCiAgICAgICNwYXNzd29yZDogIiIgIyBQYXNzd29yZCBvZiBHb29nbGUgYWNjb3VudA0KICAgICNodHRwQ29uZmlnOiAjIFVzZWZ1bCBmb3IgYmxvY2tpbmcgYmFkLWFjdG9ycyBmcm9tIGlwLWdyYWJiaW5nIHlvdXIgbXVzaWMgbm9kZSBhbmQgYXR0YWNraW5nIGl0LCB0aGlzIHdheSBvbmx5IHRoZSBodHRwIHByb3h5IHdpbGwgYmUgYXR0YWNrZWQNCiAgICAgICNwcm94eUhvc3Q6ICJsb2NhbGhvc3QiICMgSG9zdG5hbWUgb2YgdGhlIHByb3h5LCAoaXAgb3IgZG9tYWluKQ0KICAgICAgI3Byb3h5UG9ydDogMzEyOCAjIFByb3h5IHBvcnQsIDMxMjggaXMgdGhlIGRlZmF1bHQgZm9yIHNxdWlkUHJveHkNCiAgICAgICNwcm94eVVzZXI6ICIiICMgT3B0aW9uYWwgdXNlciBmb3IgYmFzaWMgYXV0aGVudGljYXRpb24gZmllbGRzLCBsZWF2ZSBibGFuayBpZiB5b3UgZG9uJ3QgdXNlIGJhc2ljIGF1dGgNCiAgICAgICNwcm94eVBhc3N3b3JkOiAiIiAjIFBhc3N3b3JkIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbg0KDQptZXRyaWNzOg0KICBwcm9tZXRoZXVzOg0KICAgIGVuYWJsZWQ6IGZhbHNlDQogICAgZW5kcG9pbnQ6IC9tZXRyaWNzDQoNCnNlbnRyeToNCiAgZHNuOiAiIg0KICBlbnZpcm9ubWVudDogIiINCiMgIHRhZ3M6DQojICAgIHNvbWVfa2V5OiBzb21lX3ZhbHVlDQojICAgIGFub3RoZXJfa2V5OiBhbm90aGVyX3ZhbHVlDQoNCmxvZ2dpbmc6DQogIGZpbGU6DQogICAgcGF0aDogLi9sb2dzLw0KDQogIGxldmVsOg0KICAgIHJvb3Q6IElORk8NCiAgICBsYXZhbGluazogSU5GTw0KDQogIHJlcXVlc3Q6DQogICAgZW5hYmxlZDogdHJ1ZQ0KICAgIGluY2x1ZGVDbGllbnRJbmZvOiB0cnVlDQogICAgaW5jbHVkZUhlYWRlcnM6IGZhbHNlDQogICAgaW5jbHVkZVF1ZXJ5U3RyaW5nOiB0cnVlDQogICAgaW5jbHVkZVBheWxvYWQ6IHRydWUNCiAgICBtYXhQYXlsb2FkTGVuZ3RoOiAxMDAwMA0KDQoNCiAgbG9nYmFjazoNCiAgICByb2xsaW5ncG9saWN5Og0KICAgICAgbWF4LWZpbGUtc2l6ZTogMUdCDQogICAgICBtYXgtaGlzdG9yeTogMzA="
69+
)
70+
f.write(config)
71+
72+
73+
async def download_lavalink():
74+
"""Download Lavalink.jar from the official repo."""
75+
LAVALINK_BIN.parent.mkdir(parents=True, exist_ok=True)
76+
async with aiohttp.ClientSession() as session, session.get(
77+
LAVALINK_URL, allow_redirects=True
78+
) as resp:
79+
with open(LAVALINK_BIN, "wb") as f:
80+
f.write(await resp.read())
81+
await default_config() # Create a default configuration file
82+
83+
84+
async def main(loop: asyncio.AbstractEventLoop):
85+
"""Main function to start the Lavalink server."""
86+
global task
87+
88+
if not check_file():
89+
logging.warning("Lavalink.jar not found. Downloading...")
90+
await download_lavalink()
91+
task = loop.create_task(start())

0 commit comments

Comments
 (0)