From 1b3c0b84346b297607a8e35cdec79cb2e9961855 Mon Sep 17 00:00:00 2001 From: Polish Hammer Date: Thu, 30 Oct 2025 16:58:55 +0100 Subject: [PATCH] Tag: 0.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Intermediate commits (oldest → newest): - Parametryzacja "muzyki mojego ludu" - Async wyszukaj - More async - And even more async - Async fix - Async - +1 - -1 - Hejo - Test chat gpt4 - Nope - Fix - Fix 2.0 - Fix - Additional lines of code --- .trunk/.gitignore | 4 +++ .trunk/trunk.yaml | 37 ++++++++++++++++++++ bot.py | 86 ++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 111 insertions(+), 16 deletions(-) diff --git a/.trunk/.gitignore b/.trunk/.gitignore index 15966d0..6b31cd9 100644 --- a/.trunk/.gitignore +++ b/.trunk/.gitignore @@ -6,4 +6,8 @@ plugins user_trunk.yaml user.yaml +<<<<<<< HEAD tmp +======= +tools +>>>>>>> c7dc465 (Parametryzacja "muzyki mojego ludu") diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 4a7abcb..5e2903b 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -2,6 +2,7 @@ # To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml version: 0.1 cli: +<<<<<<< HEAD version: 1.20.1 # Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins) plugins: @@ -10,10 +11,44 @@ plugins: ref: v1.4.5 uri: https://github.com/trunk-io/plugins # Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) +======= + version: 1.12.1 +plugins: + sources: + - id: trunk + ref: v0.0.22 + uri: https://github.com/trunk-io/plugins +lint: + enabled: + - actionlint@1.6.25 + - markdownlint@0.35.0 + - trivy@0.43.1 + - trufflehog@3.44.0 + - pylint + - codespell + - cspell + - git-diff-check + - eslint + - prettier + - semgrep + - autopep8 + - bandit + - black + - flake8 + - isort + - mypy + - pylint + - ruff + - semgrep + - yapf + - gitleaks + +>>>>>>> c7dc465 (Parametryzacja "muzyki mojego ludu") runtimes: enabled: - node@18.12.1 - python@3.10.8 +<<<<<<< HEAD # This is the section where you manage your linters. (https://docs.trunk.io/check/configuration) lint: enabled: @@ -31,6 +66,8 @@ lint: - trivy@0.50.1 - trufflehog@3.71.0 - yamllint@1.35.1 +======= +>>>>>>> c7dc465 (Parametryzacja "muzyki mojego ludu") actions: disabled: - trunk-announce diff --git a/bot.py b/bot.py index 2bf6220..f5ec0a5 100644 --- a/bot.py +++ b/bot.py @@ -38,10 +38,10 @@ import spotipy from discord.ext import commands from spotipy.oauth2 import SpotifyClientCredentials -import yt_dlp -from spotify_dl import spotify from spotify_dl import youtube as youtube_download +from spotify_dl import spotify + Music_Config = TypedDict( "Music_Config", { @@ -68,6 +68,11 @@ MEMORY_FIVE_MUZYKA = "" SETTINGS_FILE = "" ENCODING = "" GRAPHICS_PATH = "" +MUZYKA_MOJEGO_LUDU_HISTORIA = 1500 +MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE = 30 +MUZYKA_MOJEGO_LUDU_PLAJLISTA = 30 + + # *=========================================== Platform Specific Predefines if platform in ("linux", "linux2"): @@ -187,7 +192,6 @@ async def on_ready(): logger.debug("%s has connected to Discord!", client.user) await client.change_presence(activity=discord.Game(name="Axe Throwing Darts")) await client.tree.sync() - # await tree.sync(guild=discord.Object(id=Your guild id)) await check() @@ -270,22 +274,25 @@ async def on_message(message): if "conjurer:" in message.content: async with channel.typing(): logger.debug("Procedura chatu") + message.content = message.content.replace("conjurer: ", "") - - prompt = message.content - if message.author.nick: username = message.author.nick else: username = message.author.name vykidailo = False bartender = False + if kondziu_mentioned: + prompt = message.clean_content + else: + prompt = message.content for role in message.author.roles: if role.name == "Vykidailo": vykidailo = True if role.name == "Bartender": bartender = True global MESSAGE_TABLE # pylint: disable=global-statement + result, MESSAGE_TABLE = await handle_response( prompt, vykidailo, bartender, MESSAGE_TABLE, username, False ) @@ -446,6 +453,20 @@ async def play(ctx, zamawial=None, arg=None): await ctx.send(result) +async def archive_channel(channel_no): + channel = client.get_channel(channel_no) + messages = [message async for message in channel.history(limit=None)] + path_newfile = ( + f"{LOGSTORE}channeldump_{channel_no}_{datetime.now()}.json" + ) + new_data = [] + for message in messages: + pass + with open(path_newfile, "x", encoding=ENCODING) as new_file: + new_file.seek(0) + json.dump(new_data, new_file, indent=4) + + async def check(): """Funkcja sprawdzająca czy grać następny kawałek.""" while True: @@ -564,14 +585,14 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music # * extend bo 20 ostatnich if music: history.append(message_table_muzyka[0]) - history.extend(message_table_muzyka[-20:]) + history.extend(message_table_muzyka[-15:]) else: history.append(MESSAGE_TABLE[0]) - history.extend(MESSAGE_TABLE[-20:]) + history.extend(MESSAGE_TABLE[-15:]) logger.info("Historia wysłana:") logger.debug(history) response = await openai.ChatCompletion.acreate( - model="gpt-3.5-turbo", messages=history + model="gpt-4", messages=history ) await asyncio.sleep(10) result = "" @@ -819,11 +840,11 @@ async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None): skip_start = 2 else: skip_start = 1 - for word in word_list[skip_start:]: + async for word in async_iterator_generator(word_list[skip_start:]): token_weight = len(word) logger.info("Słowo kluczowe: %s", word) itr = 0 - for file in music_file_list: + async for file in async_iterator_generator(music_file_list): file = file.split(SEPARATOR_FILE_PATH) char_remove = [ @@ -849,8 +870,8 @@ async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None): "mp3", ] all_words = [] - for f_iter in file: - for char in char_remove: + async for f_iter in async_iterator_generator(file): + async for char in async_iterator_generator(char_remove): f_iter = f_iter.replace(char, "") tmp = f_iter.split() all_words.extend(tmp) @@ -861,7 +882,7 @@ async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None): else: skip = 4 matched_times = 1 - for itm in all_words[skip:]: + async for itm in async_iterator_generator(all_words[skip:]): pingu += 1 pattern = ".*" + word + ".*" if re.match(pattern, itm, re.IGNORECASE): @@ -1530,6 +1551,7 @@ async def get_image_stable_diffusion(ctx): description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ", guild=discord.Object(id=664789470779932693), ) +# trunk-ignore(pylint/R0912) async def zagraj_muzyke_mego_ludu(ctx): """ Play completeley random playlist based on messaging history. @@ -1541,7 +1563,7 @@ async def zagraj_muzyke_mego_ludu(ctx): """ stats = {} if ctx: - stat_iter = get_stats(ctx, 1500) + stat_iter = get_stats(ctx, MUZYKA_MOJEGO_LUDU_HISTORIA) async for name, how_many in stat_iter: if len(name) > 3: stats[name] = how_many @@ -1556,7 +1578,7 @@ async def zagraj_muzyke_mego_ludu(ctx): async with ctx.typing(): logger.info("Zaczynam szukać timestamp %s", datetime.now()) search_time_glob = datetime.now() - file = await wyszukaj(ctx=ctx, how_many=100, slowa_kluczowe=key_words[:30]) + file = await wyszukaj(ctx=ctx, how_many=MUZYKA_MOJEGO_LUDU_PLAJLISTA, slowa_kluczowe=key_words[:MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE]) logger.info( "Koniec szukania(timestamp %s zajęło %s", datetime.now(), @@ -1596,6 +1618,38 @@ async def zagraj_muzyke_mego_ludu(ctx): logger.info("Plejlista zrobiona") +# trunk-ignore(mypy/arg-type) +@client.hybrid_command( + name="parametry_muzyki_mego_ludu", + description="Konfiguruje komende zagraj muzyke mojego ludu", + guild=discord.Object(id=664789470779932693), +) +async def parametry_muzyki_mego_ludu(ctx, ile_historii=1500, ile_slow_kluczowych=30, jak_dluga_plejlista=30): + """ + The function `parametry_muzyki_mego_ludu` sets global variables for the number of history entries, + number of keywords, and length of playlist for a music application. + + :param ctx: The `ctx` parameter is typically used in Discord.py, a Python library for creating + Discord bots. It represents the context of the command being executed, including information about + the message, the server, and the user who invoked the command + :param ile_historii: The parameter "ile_historii" represents the number of history items for the + music playlist, defaults to 1500 (optional) + :param ile_slow_kluczowych: The parameter "ile_slow_kluczowych" represents the number of keywords or + key phrases related to music that you want to include in your analysis or search, defaults to 30 + (optional) + :param jak_dluga_plejlista: The parameter "jak_dluga_plejlista" determines the length of the + playlist. It specifies how many songs should be included in the playlist, defaults to 30 (optional) + """ + + if ctx: + global MUZYKA_MOJEGO_LUDU_HISTORIA # pylint: disable=global-statement + MUZYKA_MOJEGO_LUDU_HISTORIA = ile_historii + global MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE # pylint: disable=global-statement + MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE = ile_slow_kluczowych + global MUZYKA_MOJEGO_LUDU_PLAJLISTA # pylint: disable=global-statement + MUZYKA_MOJEGO_LUDU_PLAJLISTA = jak_dluga_plejlista + + # *================================== Run # trunk-ignore(mypy/arg-type) client.run(TOKEN)