diff --git a/gurt/api.py b/gurt/api.py index eda5ee7..234482c 100644 --- a/gurt/api.py +++ b/gurt/api.py @@ -920,36 +920,45 @@ async def get_ai_response(cog: 'GurtCog', message: discord.Message, model_name: full_text = "\n".join(text_parts).strip() if full_text: # Only add if there's some text content - author_details = msg.get("author", {}) - raw_display_name = author_details.get("display_name") - raw_name = author_details.get("name") # Discord username - author_id = author_details.get("id") + author_string_from_cache = msg.get("author_string") - final_display_part = "" - username_part_str = "" + if author_string_from_cache and str(author_string_from_cache).strip(): + # If author_string is available and valid from the cache, use it directly. + # This string is expected to be pre-formatted by the context gathering logic. + author_identifier_string = str(author_string_from_cache) + parts.append(types.Part(text=f"{author_identifier_string}: {full_text}")) + else: + # Fallback to reconstructing the author identifier if author_string is not available/valid + author_details = msg.get("author", {}) + raw_display_name = author_details.get("display_name") + raw_name = author_details.get("name") # Discord username + author_id = author_details.get("id") - if raw_display_name and str(raw_display_name).strip(): - final_display_part = str(raw_display_name) - elif raw_name and str(raw_name).strip(): # Fallback display to username - final_display_part = str(raw_name) - elif author_id: # Fallback display to User ID - final_display_part = f"User ID: {author_id}" - else: # Default to "Unknown User" if no other identifier is found - final_display_part = "Unknown User" + final_display_part = "" + username_part_str = "" - # Construct username part if raw_name is valid and different from final_display_part - if raw_name and str(raw_name).strip() and str(raw_name).lower() != "none": - # Avoid "Username (Username: Username)" if display name fell back to raw_name - if final_display_part.lower() != str(raw_name).lower(): - username_part_str = f" (Username: {str(raw_name)})" - # If username is bad/missing, but we have an ID, and ID isn't already the main display part - elif author_id and not (raw_name and str(raw_name).strip() and str(raw_name).lower() != "none"): - if not final_display_part.startswith("User ID:"): - username_part_str = f" (User ID: {author_id})" - - author_identifier_string = f"{final_display_part}{username_part_str}" - # Append the text part to the existing parts list for this message - parts.append(types.Part(text=f"{author_identifier_string}: {full_text}")) + if raw_display_name and str(raw_display_name).strip(): + final_display_part = str(raw_display_name) + elif raw_name and str(raw_name).strip(): # Fallback display to username + final_display_part = str(raw_name) + elif author_id: # Fallback display to User ID + final_display_part = f"User ID: {author_id}" + else: # Default to "Unknown User" if no other identifier is found + final_display_part = "Unknown User" + + # Construct username part if raw_name is valid and different from final_display_part + if raw_name and str(raw_name).strip() and str(raw_name).lower() != "none": + # Avoid "Username (Username: Username)" if display name fell back to raw_name + if final_display_part.lower() != str(raw_name).lower(): + username_part_str = f" (Username: {str(raw_name)})" + # If username is bad/missing, but we have an ID, and ID isn't already the main display part + elif author_id and not (raw_name and str(raw_name).strip() and str(raw_name).lower() != "none"): + if not final_display_part.startswith("User ID:"): + username_part_str = f" (User ID: {author_id})" + + author_identifier_string = f"{final_display_part}{username_part_str}" + # Append the text part to the existing parts list for this message + parts.append(types.Part(text=f"{author_identifier_string}: {full_text}")) # Only append to contents if there are parts to add for this message if parts: