mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
Restructure: promote working_copy to repo root
Make the stable 'working copy' bot the canonical code at the repository
root so the install/deploy scripts operate against it again.
- Move working_copy/* to root (bot entrypoint is bot.py)
- Restore root-level install/ops scripts from c4fa88e (deploy.sh,
install_main_bot.sh, status_report.*, conjurer.service, etc.)
- Fix deploy.sh: copy bot.py (was thin_client.py) and add the
conanjurer_* modules; bump command count
- Remove side-by-side variant dirs (backup_old_docker, prototype_one,
prototype_musician_one, musician_old, working_copy) and docker cruft
- Keep components as subdirs: conjurer_librarian, conjurer_musician,
spotify_dl, yt_dlp, fonts, utils, docs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
import logging
|
||||
from discord.ext import commands
|
||||
import discord
|
||||
# trunk-ignore(bandit/B404)
|
||||
import subprocess
|
||||
import requests
|
||||
import uuid
|
||||
|
||||
import asyncio
|
||||
from datetime import datetime
|
||||
from constants import RADIO_HARBOR_ADDRESS, SKIP_TRACK, FILE_SERVICE_ADDRESS, ADD_TO_PRIO_PLAYLIST, REQUEST_MUSIC, CREATE_PRIO_PLAYLIST, CLEAR_PRIO
|
||||
|
||||
class RadioModule(commands.Cog):
|
||||
def __init__(self, bot, logger_name):
|
||||
self.bot = bot
|
||||
self.logger = logging.getLogger(logger_name)
|
||||
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="skip_track",
|
||||
description="Przeskocz kawałek w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def skip_track(self, ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
for role in ctx.author.roles:
|
||||
if role.name in ("Thane", "Jarl"):
|
||||
allowed = True
|
||||
if not allowed:
|
||||
await ctx.send("Łapy precz od radia")
|
||||
else:
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.get,
|
||||
f"{RADIO_HARBOR_ADDRESS}{SKIP_TRACK}",
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
self.logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="zrestartuj_radio",
|
||||
description="Komenda ktora uruchamia radio ponownie jakby się zawiesiło",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def zrestartuj_radio(self, ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
for role in ctx.author.roles:
|
||||
if role.name in ("Thane", "Jarl"):
|
||||
allowed = True
|
||||
if not allowed:
|
||||
await ctx.send("Łapy precz od radia")
|
||||
else:
|
||||
retcode = subprocess.run(
|
||||
"/home/pi/Conjurer/restart_radio.sh",
|
||||
# trunk-ignore(bandit/B603)
|
||||
shell=False,
|
||||
check=False,
|
||||
capture_output=True,
|
||||
)
|
||||
self.logger.info("Wynik: %s", retcode)
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="dodaj_do_ulubionych",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def dodaj_do_ulubionych(self, ctx):
|
||||
"""
|
||||
Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
|
||||
Rest of the line are search terms.
|
||||
|
||||
:param ctx: ctx stands for "context" and is a parameter commonly used in Discord.py commands. It
|
||||
represents the context in which the command was invoked, including information such as the message,
|
||||
the channel, the server, and the user who invoked the command. This parameter is required in all
|
||||
Discord.py commands
|
||||
"""
|
||||
async with ctx.typing():
|
||||
self.logger.info("Zaczynam szukać timestamp %s", datetime.now())
|
||||
|
||||
dlugosc_playlisty = ctx.message.content.split()[1]
|
||||
word_list = ctx.message.content.split()
|
||||
jrequest = {
|
||||
"lista_slow": word_list,
|
||||
"dlugosc_plejlisty": dlugosc_playlisty,
|
||||
"UUID": str(uuid.uuid4()),
|
||||
}
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.post,
|
||||
f"{FILE_SERVICE_ADDRESS}{ADD_TO_PRIO_PLAYLIST}",
|
||||
json=jrequest,
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
self.logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="ja_chciol",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def request_radio(self, ctx):
|
||||
"""
|
||||
Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
|
||||
Rest of the line are search terms.
|
||||
|
||||
:param ctx: ctx stands for "context" and is a parameter commonly used in Discord.py commands. It
|
||||
represents the context in which the command was invoked, including information such as the message,
|
||||
the channel, the server, and the user who invoked the command. This parameter is required in all
|
||||
Discord.py commands
|
||||
"""
|
||||
async with ctx.typing():
|
||||
self.logger.info("Zaczynam szukać timestamp %s", datetime.now())
|
||||
|
||||
word_list = ctx.message.content.split()
|
||||
jrequest = {
|
||||
"lista_slow": word_list,
|
||||
"UUID": str(uuid.uuid4()),
|
||||
}
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.post,
|
||||
f"{FILE_SERVICE_ADDRESS}{REQUEST_MUSIC}",
|
||||
json=jrequest,
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
self.logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="stworz_audycje",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def stworz_audycje(self, ctx):
|
||||
"""
|
||||
Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
|
||||
Rest of the line are search terms.
|
||||
|
||||
:param ctx: ctx stands for "context" and is a parameter commonly used in Discord.py commands. It
|
||||
represents the context in which the command was invoked, including information such as the message,
|
||||
the channel, the server, and the user who invoked the command. This parameter is required in all
|
||||
Discord.py commands
|
||||
"""
|
||||
async with ctx.typing():
|
||||
self.logger.info("Zaczynam szukać timestamp %s", datetime.now())
|
||||
|
||||
dlugosc_playlisty = ctx.message.content.split()[1]
|
||||
word_list = ctx.message.content.split()
|
||||
jrequest = {
|
||||
"lista_slow": word_list,
|
||||
"dlugosc_plejlisty": dlugosc_playlisty,
|
||||
"UUID": str(uuid.uuid4()),
|
||||
}
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.post,
|
||||
f"{FILE_SERVICE_ADDRESS}{CREATE_PRIO_PLAYLIST}",
|
||||
json=jrequest,
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
self.logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="wyczysc_ulubione",
|
||||
description="Czysci liste ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def wyczysc_ulubione(self, ctx):
|
||||
"""
|
||||
Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
|
||||
Rest of the line are search terms.
|
||||
|
||||
:param ctx: ctx stands for "context" and is a parameter commonly used in Discord.py commands. It
|
||||
represents the context in which the command was invoked, including information such as the message,
|
||||
the channel, the server, and the user who invoked the command. This parameter is required in all
|
||||
Discord.py commands
|
||||
"""
|
||||
async with ctx.typing():
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.get,
|
||||
f"{FILE_SERVICE_ADDRESS}{CLEAR_PRIO}",
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
self.logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
async def setup(bot):
|
||||
logger = logging.getLogger("discord")
|
||||
await bot.add_cog(RadioModule(bot, "discord"))
|
||||
logger.info("Loading raadio commands module done")
|
||||
Reference in New Issue
Block a user