A sophisticated first words announcement system for Streamer.bot that provides personalized welcome messages, TTS support, and intelligent stream validation.
- Custom user dictionary with personalized welcome messages for specific users
- Role-based messages for mods, VIPs, subscribers, and followers
- Fallback messages for new viewers
- Custom TTS voices per user in the dictionary
- Permission-based TTS for different user roles
- Configurable default voice for unknown users
- Smart voice fallback system
- Hybrid validation system - trust known users, validate unknown ones
- Clips-based verification to prevent stale game data
- Configurable validation period (default: 30 days)
- Per-user validation settings (deepCheck true/false)
- Last streamed game information with Twitch link
- Permission-controlled display for different user types
- Intelligent filtering to show only active streamers
- Copy the
code.csfile to your Streamer.bot project - Create a new C# action in Streamer.bot
- Paste the code into the C# Code sub-action
- Configure the trigger for first-time chat messages
- Customize the settings (see Configuration section)
// Default TTS voice for all users
private string defaultTTSVoice = "EnglishTrans";
// Number of days to validate recent clips
private int clipValidationDays = 30;
// Use default voice when specific voice unavailable
private bool useDefaultVoiceIfUnavailableKnown = true;Add users to the knownUsers dictionary:
{ "username", getArg => (
"Custom welcome message for @username!",
"VoiceName",
false // deepCheck: false = trusted, true = validate clips
) }Parameters:
- Message: Custom welcome message with @username placeholder
- TTS Voice: Specific voice for this user (or
string.Emptyfor no TTS) - Deep Check:
false= trusted (no validation),true= validate with clips
Customize messages in GetMessageText() method:
if (isMod) {
return "Mod message here";
} else if (isVIP) {
return "VIP message here";
} else if (isSub) {
return "Subscriber message here";
} else if (isFollowing) {
return "Follower message here";
} else {
return "New viewer message here";
}Stream Info Display Permissions:
private bool AllowUnknownUsersLastStreamed(bool isMod, bool isSub, bool isVIP, bool isFollowing)
{
return isMod || isVIP; // Only mods and VIPs see stream info
}TTS Permissions:
private bool AllowUnknownUsersTTS(bool isMod, bool isSub, bool isVIP, bool isFollowing)
{
return isMod || isVIP || isSub; // Mods, VIPs, and subs get TTS
}-
Known Users: Uses individual
deepChecksetting from dictionarydeepCheck = false: Trusted - shows stream info without validationdeepCheck = true: Validates recent clips before showing stream info
-
Unknown Users: Always validates with recent clips
- Only shows stream info if clips exist within
clipValidationDays - Prevents stale game data from inactive accounts
- Only shows stream info if clips exist within
- User enters chat for the first time
- System checks if user is in
knownUsersdictionary - If known: Uses custom message, TTS voice, and validation setting
- If unknown: Uses role-based message and permission checks
- Validates stream info based on user type and settings
- Sends announcement and TTS (if permitted)
Known User (Trusted):
*Base Drops* @Z3roDamage is here to liven up the party! Last Streamed: Valorant at: twitch.tv/z3rodamage
Unknown User (Validated):
Cool sunglasses, a fedora, lots of swag - @SomeVIP is here!! Last Streamed: Minecraft at: twitch.tv/somevip
New Viewer:
Howdy weary traveller @NewViewer! feel free to Relax and vibe~
- English:
EnglishTrans - Japanese:
JapanesePreTrans - Mix and match languages per user
Example Japanese user:
{ "japanese_user", getArg => (
"@{0} ใใใซใกใฏ๏ผใใใใ๏ผ",
"JapanesePreTrans",
false
) }TTS Not Working:
- Verify TTS voice names are correct
- Check permission settings
- Ensure
messageStrippedparameter is available
Stream Info Not Showing:
- Check
clipValidationDayssetting (try increasing) - Verify user permissions in
AllowUnknownUsersLastStreamed() - For known users, check their
deepChecksetting
Clips Validation Failing:
- Some streamers don't have clips despite being active
- Set trusted users to
deepCheck = falseto bypass validation - Adjust
clipValidationDaysfor more lenient validation
The script includes comprehensive logging:
- Stream validation results
- Clip checking status
- User permission checks
- Error handling with fallbacks
Check Streamer.bot logs for detailed information about script execution.
{ "special_guest", getArg => (
"๐ SPECIAL GUEST @{0} HAS ARRIVED! ๐",
"EnglishTrans",
false
) }{ "gaming_friend", getArg => (
"My gaming buddy @{0} is here! Ready to get wrecked? ๐",
"EnglishTrans",
true // Still validate their clips
) }{ "quiet_user", getArg => (
"The mysterious @{0} has appeared...",
string.Empty, // No TTS
false
) }- Streamer.bot (latest version recommended)
- C# Code Action capability
- TTS Integration (for voice features)
- Twitch Integration (for clips validation)
Feel free to submit issues, feature requests, or improvements to enhance the script's functionality.
I'm a small streamer who likes to Code so if you will use this code, please give some kind of contribution/shoutout to ArnieTW @Twitch.tv to help me with making content!~
This project is open source. Feel free to modify and distribute according to your needs.
Created for the Streamer.bot community ๐ฎโจ