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/R0914)
|
||||||
# trunk-ignore(pylint/R0915)
|
# trunk-ignore(pylint/R0915)
|
||||||
# trunk-ignore(pylint/R0912)
|
# 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
|
Take in a context object and an optional integer parameter "how_many" and perform search
|
||||||
operation on music library.
|
operation on music library.
|
||||||
@@ -773,7 +805,10 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
"""
|
"""
|
||||||
# TODO: Potem dorobić wyszukiwania po kawałkach słów
|
# TODO: Potem dorobić wyszukiwania po kawałkach słów
|
||||||
# i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu.
|
# 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")
|
logger.info("Wyszukuje")
|
||||||
search_weight = []
|
search_weight = []
|
||||||
for _ in range(len(music_file_list)):
|
for _ in range(len(music_file_list)):
|
||||||
@@ -1489,7 +1524,12 @@ async def get_image_stable_diffusion(ctx):
|
|||||||
pass
|
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):
|
async def zagraj_muzyke_mego_ludu(ctx):
|
||||||
"""
|
"""
|
||||||
Play completeley random playlist based on messaging history.
|
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
|
channel, the author, and other relevant details. In this case, it is being passed as a parameter to
|
||||||
the `get_image
|
the `get_image
|
||||||
"""
|
"""
|
||||||
|
stats = {}
|
||||||
if ctx:
|
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
|
# *================================== Run
|
||||||
|
|||||||
Reference in New Issue
Block a user