Introduces `EMOJI_STICKER_DESCRIPTION_MODEL` to `config.py` and uses it in `generate_image_description` for "emoji" and "sticker" item types. This ensures a dedicated model is used for these specific image description tasks, improving accuracy or efficiency.
Introduce send_tenor_gif tool that uses AI to select the best GIF from Tenor search results and send it to the channel. Increase the default and maximum limits for Tenor GIF search tools to improve selection quality. Update parameter descriptions and validation accordingly.
Refactor AI response processing to correctly handle custom emojis and stickers.
Custom emojis are now converted to Discord's `<:name:id>` format for proper display.
Custom stickers are identified and their IDs are extracted to be sent as separate attachments, removing them from the main content.
This ensures Gurt can properly utilize learned custom emojis and stickers in its responses.
This commit introduces two main enhancements to Gurt's capabilities:
1. **Tenor GIF Integration:**
* The AI can now request Tenor GIFs via a `request_tenor_gif_query` field in its response schema.
* `api.py` handles these requests by searching Tenor (using the new `TENOR_API_KEY` from config) and appending the GIF URL to the AI's message content.
* System prompts have been updated to instruct the AI on how to request GIFs.
2. **Custom Emoji & Sticker Learning and Usage:**
* Introduces an `EmojiManager` (in the new `gurt/emojis.py`) to store and manage mappings of custom emoji/sticker names to their URLs. This data is persisted to `EMOJI_STORAGE_FILE`.
* Gurt now automatically learns custom emojis and stickers (and their URLs) from user messages via the `on_message` listener in `listeners.py`.
* The AI can be prompted to use these learned emojis/stickers by referencing their `:name:`.
* `api.py` processes AI responses to identify known custom emojis/stickers. For stickers, their URL is appended to the content if mentioned.
* A `learnemoji` command has been added for manually teaching Gurt emojis/stickers, although automatic learning is the primary mechanism.
* System prompts are updated to guide the AI on using custom emojis/stickers.
Overhauls Gurt's prompt to define a more authentic, edgy, and extremely casual Discord persona. This aligns Gurt's interactions with the chaotic and unfiltered nature of target online communities.
Key enhancements to communication style:
- **Emulate Observed Flow:** Prioritizes mirroring human conversational patterns, slang, tone, and formatting from provided examples.
- **Extremely Casual Language:** Mandates dominant lowercase, highly fragmented/run-on sentences, minimal/unconventional punctuation, and a stream-of-consciousness style.
- **Varied & Contextual Slang/Tone:**
- Encourages organic integration of diverse internet/Discord slang (e.g., "goon," "tuff," "pmo," "ts").
- Specifies an irreverent, chaotic, and edgy tone. This includes permitting dark/edgy humor, profanity, and explicit content (such as "rape jokes" or sexual discussions/roleplay) when contextually appropriate and mirroring observed interactions. Gurt remains uncensored.
- **Cultural & Tech Savviness:** Updated with more specific examples (e.g., Vocaloid, Python, Flutter).
- **Emoji Usage:** Added guidelines for frequent and expressive emoji use.
Introduces `get_user_avatar_data` to retrieve a user's avatar as base64 encoded image data, allowing the AI to "see" the profile picture directly. This includes special handling in `process_requested_tools` to attach the image as a `types.Part` in the prompt.
Also adds `get_user_highest_role_color` to fetch the color and details of a user's highest-positioned role.
Update Gurt's prompt to clarify that Ame-chan is not an AI and introduce the KAngel bot. Also, update the Gemini model version to `gemini-2.5-flash-preview-05-20` and remove uptime from server specs.