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.
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.
This commit improves user identification in two key areas:
1. **AI Response Context:**
In `gurt/api.py`, messages processed by the AI now include a more informative author string, combining the user's display name and username (e.g., "DisplayName (Username: actual_username)"). This provides richer context about message authors.
2. **Tool Definitions:**
Descriptions for tools in `gurt/config.py` and `gurt/prompt.py` (e.g., `search_user_messages`, `get_user_facts`) and their parameters have been updated to explicitly state that user identification relies on "User ID". This enhances clarity for the AI model and developers.
Updated the description for `run_terminal_command` to specify it runs in an "empty" Docker sandbox.
Added documentation for the new `execute_internal_command` tool, which executes commands on the host machine.