mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 13:34:40 +00:00
ef6eb84921
Snapshot of the dockerisation-era bot code laid out at the repository root so it can be diffed directly against the working-copy baseline (restructure/working-copy-root) to see how the variant differed: - thin_client.py asyncio entrypoint (vs working_copy bot.py) - constants.py env-var/credential refactor, communication auth, etc. - extra gpt_interface/ service, sync.py, watch_script_params.py - conanjurer_* modules absent in this variant Docker infrastructure (docker/, docker-compose.yml, .dockerignore) intentionally omitted - this branch is for code comparison only and is not intended to be merged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
223 lines
8.3 KiB
Python
223 lines
8.3 KiB
Python
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 conjurer.backup_old_docker.constants import (
|
|
RADIO_HARBOR_ADDRESS,
|
|
SKIP_TRACK,
|
|
FILE_SERVICE_ADDRESS,
|
|
ADD_TO_PRIO_PLAYLIST,
|
|
REQUEST_MUSIC,
|
|
CREATE_PRIO_PLAYLIST,
|
|
CLEAR_PRIO,
|
|
service_headers,
|
|
)
|
|
|
|
SERVICE_HEADERS = service_headers()
|
|
|
|
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,
|
|
headers=SERVICE_HEADERS,
|
|
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,
|
|
headers=SERVICE_HEADERS,
|
|
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,
|
|
headers=SERVICE_HEADERS,
|
|
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}",
|
|
headers=SERVICE_HEADERS,
|
|
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")
|