From f3d8578759d2fea9e481696b7a29e2d2a1c30cc9 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 19 Mar 2026 22:03:03 +0100 Subject: normalised times on vclogs, and improved jarvis via reply chaining --- cogs/jarvis.py | 95 +++++++++++++++++++++++----------------------------------- 1 file changed, 37 insertions(+), 58 deletions(-) (limited to 'cogs/jarvis.py') diff --git a/cogs/jarvis.py b/cogs/jarvis.py index 4f34ea8..866700e 100644 --- a/cogs/jarvis.py +++ b/cogs/jarvis.py @@ -24,10 +24,10 @@ class Jarvis(commands.Cog): @commands.Cog.listener() async def on_message(self, message): - print(message.content) if message.author == self.bot.user: return - + + logger.info(message.content) if message.mentions: if message.mentions[0].id == self.bot.user.id: await self.jarvis(message) @@ -42,7 +42,8 @@ class Jarvis(commands.Cog): "Content-Type": "application/json" } - messages = Jarvis._build_messages(message) + chain = await Jarvis._build_message_chain(message) + messages = Jarvis._build_messages(message, chain) payload = Jarvis._build_payload(messages) response_data = await Jarvis._make_api_request(payload, headers) @@ -55,45 +56,47 @@ class Jarvis(commands.Cog): await Jarvis._handle_download_action(message, channel) @staticmethod - def _build_messages(message): + async def _build_message_chain(message): + chain = [] + current = message + max_depth = 5 + + while current and len(chain) < max_depth: + chain.append(current) + if not current.reference: + break + try: + if current.reference.resolved: + current = current.reference.resolved + else: + current = await current.channel.fetch_message(current.reference.message_id) + except discord.NotFound: + break + + return list(reversed(chain)) + + @staticmethod + def _build_messages(message, chain=None): messages = [{ "role": "system", - "content": "You are an alter ego of Senator Sperma Armstrong.\n" - "your task is to tell the program what to do and how to respond after receiving a message.\n" - "message field has to be filled out in polish.\n" - "act like jarvis (only behavior wise), be a personal assistant to user, do not use emojis\n" - "do not ask the user if they want to do an action. the user will tell you that." + "content": "Jesteś Senator Sperma Armostrong, także znany jako Jarvis." + "Twoim zadaniem, po za asystowaniem użytkownika, jest mówienie programowi nadrzędnemu jak sie zachować" + "pole 'message' może być tylko wypełnione w języku Polskim." + "zachowuj sie jak Jarvis, bądź osobistym asystentem użytkownika, nie używaj emotikon" + "nie pytaj sie użytkownika czy chcesz abyś coś zrobił, użytkownik ci sam powie abyś coś wykonał" }] - messages.append({ - "role": "user", - "content": f"{message.author.display_name}: {message.content}" - - }) + if chain is None: + chain = [message] - if Jarvis._is_reply(message): - messages.extend(Jarvis._build_reply_messages(message)) + for msg in chain: + messages.append({ + "role": "user", + "content": f"{msg.author.display_name}: {msg.content}" + }) return messages - @staticmethod - def _is_reply(message): - return message.reference and (message.type == discord.MessageType.reply or message.reference.resolved) - - @staticmethod - def _build_reply_messages(message): - original_msg = message.reference.resolved - return [ - { - "role": "user", - "content": f"{original_msg.author.display_name}: {original_msg.content}" - }, - { - "role": "user", - "content": f"{message.author.display_name}: {message.content}" - } - ] - @staticmethod def _build_payload(messages): return { @@ -191,29 +194,5 @@ class Jarvis(commands.Cog): logger.error(f"Details: {response['details']}") shutil.rmtree(response["temp_dir"]) - @staticmethod - async def get_original(message): - if message.type == discord.MessageType.reply: - # The original message is already resolved (cached) - reply = message.reference.resolved - elif message.reference: - # If not cached, fetch it from the API - try: - reply = await message.channel.fetch_message(message.reference.message_id) - except discord.NotFound: - reply = None - else: - reply = None - - if reply: - reply_content = reply.content - else: - reply_content = None - - if reply_content: - return f"{message.content} [which is a reply to] {reply_content}" - else: - return message.content - def setup(bot): bot.add_cog(Jarvis(bot)) -- cgit v1.2.3