This commit is contained in:
2024-03-30 18:08:32 +01:00
parent 39c633ff4a
commit 22d2c8ab39
+79 -20
View File
@@ -36,6 +36,7 @@ import spotipy
import tiktoken
from discord.ext import commands, tasks
from spotipy.oauth2 import SpotifyClientCredentials
import yt_dlp
from spotify_dl import spotify
from spotify_dl import youtube as youtube_download
@@ -166,11 +167,13 @@ logger.info("Playlist generation")
# *=========================================== Load Data files
class MusicFileList(object):
"""
The `MusicFileList` class manages a list of music files, with the ability to refresh the list from a
file service or local directory and update the list with new items.
The `MusicFileList` class manages a list of music files, with the ability to refresh the list from a
file service or local directory and update the list with new items.
"""
def __init__(self, uplogger) -> None:
self.music_file_list = []
self.file_service_active = False
@@ -184,7 +187,7 @@ class MusicFileList(object):
"""
try:
self.logger.info("Attempt to connect to file service")
response = requests.get(f'{FILE_SERVICE_ADDRESS}{GET_MP3}',timeout=360)
response = requests.get(f"{FILE_SERVICE_ADDRESS}{GET_MP3}", timeout=360)
self.music_file_list = response.json()["music_file_list"]
self.file_service_active = True
except requests.exceptions.RequestException as e:
@@ -196,13 +199,15 @@ class MusicFileList(object):
self.file_service_active = False
self.logger.error(e.strerror)
self.logger.error("Service Unavailable")
def get_file_list(self):
"""
The `get_file_list` function returns the list of music files stored in the object.
:return: The `music_file_list` attribute is being returned.
"""
return self.music_file_list
def update_file_list(self,item):
def update_file_list(self, item):
"""
The `update_file_list` function appends an item to a music file list and sends a POST request with
the item data to a file service address.
@@ -212,8 +217,9 @@ class MusicFileList(object):
POST request to a file service address along with the endpoint `SEND_MP3`
"""
self.music_file_list.append(item)
post_data = {"item" : str(item)}
requests.post(f'{FILE_SERVICE_ADDRESS}{SEND_MP3}', json=post_data, timeout = 360)
post_data = {"item": str(item)}
requests.post(f"{FILE_SERVICE_ADDRESS}{SEND_MP3}", json=post_data, timeout=360)
music_file_list = []
music_file_list = MusicFileList(logger)
@@ -268,6 +274,9 @@ async def on_ready():
@client.event
# trunk-ignore(pylint/R0915)
# trunk-ignore(pylint/R0914)
# trunk-ignore(pylint/R0912)
async def on_message(message):
"""
Handle incoming messages in a Discord server, perform various
@@ -473,6 +482,8 @@ async def disconnect(ctx):
await voice_client.disconnect()
# trunk-ignore(pylint/R0915)
# trunk-ignore(pylint/R0912)
async def play(ctx, zamawial=None, arg=None):
"""
Play a music file, retrieve metadata about the file, and send a
@@ -582,12 +593,18 @@ async def check_music():
"""
if client.voice_clients:
voice_client = client.voice_clients[0]
if voice_client and voice_client.is_connected() and not voice_client.is_playing() and not voice_client.is_paused():
if (
voice_client
and voice_client.is_connected()
and not voice_client.is_playing()
and not voice_client.is_paused()
):
await play(MUZYKA["ctx"], MUZYKA["requester"])
await asyncio.sleep(2)
@tasks.loop(seconds=120)
# trunk-ignore(pylint/R0915)
async def check_data():
"""
The function `check_data` periodically checks for conditions to send messages and manage log files
@@ -610,7 +627,7 @@ async def check_data():
handler.doRollover()
await channel.send(
"*Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* ...sać powieści o naszym wspaniałym barze SZEFIE!"
)
)
if os.path.getsize(MEMORY_FIVE_MUZYKA) > 300000:
await channel.send(
@@ -653,13 +670,17 @@ async def check_data():
await channel.send(
"*Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* eprzyć o głupotach z klientami... Szefie... *Bierze 'ukradkowy' łyk z piersiówki*"
)
# trunk-ignore(pylint/W0603)
global LAST_SPONTANEOUS_CALL
# trunk-ignore(pylint/W0603)
global TIME_BETWEEN_CALLS
tdelta = datetime.now() - LAST_SPONTANEOUS_CALL
tdelta = tdelta.total_seconds()
if tdelta > TIME_BETWEEN_CALLS:
logger.info("Spontaneous call")
TIME_BETWEEN_CALLS = random.randint(7200,172800) #temp random, set after each call
TIME_BETWEEN_CALLS = random.randint(
7200, 172800
) # temp random, set after each call
logger.debug(TIME_BETWEEN_CALLS)
LAST_SPONTANEOUS_CALL = datetime.now()
async with channel.typing():
@@ -677,7 +698,7 @@ async def get_random_cyclic_message():
"""
channel_id = 1062047367337095268
channel = client.get_channel(channel_id)
ai_check = random.randint(0,10)
ai_check = random.randint(0, 10)
logger.info("Losowa wypowiedź")
if ai_check < 2:
logger.info("Predefiniowana")
@@ -686,28 +707,48 @@ async def get_random_cyclic_message():
logger.debug(len(cyclic_words))
mess_key = list(cyclic_words.keys())[messnum]
return cyclic_words[mess_key][0]
ai_check2 = random.randint(0,10)
ai_check2 = random.randint(0, 10)
# trunk-ignore(pylint/W0603)
global MESSAGE_TABLE
if ai_check2 < 6:
logger.info("Dykteryjka")
result, MESSAGE_TABLE = await handle_response(
"Opowiedz jakąś historię o naszym barze proszę", True, True, MESSAGE_TABLE, "Polish Hammer", "RANDOM"
)
"Opowiedz jakąś historię o naszym barze proszę",
True,
True,
MESSAGE_TABLE,
"Polish Hammer",
"RANDOM",
)
logger.info(result)
else:
logger.info("Wtracenie w dyskusje")
messages = [message async for message in channel.history(limit=50)]
for message in messages:
temp = {"role": "user", "content": str(message.author) + ":" + str(message.content)}
temp = {
"role": "user",
"content": str(message.author) + ":" + str(message.content),
}
MESSAGE_TABLE.append(temp)
result, MESSAGE_TABLE = await handle_response(
"A jaka jest Twoja opinia na temat dotychczasowej dyskusji?", True, True, MESSAGE_TABLE, "Polish Hammer", "RANDOM"
"A jaka jest Twoja opinia na temat dotychczasowej dyskusji?",
True,
True,
MESSAGE_TABLE,
"Polish Hammer",
"RANDOM",
)
logger.info(result)
return result
async def handle_response(prompt, vykidailo, bartender, history, username, request_type):
# trunk-ignore(pylint/R0912)
# trunk-ignore(pylint/R0913)
# trunk-ignore(pylint/R0914)
# trunk-ignore(pylint/R0915)
async def handle_response(
prompt, vykidailo, bartender, history, username, request_type
):
"""
Handle responses by appending them to a history, use OpenAI to
generate a response, and then append the generated response to the history.
@@ -852,6 +893,8 @@ async def handle_response(prompt, vykidailo, bartender, history, username, reque
return result, MESSAGE_TABLE
# trunk-ignore(pylint/R0915)
# trunk-ignore(pylint/R0914)
async def get_file(ctx, source, link):
"""
Take in three parameters: "ctx" (context),
@@ -928,7 +971,7 @@ async def get_file(ctx, source, link):
"force_keyframes": True,
},
]
#TODO: Make sponsorblock work
# TODO: Make sponsorblock work
sponsorblock_postprocessor = []
if platform == "win32":
dir_path = "G:\\Muzyka\\Youtube"
@@ -1033,6 +1076,9 @@ async def get_stats(ctx, history_limit):
yield name, how_many
# trunk-ignore(pylint/R0915)
# trunk-ignore(pylint/R0912)
# trunk-ignore(pylint/R0914)
async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None):
"""
Take in a context object and an optional integer parameter "how_many" and perform search
@@ -1111,7 +1157,10 @@ async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None):
search_weight[itr][0]
+ (token_weight + (pingu**1.5) / pattern_len) / matched_times
)
search_weight[itr] = temp_weight, music_file_list.get_file_list()[itr]
search_weight[itr] = (
temp_weight,
music_file_list.get_file_list()[itr],
)
matched_times += 1
itr += 1
@@ -1195,7 +1244,14 @@ async def dej_co_ze_spotifaja(ctx):
else:
separator = "/"
for file in files:
file_path = dir_path + separator + file["artist"] + " - " + file["name"] + ".mp3"
file_path = (
dir_path
+ separator
+ file["artist"]
+ " - "
+ file["name"]
+ ".mp3"
)
global MUZYKA # pylint: disable=global-variable-not-assigned
MUZYKA["queue"].insert(
0,
@@ -1251,6 +1307,8 @@ async def dej_co_z_jutuba(ctx):
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj",
guild=discord.Object(id=664789470779932693),
)
# trunk-ignore(pylint/R0914)
# trunk-ignore(pylint/R0912)
async def update_banlist(ctx):
"""
Update a banlist in a Discord guild from preprovided list in channel.
@@ -1758,12 +1816,13 @@ async def get_image_stable_diffusion(ctx):
if ctx:
pass
@client.hybrid_command(
name="zagraj_muzyke_mego_ludu",
description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ",
guild=discord.Object(id=664789470779932693),
)
# trunk-ignore(pylint/R0912)
# trunk-ignore(pylint/R0915)
async def zagraj_muzyke_mego_ludu(ctx):
"""
Play completeley random playlist based on messaging history.