mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
Playlist based on chat history
This commit is contained in:
@@ -756,10 +756,42 @@ async def async_iterator_generator(range_of_iterable):
|
||||
"""
|
||||
|
||||
|
||||
async def get_stats(ctx, history_limit):
|
||||
"""
|
||||
The `get_stats` function retrieves the message history of a specific channel and counts the
|
||||
frequency of each word in the messages.
|
||||
|
||||
:param ctx: The `ctx` parameter is an object that represents the context of the command being
|
||||
executed. It contains information such as the message, the author, the server, and other relevant
|
||||
details
|
||||
:param history_limit: The `history_limit` parameter is the maximum number of messages to retrieve
|
||||
from the channel history. It determines how far back in time the statistics will be calculated
|
||||
:return: The function `get_stats` returns a dictionary `stats` that contains the frequency count of
|
||||
words found in the messages from the specified channel.
|
||||
"""
|
||||
channel_id = 1062047367337095268
|
||||
async with ctx.typing():
|
||||
stats = {}
|
||||
channel = client.get_channel(channel_id)
|
||||
messages = [message async for message in channel.history(limit=history_limit)]
|
||||
# traverse the iterable of awaitables
|
||||
for message in messages:
|
||||
# await and get the result from the awaitable
|
||||
result = message.content
|
||||
words = result.split()
|
||||
for word in words:
|
||||
if word in stats:
|
||||
stats[word] += 1
|
||||
else:
|
||||
stats[word] = 1
|
||||
for name, how_many in stats.items():
|
||||
yield name, how_many
|
||||
|
||||
|
||||
# trunk-ignore(pylint/R0914)
|
||||
# trunk-ignore(pylint/R0915)
|
||||
# trunk-ignore(pylint/R0912)
|
||||
async def wyszukaj(ctx, how_many=0):
|
||||
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
|
||||
operation on music library.
|
||||
@@ -773,7 +805,10 @@ async def wyszukaj(ctx, how_many=0):
|
||||
"""
|
||||
# TODO: Potem dorobić wyszukiwania po kawałkach słów
|
||||
# i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu.
|
||||
word_list = ctx.message.content.split()
|
||||
if slowa_kluczowe:
|
||||
word_list = slowa_kluczowe
|
||||
else:
|
||||
word_list = ctx.message.content.split()
|
||||
logger.info("Wyszukuje")
|
||||
search_weight = []
|
||||
for _ in range(len(music_file_list)):
|
||||
@@ -1489,7 +1524,12 @@ async def get_image_stable_diffusion(ctx):
|
||||
pass
|
||||
|
||||
|
||||
# @client.hybrid_command()
|
||||
# trunk-ignore(mypy/arg-type)
|
||||
@client.hybrid_command(
|
||||
name="zagraj_muzyke_mego_ludu",
|
||||
description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
async def zagraj_muzyke_mego_ludu(ctx):
|
||||
"""
|
||||
Play completeley random playlist based on messaging history.
|
||||
@@ -1499,9 +1539,58 @@ async def zagraj_muzyke_mego_ludu(ctx):
|
||||
channel, the author, and other relevant details. In this case, it is being passed as a parameter to
|
||||
the `get_image
|
||||
"""
|
||||
|
||||
stats = {}
|
||||
if ctx:
|
||||
pass
|
||||
stat_iter = get_stats(ctx, 100)
|
||||
async for name, how_many in stat_iter:
|
||||
if len(name) > 3:
|
||||
stats[name] = how_many
|
||||
|
||||
sorted_stats = sorted(stats.items(), key=lambda x: x[1])
|
||||
sorted_stats = list(reversed(sorted_stats))
|
||||
print(sorted_stats)
|
||||
reply = "Wygenerowana plejlista:\n"
|
||||
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=sorted_stats[:30])
|
||||
logger.info(
|
||||
"Koniec szukania(timestamp %s zajęło %s",
|
||||
datetime.now(),
|
||||
datetime.now() - search_time_glob,
|
||||
)
|
||||
index = 1
|
||||
if file:
|
||||
for plik in file:
|
||||
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||
MUZYKA["queue"].insert(0, plik[1])
|
||||
MUZYKA["requestor"].insert(0, ctx.author)
|
||||
metadata = eyed3.load(plik[1])
|
||||
if metadata and metadata.tag:
|
||||
if metadata.tag.title:
|
||||
reply += f"{index} {metadata.tag.title}"
|
||||
else:
|
||||
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera."
|
||||
|
||||
if metadata.tag.artist:
|
||||
reply += f" wykonawcy {metadata.tag.artist}"
|
||||
if metadata.tag.album:
|
||||
reply += f" z albumu {metadata.tag.album}"
|
||||
if metadata.tag.title:
|
||||
reply += " z prywatnej kolekcji Hammera i na Twoją specjalną rpośbę.\n"
|
||||
else:
|
||||
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera."
|
||||
|
||||
index += 1
|
||||
if len(reply) > 1800:
|
||||
await ctx.send(reply)
|
||||
reply = ""
|
||||
else:
|
||||
await ctx.send(
|
||||
"Obawiam się że nie mogę nic znaleźć u siebie. Spróbuj komendy '$dej_co_ze_spotifaja' jeśli masz link"
|
||||
)
|
||||
await ctx.send(reply)
|
||||
logger.info("Plejlista zrobiona")
|
||||
|
||||
|
||||
# *================================== Run
|
||||
|
||||
Reference in New Issue
Block a user