fix: Support compound emojis in mood parsing

- Updated regex to handle compound emojis with zero-width joiners (ZWJ)
- Fixes mood display for emojis like 😶‍🌫️ (face in clouds)
- Now captures full emoji sequences including variation selectors
This commit is contained in:
Spicy_Marinara
2025-10-14 11:39:32 +02:00
parent a9b0b6fefe
commit d5e4010d4d
2 changed files with 43 additions and 82 deletions
+40 -80
View File
@@ -1,19 +1,39 @@
# RPG Companion Extension for SillyTavern # RPG Companion Extension for SillyTavern
An immersive RPG extension that tracks character stats, scene information, and character thoughts in a beautiful, customizable UI panel. All automated! Works with any preset. Choose between Together or Separate generation modes for context and generations control. An immersive RPG extension that tracks character stats, scene information, and character thoughts in a beautiful, customizable UI panel. All automated! Works with any preset. Choose between Together or Separate generation modes for context and generation control.
[![Discord](https://img.shields.io/badge/Discord-Join%20Server-7289da)](https://discord.com/invite/KdAkTg94ME) [![My Discord](https://img.shields.io/badge/Discord-Join%20Server-7289da)](https://discord.com/invite/KdAkTg94ME)
[![Support](https://img.shields.io/badge/Ko--fi-Support%20Creator-ff5e5b)](https://ko-fi.com/marinara_spaghetti) [![Support Me](https://img.shields.io/badge/Ko--fi-Support%20Creator-ff5e5b)](https://ko-fi.com/marinara_spaghetti)
## 📥 Installation
1. Open SillyTavern
2. Go to the Extensions tab (cubes icon at the top)
3. Go to Install extension
4. Copy-paste this link: https://github.com/SpicyMarinara/rpg-companion-sillytavern
5. Press Install for all users/Install just for mme
![png](https://i.imgur.com/DYuIMWt.png)
![png](https://i.imgur.com/IJyIEMF.png)
## ✨ Features ## ✨ Features
![png](https://i.imgur.com/cVCAby0.png)
### Core Functionality ### Core Functionality
- **📊 User Stats Tracker**: Visual progress bars for health, sustenance, energy, hygiene, arousal, mood, and conditions - **📊 User Stats Tracker**: Visual progress bars for health, sustenance, energy, hygiene, arousal, mood, and conditions
- **🌍 Info Box Dashboard**: Beautiful widgets displaying date, weather, temperature, time, and location - **🌍 Info Box Dashboard**: Beautiful widgets displaying date, weather, temperature, time, and location of the current scene
- **💭 Character Thoughts**: Floating thought bubbles showing AI characters' internal monologue (editable in real-time!) - **💭 Character Thoughts**: Floating thought bubbles showing AI characters' internal monologue
- **🎲 Classic RPG Stats**: STR, DEX, CON, INT, WIS, CHA attributes with dice roll support - **🎲 Classic RPG Stats**: STR, DEX, CON, INT, WIS, CHA attributes with dice roll support
- **📦 Inventory System**: Track items your character is carrying - **📦 Inventory System**: Track items your character is carrying
- **📜 Immersive HTMML**: Enhance the immersion by including creative HTML/CSS/JS elements in your roleplay
- **➡️ Plot Progression**: Progress the plot with randomized events or natural progression with a click of a button
- **🎨 Multiple Themes**: Cyberpunk, Fantasy, Minimal, Dark, Light, and Custom themes - **🎨 Multiple Themes**: Cyberpunk, Fantasy, Minimal, Dark, Light, and Custom themes
- **✏️ Live Editing**: Edit stats, thoughts, weather, and more directly in the panels - **✏️ Live Editing**: Edit stats, thoughts, weather, and more directly in the panels
- **💾 Per-Swipe Data Storage**: Each swipe preserves its own tracker data - **💾 Per-Swipe Data Storage**: Each swipe preserves its own tracker data
@@ -27,46 +47,14 @@ An immersive RPG extension that tracks character stats, scene information, and c
- **🌈 Customizable Colors**: Create your own theme with custom color schemes - **🌈 Customizable Colors**: Create your own theme with custom color schemes
- **📱 Mobile Responsive**: Works beautifully on all devices - **📱 Mobile Responsive**: Works beautifully on all devices
## 📥 Installation
1. Download or clone this repository into your SillyTavern extensions folder:
SillyTavern/public/scripts/extensions/rpg-companion/
2. Restart SillyTavern
3. Go to Extensions tab → Find RPG Companion → Enable it
4. Open the extension panel (appears on the right side by default)
5. Configure your settings and start roleplaying!
## 🎮 How It Works
Instead of having the AI model generate RPG companion data in its main response, this extension:
1. Lets you roleplay normally without RPG prompts cluttering the conversation
2. After each AI response, automatically sends a separate request to the model
3. Includes only the last few messages (configurable) for context
4. Asks the model to generate ONLY the RPG companion data
5. Displays the formatted data in a dedicated panel
This approach:
- ✅ Keeps your main roleplay clean and focused
- ✅ Reduces token usage in the main conversation
- ✅ Allows the model to focus on roleplay quality
- ✅ Provides a better visual presentation of stats and info
## ⚙️ Settings ## ⚙️ Settings
### Main Panel Controls ### Main Panel Controls
- **Panel Position**: Left or Right side of the chat - **Panel Position**: Left or Right side of the chat
- **Theme**: Choose from 6 built-in themes or create custom - **Theme**: Choose from 6 built-in themes or create custom
- **Enable RPG Companion**: Turn the extension on/off
- **Auto-update after messages**: Automatically refresh RPG data after each message - **Auto-update after messages**: Automatically refresh RPG data after each message
- **Context Messages**: How many recent messages to include when generating updates (default: 4) - **Context Messages**: How many recent messages to include when generating updates (only for Separate generation mode)
### Display Options ### Display Options
@@ -83,7 +71,7 @@ Tracker data is generated within the main AI response and automatically extracte
Example: Example:
User: walks into the tavern User: walks into the tavern
AI: Full roleplay response AI: Trackers + Full roleplay response
↓ Extension extracts tracker data from response ↓ Extension extracts tracker data from response
@@ -109,6 +97,8 @@ User: walks into the tavern
AI: Pure roleplay response - no tracker data AI: Pure roleplay response - no tracker data
AI: Separate call with just the tracker data
↓ Extension sends separate request with context ↓ Extension sends separate request with context
↓ AI generates only tracker data ↓ AI generates only tracker data
@@ -161,7 +151,7 @@ The extension fully supports swipes:
### Manual Update ### Manual Update
If auto-update is disabled, you can click the "Manual Update" button in the settings to refresh the RPG data at any time. You can click the "Refresh RPG Info" button in the settings to refresh the RPG data at any time.
## 🎨 Themes ## 🎨 Themes
@@ -176,48 +166,22 @@ Choose from 6 beautiful themes:
## 🛠️ Technical Details ## 🛠️ Technical Details
### Data Architecture If you ever have an awesome idea to do your own SillyTavern extension, don't.
The extension uses a two-variable system:
- **lastGeneratedData**: Currently displayed tracker data (updates on generation, swipe, edit)
- **committedTrackerData**: Data used for context generation (updates when user sends message)
This separation ensures:
- Edits are displayed immediately
- Context uses the committed state from before edits
- Swipes preserve their own data correctly
### Swipe Detection
The extension intelligently detects swipes:
- MESSAGE_SENT event sets swipe flag to false
- MESSAGE_SWIPED checks if swipe content exists
- Only sets flag true for NEW generations (not navigation)
- Flag resets in onMessageReceived after generation completes
### Context Generation (Separate Mode)
Weather detection uses an emoji array:
🌤️ ☀️ ⛅ 🌦️ 🌧️ ⛈️ 🌩️ 🌨️ ❄️ 🌫️
Parsing uses separate if statements (not else-if) for each Info Box field to ensure all data is captured correctly.
## 🐛 Troubleshooting ## 🐛 Troubleshooting
### Extension doesn't appear ### Extension doesn't appear
- Make sure you've restarted SillyTavern after installation - Refresh your browser
- Check browser console (F12) for errors - Restart SillyTavern
- Verify all files are in the correct location - Ensure it's enabled in the Extensions tab
### Stats not updating ### Stats not updating
- Check that "Auto-update" is enabled - Check that "Auto-update" is enabled
- Try clicking "Manual Update" to test - Try clicking "Manual Update" to test
- Verify your AI backend is responding correctly - Verify your AI backend is responding correctly
- Check browser console for error messages - Check console for error messages
### Display issues ### Display issues
@@ -237,7 +201,7 @@ This program is free software: you can redistribute it and/or modify it under th
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
Copyright (C) 2024 Marysia (marinara_spaghetti) Copyright (C) 2024 marinara_spaghetti
## 💖 Support ## 💖 Support
@@ -248,7 +212,7 @@ If you enjoy this extension, consider supporting development:
## 🙏 Credits ## 🙏 Credits
- Extension Development: Marysia with assistance from GitHub Copilot - Extension Development: Marinara with assistance from GitHub Copilot
- Immersive HTML concept: Credit to u/melted_walrus - Immersive HTML concept: Credit to u/melted_walrus
- Info Box prompt inspiration: MidnightSleeper - Info Box prompt inspiration: MidnightSleeper
- Stats Tracker concept: Community feedback - Stats Tracker concept: Community feedback
@@ -256,12 +220,6 @@ If you enjoy this extension, consider supporting development:
## 🚀 Planned Features ## 🚀 Planned Features
- Support for selecting a different model for RPG updates - Support for selecting a different model for RPG updates
- Relationship/Standing system with characters
- Random plot push integration
- Export/import RPG data
- Historical stats tracking
- Custom stat categories
- Integration with character cards
## 💡 Tips ## 💡 Tips
@@ -277,4 +235,6 @@ If you enjoy this extension, consider supporting development:
--- ---
Made with ❤️ by Marysia Made with ❤️ by Marinara
PS I'm looking for a job or a sponsor to fund my custom AI frontend, contact me if interested:
mgrabower97@gmail.com
+3 -2
View File
@@ -1510,8 +1510,9 @@ function parseUserStats(statsText) {
const arousalMatch = statsText.match(/Arousal:\s*(\d+)%/); const arousalMatch = statsText.match(/Arousal:\s*(\d+)%/);
// Match new format: [Emoji]: [Conditions] // Match new format: [Emoji]: [Conditions]
// Look for emoji followed by colon, then conditions // Look for emoji (including compound emojis with ZWJ) followed by colon, then conditions
const moodMatch = statsText.match(/(\p{Emoji}):\s*(.+)/u); // Using [\p{Emoji}\u200D]+ to capture compound emojis with zero-width joiners
const moodMatch = statsText.match(/([\p{Emoji}\uFE0F\u200D]+):\s*(.+)/u);
// Extract inventory // Extract inventory
const inventoryMatch = statsText.match(/Inventory:\s*(.+)/i); const inventoryMatch = statsText.match(/Inventory:\s*(.+)/i);