Music tunneling (#7)

* New requirement

* SMall fixes for tunnel

* First step towards cogization

* Tmp chng

* Testing of new functions in conjurer_musician.py and radio_conjurer.liq

* Fixes!

* Fix fix

* Mostly working ?

* Requests

* Fixes

* Fix

* Radio requests

* Radio hardkor

* Fix

* Fixes

* Change log to print

* Clearing fetch failed

* Small fix

* sx

* Fix fix fix

* test

* el fixo stupido

* test

* Maybe fix ?

* FIX!

* Fix fix fix

* FIx of volume
This commit is contained in:
2024-04-23 12:59:33 +02:00
committed by GitHub
parent 6fefede271
commit 082b25c89c
8 changed files with 312 additions and 94 deletions
+75 -21
View File
@@ -44,7 +44,7 @@ import yt_dlp
from spotify_dl import spotify
from spotify_dl import youtube as youtube_download
from communication_subroutine import comm_subroutine, IN_COMM_Q, OUT_COMM_Q
from communication_subroutine import comm_subroutine, IN_COMM_Q, OUT_COMM_Q, QueryControl
# *=========================== Classes definition
@@ -62,22 +62,6 @@ Music_Config = TypedDict(
)
class QueryControl:
"""
This class `QueryControl` is used to manage queries with information about the author, UUID,
content, logger, context, and replies.
"""
def __init__(self, query_author, query_uuid, query_content, uplogger, ctx) -> None:
self.author = query_author
self.uuid = query_uuid
self.content = query_content
self.logger = uplogger
self.stop = False
self.ctx = ctx
self.logger.info(
f"Created Query control for {self.author}, {self.uuid}: {self.content}"
)
self.replies = []
class MusicFileList(object):
"""
@@ -155,6 +139,7 @@ GET_MP3 = "/mp3"
SEND_MP3 = "/update_mp3"
GET_PLAYLIST = "/get_music"
ADD_TO_PRIO_PLAYLIST = "/add_to_priority"
REQUEST_MUSIC = "/request_radio_file"
CLEAR_PRIO = "/clear_pr_pls"
LIBRARIAN_SERVICE_ADDRESS = "http://192.168.1.192:5001"
SEND_QUERY = "/query"
@@ -695,7 +680,6 @@ async def check_data_q():
entries = []
if fresh_data.stop:
searcher = fresh_data.author
ctx = fresh_data.ctx
query = fresh_data.content
l_p = 1
for doi in fresh_data.entries:
@@ -705,7 +689,14 @@ async def check_data_q():
entries.append(f"{l_p}. {title} pod linkiem https://www.sci-hub.se/{doi} i jest to {desc['type']}\n")
l_p+=1
message = '*Z podłogi wysuwa się winda na książki*'
message += f' Dzielny poszukiwaczu @{searcher} w odpowiedzi na twoje zapytanie {query} nr {fresh_data.uuid}'
if fresh_data.ctx is not None:
ctx = fresh_data.ctx
message += f' Dzielny poszukiwaczu @{searcher} w odpowiedzi na twoje zapytanie {query} nr {fresh_data.uuid}'
else:
ctx = client.get_channel(1062047367337095268)
message += f' Mam wynik dla zapytania {fresh_data.uuid} ale że Hammer coś grzebał nie pamiętam kto to chciał i co chciał'
message += 'nasza biblioteka służy Ci odpowiedzią. Przy dźwięku fanfar winda się otwiera a w środku '
if len(entries)<1:
message += "niestety nie ma nic"
@@ -1582,6 +1573,40 @@ async def graj_muzyko(ctx):
logger.info("Press play on tape completed")
check_music.start()
@client.hybrid_command(
name="radio_hardkor",
description="Włącza radio Conjurer na kanale #nocna-zmiana.",
guild=discord.Object(id=664789470779932693),
)
async def radio_hardkor(ctx):
"""
Plays the radio hardkor stream in the voice channel.
Args:
ctx: The context object representing the invocation context.
Returns:
None
"""
logger.info("Press play on radio hardkor")
async with ctx.typing():
global MUZYKA # pylint: disable=global-variable-not-assigned
MUZYKA["ctx"] = ctx
if not client.voice_clients:
await connect(ctx=ctx)
voice_client = client.voice_clients[0]
voice_client.play(
discord.PCMVolumeTransformer(
discord.FFmpegPCMAudio("http://95.175.16.246:666/mp3-stream"), volume=0.3
)
)
logger.info("Press play on radio completed")
else:
logger.error("Already playing")
await asyncio.sleep(12)
check_music.start()
@client.hybrid_command(
name="cisza",
@@ -1757,7 +1782,36 @@ async def dodaj_do_ulubionych(ctx):
timeout=360,
)
_ = await coroutine
@client.hybrid_command(
name="ja_chciol",
description="Dodaje do listy ulubionych w radiu",
guild=discord.Object(id=664789470779932693),
)
async def request_radio(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():
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,
)
_ = await coroutine
@client.hybrid_command(
name="wyczysc_ulubione",
description="Czysci liste ulubionych w radiu",
@@ -2324,13 +2378,13 @@ if __name__ == "__main__":
WRK_CNT = 0
for worker in threads:
WRK_CNT+=1
logger.info("Starting discord bot: Starting thread {WRK_CNT}")
logger.info("Starting discord bot: Starting thread %s", WRK_CNT)
worker.start()
logger.info("Starting discord bot: Joining threads")
WRK_CNT=0
for worker in threads:
WRK_CNT+=1
logger.info("Starting discord bot: Joining thread {WRK_CNT}")
logger.info("Starting discord bot: Joining thread %s", WRK_CNT)
worker.join()
# widok - generuje się 5 stron po 4 linki