diff --git a/src/components/PlatformBadges.astro b/src/components/PlatformBadges.astro index 4c8b44a..1ccf3a6 100644 --- a/src/components/PlatformBadges.astro +++ b/src/components/PlatformBadges.astro @@ -5,13 +5,12 @@ * via the PageTitle override, but can also be used directly in MDX. */ interface Props { - platforms: Array<'twitch' | 'youtube' | 'trovo' | 'kick' | string>; + platforms: Array<'twitch' | 'youtube' | 'kick' | string>; } const LABELS: Record = { twitch: 'Twitch', youtube: 'YouTube', - trovo: 'Trovo', kick: 'Kick', }; @@ -62,10 +61,6 @@ const { platforms = [] } = Astro.props; background-color: #53fc18; color: #000; } - .platform-badge.trovo { - background-color: #64d376; - color: #000; - } .platform-badge.youtube { background-color: #f00; color: #fff; diff --git a/src/content.config.ts b/src/content.config.ts index 11e3bb8..d447b43 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -13,7 +13,7 @@ export const collections = { * Streaming platforms a command/feature supports. * Rendered as badges under the page title (see PageTitle override). */ - platforms: z.array(z.enum(['twitch', 'youtube', 'trovo', 'kick'])).optional(), + platforms: z.array(z.enum(['twitch', 'youtube', 'kick'])).optional(), /** SEO keywords emitted as a tag (see Head override). */ keywords: z.array(z.string()).optional(), /** diff --git a/src/content/changelog/docs/2026-07-18-accuracy-pass.mdx b/src/content/changelog/docs/2026-07-18-accuracy-pass.mdx new file mode 100644 index 0000000..9447468 --- /dev/null +++ b/src/content/changelog/docs/2026-07-18-accuracy-pass.mdx @@ -0,0 +1,14 @@ +--- +title: Documentation accuracy pass +description: Docs are now verified against the chatbot and realtime source code — corrected websocket payload shapes, game-module payouts, raffle defaults, and spam filter settings. +date: 2026-07-18 +--- + +We ran a full accuracy review of the documentation, checking claims directly against the chatbot and realtime service source code. Highlights: + +- **WebSockets:** `channel.session.reset` delivers session data flat under `data` (not `data.session`) — the payload reference and all client examples now agree. Session keys are documented in their real `follower-latest` format, and `channel.session.update`'s full payload is now listed. +- **Games:** Roulette pays even money and its slider sets the *win* chance; the Slotmachine only pays on three matching emotes, and its exact payout formula is now documented. +- **Raffles:** `!raffle` and `!sraffle` arguments are optional — defaults, caps, and the automatic winner-count brackets are now spelled out. +- **Spam filters:** One-Man Spam, Repetition, Zalgo, and Language filters now document their actual settings. + +If you spot anything that doesn't match what the product does, the **Edit page** link at the bottom of every page goes straight to the source on GitHub. diff --git a/src/content/docs/chatbot/commands/custom.md b/src/content/docs/chatbot/commands/custom.md index 7c0b9ee..61c34cf 100644 --- a/src/content/docs/chatbot/commands/custom.md +++ b/src/content/docs/chatbot/commands/custom.md @@ -120,7 +120,7 @@ Variables used: This command sends a simple shoutout to a specified user. ```streamelements -!cmd add !shoutout Check out $(1), they are playing $(game ${1}) at https://twitch.tv/$(1) +!cmd add !shoutout Check out ${1}, they are playing $(game ${1}) at https://twitch.tv/${1} ``` **Output:** diff --git a/src/content/docs/chatbot/commands/default/8ball.mdx b/src/content/docs/chatbot/commands/default/8ball.mdx index 07bd03c..bcd8922 100644 --- a/src/content/docs/chatbot/commands/default/8ball.mdx +++ b/src/content/docs/chatbot/commands/default/8ball.mdx @@ -1,7 +1,7 @@ --- title: "!8ball" description: "Ask the StreamElements chatbot a question with the !8ball command and receive a random, magic 8-ball style answer." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - 8ball command - magic 8 ball chatbot diff --git a/src/content/docs/chatbot/commands/default/alerts.mdx b/src/content/docs/chatbot/commands/default/alerts.mdx index 2a8be96..08440ba 100644 --- a/src/content/docs/chatbot/commands/default/alerts.mdx +++ b/src/content/docs/chatbot/commands/default/alerts.mdx @@ -1,7 +1,7 @@ --- title: "!alerts" description: "Control StreamElements overlay alerts (mute, skip, pause) in real-time directly from chat using the !alerts command. Essential for stream management." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - alerts command - stream alerts @@ -66,4 +66,4 @@ By default, only users with **Moderator** permission level or higher can use thi ## Related Commands -* [Chat Alerts module](/chatbot/modules/chatalerts): Sends automated chat messages for stream events such as follows, subscriptions, and raids. +* [Chat Alerts module](/chatbot/modules/chatalerts): Not to be confused with `!alerts` — it posts chat *messages* for events like follows and subscriptions, and does not control overlay alerts. diff --git a/src/content/docs/chatbot/commands/default/bot.mdx b/src/content/docs/chatbot/commands/default/bot.mdx index 079eea1..5729303 100644 --- a/src/content/docs/chatbot/commands/default/bot.mdx +++ b/src/content/docs/chatbot/commands/default/bot.mdx @@ -1,7 +1,7 @@ --- title: "!bot" description: "Manage your StreamElements chatbot with the !bot command. Control bot behavior, including muting, unmuting, and removing the bot from chat." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - bot command - streamelements chatbot diff --git a/src/content/docs/chatbot/commands/default/cancelraffle.mdx b/src/content/docs/chatbot/commands/default/cancelraffle.mdx index 8988135..33e7188 100644 --- a/src/content/docs/chatbot/commands/default/cancelraffle.mdx +++ b/src/content/docs/chatbot/commands/default/cancelraffle.mdx @@ -50,5 +50,5 @@ By default, only users with **Moderator** permission level or higher can use thi ## Related Commands -* [`!raffle`](/chatbot/commands/default/raffle): Starts a new raffle where users can enter multiple times (using points). -* [`!sraffle`](/chatbot/commands/default/sraffle): Starts a new raffle where each user can only enter once (using keywords). +* [`!raffle`](/chatbot/commands/default/raffle): Starts a multi-winner raffle that splits the points pot among the winners. +* [`!sraffle`](/chatbot/commands/default/sraffle): Starts a single-winner raffle where one winner takes the full pot. diff --git a/src/content/docs/chatbot/commands/default/command.mdx b/src/content/docs/chatbot/commands/default/command.mdx index 0b90507..6a30c24 100644 --- a/src/content/docs/chatbot/commands/default/command.mdx +++ b/src/content/docs/chatbot/commands/default/command.mdx @@ -1,7 +1,7 @@ --- title: "!command" description: "Manage StreamElements chatbot custom commands directly from chat using the !command (!cmd) functions: add, remove, edit, alias, show, options." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - command command - cmd command @@ -150,8 +150,8 @@ When using the `!command options` subcommand, you specify settings using flags f | :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :---------------------------------------- | | `-cd` | Sets the **global command cooldown** (minimum time between *any* use of the command). | `` (e.g., `10`) | `-cd 10` | | `-usercd` | Sets the **user-specific cooldown** (minimum time the *same user* must wait before using the command again). | `` (e.g., `30`) | `-usercd 30` | -| `-cost` | Sets the **loyalty points cost** charged each time the command is used. If a user doesn't have enough points, the command silently does nothing (no error message is sent). Requires the StreamElements [Loyalty System](https://docs.streamelements.com/docs/loyalty/overview) active. | `` (e.g., `50`) | `-cost 50` | -| `-level` | Sets the **minimum user permission level** required. Takes a **number**: `100` (Everyone), `250` (Subscriber), `400` (VIP), `500` (Moderator), `1000` (Super Moderator). | `` (e.g., `500`) | `-level 500` | +| `-cost` | Sets the **loyalty points cost** charged each time the command is used. If a user doesn't have enough points, the command silently does nothing (no error message is sent). Requires the StreamElements [Loyalty System](https://support.streamelements.com/hc/en-us/articles/10474478470290-Loyalty-System-Overview) (enabled in the dashboard under **Loyalty** → **Loyalty Settings**). | `` (e.g., `50`) | `-cost 50` | +| `-level` | Sets the **minimum user permission level** required. Takes a **number**: `100` (Everyone), `250` (Subscriber), `300` (Regular), `400` (VIP), `500` (Moderator), `1000` (Super Moderator). No other values are accepted. | `` (e.g., `500`) | `-level 500` | | `-type` | Sets **how the bot responds**. Platform support for `reply`, `mention`, and `whisper` may vary. | `say` (default), `reply`, `mention`, `whisper` | `-type whisper` | | `-trigger` | **Renames the command**, changing the trigger word used to invoke it. | `` (e.g., `!links`) | `-trigger !links` | | `-enable` | Enables the command. | N/A | `-enable` | diff --git a/src/content/docs/chatbot/commands/default/commands.mdx b/src/content/docs/chatbot/commands/default/commands.mdx index 1cdc84c..ae9d557 100644 --- a/src/content/docs/chatbot/commands/default/commands.mdx +++ b/src/content/docs/chatbot/commands/default/commands.mdx @@ -1,7 +1,7 @@ --- title: "!commands" description: "Use the !commands command in StreamElements chatbot to display a link to the creator's public commands list page." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - commands command - StreamElements diff --git a/src/content/docs/chatbot/commands/default/editcounter.mdx b/src/content/docs/chatbot/commands/default/editcounter.mdx index 899b089..334ed11 100644 --- a/src/content/docs/chatbot/commands/default/editcounter.mdx +++ b/src/content/docs/chatbot/commands/default/editcounter.mdx @@ -1,7 +1,7 @@ --- title: "!editcounter" description: "Use the !editcounter command in StreamElements chatbot to set, increment, or decrement custom counter values directly from chat." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - editcounter command - counter command diff --git a/src/content/docs/chatbot/commands/default/emotes.mdx b/src/content/docs/chatbot/commands/default/emotes.mdx index ff03561..63d5001 100644 --- a/src/content/docs/chatbot/commands/default/emotes.mdx +++ b/src/content/docs/chatbot/commands/default/emotes.mdx @@ -1,7 +1,7 @@ --- title: "!emotes" description: "Use the !emotes command in StreamElements chatbot to list available emotes from Twitch, BTTV, FFZ, or 7TV, or to reload the entire emote cache." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - emotes command - list emotes diff --git a/src/content/docs/chatbot/commands/default/filesay.mdx b/src/content/docs/chatbot/commands/default/filesay.mdx index 1eefca2..b8cef86 100644 --- a/src/content/docs/chatbot/commands/default/filesay.mdx +++ b/src/content/docs/chatbot/commands/default/filesay.mdx @@ -1,7 +1,7 @@ --- title: "!filesay" description: "Use the !filesay command in StreamElements chatbot to send multiple lines of text from a URL to chat, ideal for bulk commands like bans." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - filesay command - chatbot command diff --git a/src/content/docs/chatbot/commands/default/index.md b/src/content/docs/chatbot/commands/default/index.md index abe266f..7daaea1 100644 --- a/src/content/docs/chatbot/commands/default/index.md +++ b/src/content/docs/chatbot/commands/default/index.md @@ -52,9 +52,9 @@ Below is the full list of default commands, grouped by what they do. Click on ea | --- | --- | | [`!cancelraffle`](/chatbot/commands/default/cancelraffle) | Immediately cancel an active raffle. | | [`!giveaway`](/chatbot/commands/default/giveaway) | Check the status and link of the active channel giveaway. | -| [`!join`](/chatbot/commands/default/join) | Enter an active raffle or giveaway started with `!sraffle` or `!raffle`. | -| [`!raffle`](/chatbot/commands/default/raffle) | Create viewer raffles with multiple winners. | -| [`!sraffle`](/chatbot/commands/default/sraffle) | Start a single-entry raffle; viewers enter with `!join`. | +| [`!join`](/chatbot/commands/default/join) | Enter an active raffle started with `!sraffle` or `!raffle`. | +| [`!raffle`](/chatbot/commands/default/raffle) | Start a multi-winner raffle that splits the pot; viewers enter with `!join`. | +| [`!sraffle`](/chatbot/commands/default/sraffle) | Start a single-winner raffle; viewers enter with `!join`. | | [`!ticket`](/chatbot/commands/default/ticket) | Purchase tickets for giveaways and raffles. | ## Song Requests diff --git a/src/content/docs/chatbot/commands/default/level.mdx b/src/content/docs/chatbot/commands/default/level.mdx index 004a566..5803619 100644 --- a/src/content/docs/chatbot/commands/default/level.mdx +++ b/src/content/docs/chatbot/commands/default/level.mdx @@ -78,7 +78,8 @@ StreamElements uses the following numeric values for permission levels: * `400`: VIP (Twitch only) * `500`: Moderator * `1000`: Super Moderator (Manually assigned via Dashboard or `!level`) -* `2000`: Broadcaster + +These six values are the only ones the bot accepts — commands like `!level` and `!command options -level` reject anything else. :::note Manually setting a level (e.g., setting a non-sub to `250`) grants them the permissions of that level within StreamElements (e.g., access to sub-only commands) but does *not* grant them platform-specific benefits like sub badges or emotes. diff --git a/src/content/docs/chatbot/commands/default/module.mdx b/src/content/docs/chatbot/commands/default/module.mdx index 9eb45cd..95e3178 100644 --- a/src/content/docs/chatbot/commands/default/module.mdx +++ b/src/content/docs/chatbot/commands/default/module.mdx @@ -1,7 +1,7 @@ --- title: "!module" description: "Use the !module command in StreamElements chatbot to enable or disable specific chatbot modules (like games, points, etc.) directly from chat." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - module command - enable module diff --git a/src/content/docs/chatbot/commands/default/nuke.mdx b/src/content/docs/chatbot/commands/default/nuke.mdx index 50c3c6e..e88aadc 100644 --- a/src/content/docs/chatbot/commands/default/nuke.mdx +++ b/src/content/docs/chatbot/commands/default/nuke.mdx @@ -9,7 +9,7 @@ keywords: - delete messages - regex moderation - StreamElements chatbot -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/nukeusername.mdx b/src/content/docs/chatbot/commands/default/nukeusername.mdx index dfd2ea9..3fe6e05 100644 --- a/src/content/docs/chatbot/commands/default/nukeusername.mdx +++ b/src/content/docs/chatbot/commands/default/nukeusername.mdx @@ -9,7 +9,7 @@ keywords: - regex moderation - username nuke - StreamElements chatbot -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/permit.mdx b/src/content/docs/chatbot/commands/default/permit.mdx index b4c91a8..a1d1345 100644 --- a/src/content/docs/chatbot/commands/default/permit.mdx +++ b/src/content/docs/chatbot/commands/default/permit.mdx @@ -8,7 +8,7 @@ keywords: - prevent timeout - chat moderation - streamelements chatbot -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/queue.mdx b/src/content/docs/chatbot/commands/default/queue.mdx index a611a03..cdf4f79 100644 --- a/src/content/docs/chatbot/commands/default/queue.mdx +++ b/src/content/docs/chatbot/commands/default/queue.mdx @@ -150,6 +150,6 @@ Removes a specific user from the queue. * Restrictions on the queue, such as the maximum queue size and which viewers are eligible to join (for example followers or subscribers only), are configured in the module settings on the Dashboard. * Permission levels for subcommands can be adjusted under `Chatbot` -> `Chat Commands` -> `Default Commands`. -## Related +## Related Commands * [Viewer Queue Module](/chatbot/modules/viewerqueue): Enable the queue and configure its settings (size limits, messages, and behavior) in the StreamElements Dashboard. diff --git a/src/content/docs/chatbot/commands/default/quote.mdx b/src/content/docs/chatbot/commands/default/quote.mdx index 8acde40..8996bd7 100644 --- a/src/content/docs/chatbot/commands/default/quote.mdx +++ b/src/content/docs/chatbot/commands/default/quote.mdx @@ -9,7 +9,7 @@ keywords: - random quote - chat engagement - StreamElements chatbot -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/raffle.mdx b/src/content/docs/chatbot/commands/default/raffle.mdx index 7713d7e..b889a79 100644 --- a/src/content/docs/chatbot/commands/default/raffle.mdx +++ b/src/content/docs/chatbot/commands/default/raffle.mdx @@ -17,10 +17,14 @@ The `!raffle` command allows streamers and moderators to create interactive raff ## Usage ```streamelements -!raffle +!raffle [amount] [duration] ``` -* ``: Required. The total reward (pot) for the raffle, distributed among winners. -* ``: Required. The duration of the raffle in seconds. +* `[amount]`: Optional. The total reward (pot) for the raffle, distributed among winners. Defaults to 5000 points when omitted. +* `[duration]`: Optional. The duration of the raffle in whole seconds. Defaults to the Duration configured in the module settings. Because the arguments are positional, you can only set a duration if you also give an amount. + +:::caution[Permissions] +By default, only users with **Moderator** permission level or higher can use this command. +::: ## Examples @@ -39,12 +43,12 @@ The `!raffle` command allows streamers and moderators to create interactive raff ## Parameters -- `` (required): The total reward (pot) for the raffle, which will be distributed among the winners. -- `` (required): The duration of the raffle in seconds. +- `[amount]` (optional): The total reward (pot) for the raffle, which will be distributed among the winners. Accepts plain numbers and the `k` (thousands) / `m` (millions) suffixes — `5k` starts a 5000-point raffle. Percentages and `all` don't work here. Defaults to 5000 when omitted, and is capped by the module's Max Amount setting (and an absolute 1,000,000-point cap). +- `[duration]` (optional): The duration of the raffle in whole seconds (minimum 5). Defaults to the module's Duration setting when omitted. ## Configuration -Moderators can configure raffle settings, such as the maximum number of winners or cooldown period between raffles, through the StreamElements dashboard. +The default duration and the maximum pot are configured in the raffle module settings in the StreamElements dashboard. The number of winners is not configurable — it scales automatically with the number of entrants (see the [Raffle module](/chatbot/modules/raffle) for the exact brackets). ## Aliases diff --git a/src/content/docs/chatbot/commands/default/setgame.mdx b/src/content/docs/chatbot/commands/default/setgame.mdx index 2dbb450..f37d314 100644 --- a/src/content/docs/chatbot/commands/default/setgame.mdx +++ b/src/content/docs/chatbot/commands/default/setgame.mdx @@ -1,18 +1,18 @@ --- title: "!setgame" -description: "Use the !setgame command in StreamElements chatbot to update your stream's game category on Twitch." +description: "Use the !setgame command in StreamElements chatbot to update your stream's game category on Twitch or Kick from chat." keywords: - setgame - Twitch game category - StreamElements bot - update stream game - change game on Twitch -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] --- import ChatExample from '@components/ChatExample.astro'; -The `!setgame` command allows streamers and moderators to update the current game category of a Twitch stream in real-time. This feature ensures that viewers always have accurate information about the content being streamed. +The `!setgame` command allows streamers and moderators to update the stream's current game category directly from chat. It works on Twitch and Kick; YouTube is not supported. :::caution[Permissions] By default, only users with **Moderator** permission level or higher can use this command. diff --git a/src/content/docs/chatbot/commands/default/settitle.mdx b/src/content/docs/chatbot/commands/default/settitle.mdx index be560e4..8150a9c 100644 --- a/src/content/docs/chatbot/commands/default/settitle.mdx +++ b/src/content/docs/chatbot/commands/default/settitle.mdx @@ -1,6 +1,6 @@ --- title: "!settitle" -description: "Use the !settitle command in StreamElements chatbot to change the Twitch stream title from chat." +description: "Use the !settitle command in StreamElements chatbot to change your Twitch or Kick stream title from chat." keywords: - settitle - set title @@ -9,12 +9,12 @@ keywords: - chatbot commands - StreamElements - Twitch -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] --- import ChatExample from '@components/ChatExample.astro'; -The `!settitle` command allows streamers and moderators to change the title of the current Twitch stream directly from chat. This command helps keep viewers informed about the stream's content without leaving the streaming software. +The `!settitle` command allows streamers and moderators to change the stream title directly from chat, without switching to the dashboard or streaming software. It works on Twitch and Kick; YouTube is not supported. :::caution[Permissions] By default, only users with **Moderator** permission level or higher can use this command. diff --git a/src/content/docs/chatbot/commands/default/slots.mdx b/src/content/docs/chatbot/commands/default/slots.mdx index af85aac..06250c6 100644 --- a/src/content/docs/chatbot/commands/default/slots.mdx +++ b/src/content/docs/chatbot/commands/default/slots.mdx @@ -15,7 +15,7 @@ platforms: [twitch] import ChatExample from '@components/ChatExample.astro'; -The `!slots` command allows viewers to play a simple slot machine game in your chat. Users bet a certain amount of loyalty points and have a chance to win a multiple of their bet back based on matching emotes. +The `!slots` command allows viewers to play a simple slot machine game in your chat. Users bet loyalty points on a spin of three emotes: only three matching emotes win (two of a kind pays nothing), and a losing spin costs the full bet. The payout scales with the number of configured emotes and the module's Return Amount setting — see the [Slotmachine module](/chatbot/modules/slotmachine) for the exact formula. ## Usage @@ -29,12 +29,12 @@ To play the slot machine: ## Parameters @@ -46,12 +46,12 @@ To play the slot machine: Streamers can customize the `!slots` game through the **Slots module** settings on the StreamElements dashboard (`Chatbot` -> `Modules`): * **Module Toggle:** Enable or disable the entire `!slots` game. -* **System Rigging:** Adjust the payout percentage. A value lower than 100% means viewers are statistically likely to lose points over time, while a value higher than 100% means they are likely to gain points. The default is often set to ensure a house edge. *(Example: `200%`)* -* **Minimum Points:** Set the minimum number of loyalty points a viewer must have to play the slot machine. *(Example: `100` points)* -* **Emotes:** Choose which emotes will act as the symbols on the slot machine reels. *(Example: Kappa, PogChamp, BibleThump, OpieOP, 4Head)* +* **Return Amount:** The "How rigged should the system be?" slider. At 100% the game pays out fair odds; lower than 100% means viewers lose points over time. +* **Minimum Amount:** The minimum (and default) number of loyalty points that can be wagered. +* **Emotes:** Choose which emotes act as the symbols on the slot machine reels. *(Defaults: Kappa, PogChamp, BibleThump, OpieOP, 4Head)* * **Cooldowns:** - * **User Cooldown:** The minimum time (in seconds) a specific user must wait before playing again. *(Example: `60` seconds)* - * **Global Cooldown:** The minimum time (in seconds) before *anyone* can use the `!slots` command again after it's been used. *(Example: `0` seconds)* + * **User Cooldown:** The minimum time (in seconds) a specific user must wait before playing again. *(Default: `10` seconds)* + * **Global Cooldown:** The minimum time (in seconds) before *anyone* can use the `!slots` command again after it's been used. * **Win Message:** Customize the message displayed when a viewer wins. Available arguments: `{user}`, `{points}`, `{emotes}`, `{pointsname}`. *(Example: `@​{user} you got {emotes} and won {points} ${pointsname} PogChamp //`)* * **Lose Message:** Customize the message displayed when a viewer loses. Available arguments: `{user}`, `{points}`, `{emotes}`, `{pointsname}`. *(Example: `@​{user} you got {emotes} and lost your {points} ${pointsname} LUL`)* diff --git a/src/content/docs/chatbot/commands/default/ticket.mdx b/src/content/docs/chatbot/commands/default/ticket.mdx index 369fe3f..bd27408 100644 --- a/src/content/docs/chatbot/commands/default/ticket.mdx +++ b/src/content/docs/chatbot/commands/default/ticket.mdx @@ -56,7 +56,7 @@ To purchase tickets, type `!ticket` in the chat, optionally followed by the numb ## Configuration -Streamers configure giveaway settings, including ticket cost and the maximum number of tickets a viewer can purchase per giveaway, through the StreamElements dashboard under **Loyalty -> Contests & Giveaways**. +Streamers configure giveaway settings, including ticket cost and the maximum number of tickets a viewer can purchase per giveaway, through the StreamElements dashboard under **Loyalty -> Giveaways**. ## Aliases @@ -64,7 +64,7 @@ Streamers configure giveaway settings, including ticket cost and the maximum num ## Related Commands -- [`!giveaway`](/chatbot/commands/default/giveaway): Used by moderators to start or manage giveaways. +- [`!giveaway`](/chatbot/commands/default/giveaway): Checks the status of the currently active giveaway. - [`!points`](/chatbot/commands/default/points): Allows users to check their current loyalty points balance. ## FAQ diff --git a/src/content/docs/chatbot/commands/default/timer.mdx b/src/content/docs/chatbot/commands/default/timer.mdx index 459f46d..1c4b549 100644 --- a/src/content/docs/chatbot/commands/default/timer.mdx +++ b/src/content/docs/chatbot/commands/default/timer.mdx @@ -7,7 +7,7 @@ keywords: - disable timer - manage timers - StreamElements chatbot -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/tip.mdx b/src/content/docs/chatbot/commands/default/tip.mdx index 7322df5..a80d371 100644 --- a/src/content/docs/chatbot/commands/default/tip.mdx +++ b/src/content/docs/chatbot/commands/default/tip.mdx @@ -8,7 +8,7 @@ keywords: - streamer support - chatbot - streamelements -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/uptime.mdx b/src/content/docs/chatbot/commands/default/uptime.mdx index 72bd98a..f7fe186 100644 --- a/src/content/docs/chatbot/commands/default/uptime.mdx +++ b/src/content/docs/chatbot/commands/default/uptime.mdx @@ -7,7 +7,7 @@ keywords: - chatbot uptime - stream duration - live streaming time -platforms: [twitch, trovo, youtube] +platforms: [twitch, youtube] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/vanish.mdx b/src/content/docs/chatbot/commands/default/vanish.mdx index 7d91c2a..8bf0bba 100644 --- a/src/content/docs/chatbot/commands/default/vanish.mdx +++ b/src/content/docs/chatbot/commands/default/vanish.mdx @@ -7,7 +7,7 @@ keywords: - clear chat history - StreamElements - chatbot -platforms: [twitch, trovo, youtube] +platforms: [twitch, youtube] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/commands/default/votekick.mdx b/src/content/docs/chatbot/commands/default/votekick.mdx index c67a7eb..f99bbc4 100644 --- a/src/content/docs/chatbot/commands/default/votekick.mdx +++ b/src/content/docs/chatbot/commands/default/votekick.mdx @@ -64,7 +64,7 @@ To start a vote to kick a user: * Set the **Timeout Duration** (how long the user is kicked if the vote passes). * Establish **Cooldowns** (global and per-user for starting votes). -## Related +## Related Commands * [`!nuke`](/chatbot/commands/default/nuke): (Moderator+) Bulk timeout, ban, or delete recent messages matching specific text or regex. * [Votekick Module](/chatbot/modules/votekick): Configure the votekick settings (vote duration, thresholds, timeout duration, and cooldowns). diff --git a/src/content/docs/chatbot/filters/language.md b/src/content/docs/chatbot/filters/language.md index 12546e2..e1f49d3 100644 --- a/src/content/docs/chatbot/filters/language.md +++ b/src/content/docs/chatbot/filters/language.md @@ -11,11 +11,17 @@ keywords: - allowed languages --- -The Language filter moderates messages based on the language they are written in. Messages detected as a language you haven't allowed are flagged by the filter. The allowed languages are configured on the filter in your StreamElements dashboard. +The Language filter moderates messages based on the language they are written in. A message is flagged when its detected language is not on your allowed list, or when the detection isn't confident enough to tell. When no allowed languages are configured, the filter is off. ## Settings -The filter supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. +| Setting | Description | +|---------|-------------| +| Allowed languages | The list of languages permitted in chat (ISO 639-1 codes, e.g. `en`, `de`). An empty list disables the filter. | +| Minimum percentage | The minimum detection confidence. Messages whose language can't be identified with at least this confidence are flagged. | +| Excluded characters | Phrases stripped from a message before language detection runs (useful for emote names and channel-specific slang that confuse detection). | + +The filter also supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. ## What happens on a violation diff --git a/src/content/docs/chatbot/filters/one-man-spam.md b/src/content/docs/chatbot/filters/one-man-spam.md index c872c04..f149dc5 100644 --- a/src/content/docs/chatbot/filters/one-man-spam.md +++ b/src/content/docs/chatbot/filters/one-man-spam.md @@ -11,11 +11,18 @@ keywords: - spam protection --- -The One-Man Spam filter targets spam coming from a single user. Instead of judging each message in isolation, it catches users who repeatedly send the same or similar messages in a short period of time. The detection thresholds are configured on the filter in your StreamElements dashboard. +The One-Man Spam filter targets spam coming from a single user. Instead of judging each message in isolation, it compares a user's recent messages against each other and triggers when too many of them are the same or nearly the same. ## Settings -The filter supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. +| Setting | Description | +|---------|-------------| +| Minimum characters | The number of characters a message must have to count towards the filter. Shorter messages are ignored. (Default: 4) | +| Minimum messages | The number of messages the user must have sent within the lookback window before the filter can trigger. (Default: 5) | +| Lookback | How many seconds of the user's message history are inspected. (Default: 30) | +| Threshold | The message similarity score (0–100, decimals allowed) that causes the user to be timed out. Messages at or above this similarity count as spam. (Default: 75) | + +The filter also supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. ## What happens on a violation diff --git a/src/content/docs/chatbot/filters/repetition.md b/src/content/docs/chatbot/filters/repetition.md index 39a75f1..b249816 100644 --- a/src/content/docs/chatbot/filters/repetition.md +++ b/src/content/docs/chatbot/filters/repetition.md @@ -11,11 +11,16 @@ keywords: - repeated characters --- -The Repetition filter limits excessive repetition within a single chat message, such as long runs of repeated characters or repeated sequences (for example "aaaaaaaaaa" or "hahahahahaha"). The repetition thresholds are configured on the filter in your StreamElements dashboard. +The Repetition filter limits how often the same word may be repeated within a single chat message (for example "spam spam spam spam spam"). A message is flagged when any word occurs more times than the configured maximum. ## Settings -The filter supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. +| Setting | Description | +|---------|-------------| +| Maximum word repetitions | The maximum number of times a word can occur in a single message. (Default: 15) | +| Minimum characters | Words shorter than this are ignored when counting repetitions. (Default: 3) | + +The filter also supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. ## What happens on a violation diff --git a/src/content/docs/chatbot/filters/zalgo.md b/src/content/docs/chatbot/filters/zalgo.md index c741895..541525e 100644 --- a/src/content/docs/chatbot/filters/zalgo.md +++ b/src/content/docs/chatbot/filters/zalgo.md @@ -11,11 +11,15 @@ keywords: - combining characters --- -The Zalgo filter removes "zalgo" text — messages distorted with stacked combining characters that bleed over surrounding lines and make chat hard to read. Messages containing this kind of combining-character abuse are flagged by the filter. +The Zalgo filter removes "zalgo" text — messages distorted with stacked combining characters that bleed over surrounding lines and make chat hard to read. A message is flagged when it contains more combining characters than the configured maximum. ## Settings -The filter supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. +| Setting | Description | +|---------|-------------| +| Maximum amount | The maximum number of zalgo (combining) characters allowed in a single message. (Default: 1) | + +The filter also supports the [settings shared by all filters](/chatbot/filters#settings-shared-by-all-filters), including the timeout length, custom timeout message, and excluded user level. ## What happens on a violation diff --git a/src/content/docs/chatbot/getting-started.mdx b/src/content/docs/chatbot/getting-started.mdx index da8ca35..1b280c2 100644 --- a/src/content/docs/chatbot/getting-started.mdx +++ b/src/content/docs/chatbot/getting-started.mdx @@ -17,12 +17,13 @@ keywords: --- import { Steps } from '@astrojs/starlight/components'; +import ChatExample from '@components/ChatExample.astro'; This guide walks you through the two most common ways to put the StreamElements Chatbot to work: creating your first custom command and setting up your first timer. ## Your first command -Commands are the main way users will interact with the bot in your chat. They can be used to trigger actions, or to display information to your users. In this example we will create a command that will display the amount of time that has past since a user was last seen in chat. +Commands are the main way users will interact with the bot in your chat. They can be used to trigger actions, or to display information to your users. In this example we will create a command that shows how long it has been since a user was last seen in chat. @@ -41,7 +42,13 @@ Commands are the main way users will interact with the bot in your chat. They ca - NOTE: If the platform does not support native replies, the response will be sent as a "Mention" instead. - "Whisper" will send the response as a whisper to the user who triggered the command. -5. Add your desired response. For a list of all available variables, see the [variables documentation](/chatbot/variables). +5. Add the response. For our example, enter: + + ```streamelements + $(user) was last seen $(user.lastseen) ago + ``` + + [`$(user)`](/chatbot/variables/user) and its sub-variables target the name typed after the command — or the person who used the command, when no name is given. For a list of all available variables, see the [variables documentation](/chatbot/variables). ![Step 2](img/step_2.png "Step 2") @@ -53,6 +60,13 @@ Commands are the main way users will interact with the bot in your chat. They ca +That's it — the command is live in your chat: + + + ## Your first timer Timers allow you to automatically post announcements, social links, schedules, or any other messages at regular intervals in your chat. diff --git a/src/content/docs/chatbot/modules/chatalerts.md b/src/content/docs/chatbot/modules/chatalerts.md index 41c3c1f..1d14f43 100644 --- a/src/content/docs/chatbot/modules/chatalerts.md +++ b/src/content/docs/chatbot/modules/chatalerts.md @@ -48,7 +48,6 @@ The available event types depend on the platform: | Platform | Supported events | |----------|------------------| | Twitch | Follows, tips, subscriptions, cheers (bits), raids, channel point redemptions, merch purchases, ad breaks, polls, predictions, hype trains, sponsorships | -| Trovo | Follows, tips, raids, subscriptions, merch purchases | | YouTube | Tips, sponsors, subscribers, redemptions, merch purchases | | Kick | Follows, subscriptions, tips | @@ -59,7 +58,6 @@ Each event type can have its own customized messages and trigger conditions. For events with an amount — tips, subscriptions, cheers, and raids, depending on the platform — you can configure multiple messages, each with its own minimum amount. When the event fires, the bot uses the message with the highest minimum amount that the event reaches: - **Twitch**: tips, subscriptions, cheers, raids -- **Trovo**: tips, raids, subscriptions - **YouTube**: tips, sponsors - **Kick**: tips, subscriptions diff --git a/src/content/docs/chatbot/modules/eightball.mdx b/src/content/docs/chatbot/modules/eightball.mdx index 4dcc5d0..53f86d6 100644 --- a/src/content/docs/chatbot/modules/eightball.mdx +++ b/src/content/docs/chatbot/modules/eightball.mdx @@ -3,7 +3,7 @@ title: 8ball Module sidebar: label: 8ball description: "The StreamElements 8ball module answers viewer questions with random, customizable Magic 8 Ball responses via the !8ball command." -platforms: [twitch, youtube, trovo, kick] +platforms: [twitch, youtube, kick] keywords: - Magic 8 Ball Twitch - StreamElements 8ball diff --git a/src/content/docs/chatbot/modules/emotecombo.mdx b/src/content/docs/chatbot/modules/emotecombo.mdx index 9c805b3..879aa98 100644 --- a/src/content/docs/chatbot/modules/emotecombo.mdx +++ b/src/content/docs/chatbot/modules/emotecombo.mdx @@ -3,7 +3,7 @@ title: Emote Combo Module sidebar: label: Emote Combo description: "Use the StreamElements Emote Combo module to track chains of consecutive identical emotes in stream chat and announce the combo count." -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] keywords: - emote combo - chatbot diff --git a/src/content/docs/chatbot/modules/emotepyramid.mdx b/src/content/docs/chatbot/modules/emotepyramid.mdx index 8cf209b..bdc7940 100644 --- a/src/content/docs/chatbot/modules/emotepyramid.mdx +++ b/src/content/docs/chatbot/modules/emotepyramid.mdx @@ -3,7 +3,7 @@ title: Emote Pyramid Module sidebar: label: Emote Pyramid description: "Rules and examples for the Emote Pyramid chat game, where viewers collaboratively build pyramids of emotes in StreamElements Chatbot." -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] keywords: - emote pyramid - chat game diff --git a/src/content/docs/chatbot/modules/roulette.md b/src/content/docs/chatbot/modules/roulette.md index 54a9d40..e1eb031 100644 --- a/src/content/docs/chatbot/modules/roulette.md +++ b/src/content/docs/chatbot/modules/roulette.md @@ -31,7 +31,7 @@ To start a game of roulette, users type the following command in chat: !roulette ``` -The module then randomly determines the outcome of the roulette spin. If the user wins, they receive a payout based on their wager. If they lose, they forfeit the points they wagered. +The module then randomly determines the outcome of the roulette spin. The payout is even money: a winner gains exactly the amount they wagered, and a loser forfeits it. The chance of winning is set by the streamer with the win-chance slider (see [Configuration](#configuration)). ## Examples @@ -68,7 +68,7 @@ Streamers can configure the Roulette module in the StreamElements dashboard with | Setting | Description | |---------|-------------| -| Rig Percentage | Adjust the win chance using a slider (0% = Never lose, 100% = Always lose). | +| Win Chance | The "How rigged should the system be?" slider sets the percentage chance that a bet wins: 0% means viewers always lose, 100% means they always win. | | Minimum Amount | The minimum number of points required to play (Default: 1). | | User Cooldown | The minimum time (in seconds) a specific user must wait before playing again (Default: 60). | | Global Cooldown | The minimum time (in seconds) everyone must wait after a roulette spin before anyone can play again (Default: 0). | @@ -90,7 +90,7 @@ See the [`!roulette` command reference](/chatbot/commands/default/roulette) for A: No, users can only wager points they currently have. **Q: Is there a limit to how often someone can use the Roulette command?** -A: Yes, there's typically a cooldown period between uses, which can be configured by the streamer. +A: Yes — the User Cooldown setting (60 seconds by default) limits how often each viewer can play, and an optional Global Cooldown limits how often anyone can. **Q: Can moderators disable the Roulette game?** A: Yes, moderators with appropriate permissions can enable or disable the Roulette module through the StreamElements dashboard. diff --git a/src/content/docs/chatbot/modules/slotmachine.md b/src/content/docs/chatbot/modules/slotmachine.md index 81b4685..269e8bf 100644 --- a/src/content/docs/chatbot/modules/slotmachine.md +++ b/src/content/docs/chatbot/modules/slotmachine.md @@ -20,7 +20,9 @@ The Slotmachine module is an interactive chat game that allows viewers to wager ## Usage -To start a game, viewers use the `!slots` command followed by the number of points they wish to wager. The slot machine then spins and displays a combination of emotes. If three matching emotes appear, the player wins and receives a payout based on their wager. +To start a game, viewers use the `!slots` command followed by the number of points they wish to wager. The slot machine then spins and displays a combination of three emotes. + +Only three matching emotes win — two of a kind pays nothing. A winning spin credits the player with `wager × (number of emotes)² × (Return Amount ÷ 100)` points; a losing spin deducts the full wager. With the default five emotes and a 100% Return Amount, the odds of a win are 1 in 25 and a winning spin pays 25× the wager. ## Examples @@ -50,8 +52,14 @@ Streamers can customize the following settings for the Slotmachine module: | Setting | Description | |---------|-------------| -| Emotes | The emotes used in the slot machine. | -| Minimum wager | The minimum amount of points that can be wagered. | +| Emotes | The reel symbols. Defaults to `Kappa`, `PogChamp`, `BibleThump`, `OpieOP`, and `4Head`. Fewer emotes mean more frequent (but smaller) wins, since the payout scales with the square of the emote count. | +| Minimum amount | The minimum (and default) number of points that can be wagered. | +| Return amount | Payout percentage — the "How rigged should the system be?" slider. At 100% the game pays out fair odds; lower than 100% means players lose points over time. | +| User cooldown | The minimum time (in seconds) a specific viewer must wait between spins (default: 10). | +| Global cooldown | The minimum time (in seconds) everyone must wait after any spin. | +| Win / Lose message | The bot's response messages. Available placeholders: `{emotes}`, `{points}`, `{user}`. | + +The command also responds to the aliases `!slotmachine`, `!slot`, `!sm`, and `!smp`. ## Related Commands diff --git a/src/content/docs/chatbot/variables/channel.mdx b/src/content/docs/chatbot/variables/channel.mdx index 60cccc5..a6f8972 100644 --- a/src/content/docs/chatbot/variables/channel.mdx +++ b/src/content/docs/chatbot/variables/channel.mdx @@ -37,7 +37,7 @@ To use a channel variable, include it in your chatbot command using the `$()` sy | `$(channel)` | Name of the channel (login name) | Any unrecognized field, e.g. `$(channel.name)`, also returns the channel name | | `$(channel.display_name)` | Channel's display name | May differ in capitalization from `$(channel)` | | `$(channel.alias)` | Channel's alias | | -| `$(channel.provider)` | Channel's streaming platform as a lowercase slug: `twitch`, `youtube`, `trovo`, or `kick` | | +| `$(channel.provider)` | Channel's streaming platform as a lowercase slug: `twitch`, `youtube`, or `kick` | | | `$(channel.provider_id)` | Channel's platform ID (e.g. Twitch or YouTube channel ID) | Aliases: `$(channel.twitchid)`, `$(channel.youtubeid)` | | `$(channel.id)` | Channel's internal StreamElements ID | | | `$(channel.title)` | Current stream title | Alias: `$(channel.status)`. Returns `` if the lookup fails | @@ -59,7 +59,7 @@ $(channel.title somestreamer) $(channel somestreamer) ``` -- This cross-channel form works on Twitch (and partially on Trovo). It is not implemented on YouTube, where it falls back to your own channel's data. +- This cross-channel form works on Twitch. It is not implemented on YouTube, where it falls back to your own channel's data. - `$(channel.subs)` and `$(channel.subpoints)` always return `0` for other channels. - If the channel doesn't exist, `title` and `game` return ``; other lookup failures return an `` code. diff --git a/src/content/docs/chatbot/variables/cheat-sheet.mdx b/src/content/docs/chatbot/variables/cheat-sheet.mdx index e8f7bab..a09a140 100644 --- a/src/content/docs/chatbot/variables/cheat-sheet.mdx +++ b/src/content/docs/chatbot/variables/cheat-sheet.mdx @@ -22,7 +22,7 @@ Every chatbot variable on one page — syntax and what it returns, at a glance. | [`$(game)`](/chatbot/variables/game) | `$(game [channel])` | The current category, e.g. `Just Chatting`; `` when unset. | | [`$(title)`](/chatbot/variables/title) | `$(title [channel])` | The current stream title. Alias: `$(status)`. | | [`$(uptime)`](/chatbot/variables/uptime) | `$(uptime [channel])` | Time live, e.g. `2 hours 30 mins`; `` when offline. | -| [`$(provider)`](/chatbot/variables/provider) | `$(provider)` | The platform slug: `twitch`, `youtube`, `trovo`, or `kick`. | +| [`$(provider)`](/chatbot/variables/provider) | `$(provider)` | The platform slug: `twitch`, `youtube`, or `kick`. | ## Stream management @@ -120,7 +120,7 @@ Use as `$(user. [username])` or `$(sender.)` — the fields are id ## Channel sub-variables -Use as `$(channel.)`. On Twitch and Trovo you can also target another channel: `$(channel. )`. +Use as `$(channel.)`. On Twitch you can also target another channel: `$(channel. )`. | Field | Returns | | --- | --- | diff --git a/src/content/docs/chatbot/variables/count.mdx b/src/content/docs/chatbot/variables/count.mdx index 93a66ef..16b2982 100644 --- a/src/content/docs/chatbot/variables/count.mdx +++ b/src/content/docs/chatbot/variables/count.mdx @@ -70,7 +70,7 @@ Each use changes the counter and outputs the **new** value as a plain number. Wi - `n`: Set the counter to a specific value n (e.g., `0`, `100`) — `$(count deaths 0)` resets the counter :::note -Modifiers only work in the space-separated form. The dot form `$(count.deaths)` works for naming a counter, but `$(count.deaths +5)` does not — the `+5` would be misread as the counter name. Use `$(count deaths +5)` instead. +Modifiers only work in the space-separated form. The dot form `$(count.deaths)` works for naming a counter, but in `$(count.deaths +5)` the parser treats `+5` itself as the counter name — so it increments a counter literally named "+5" by 1 and ignores `deaths` entirely. Use `$(count deaths +5)` instead. ::: ## Configuration diff --git a/src/content/docs/chatbot/variables/game.mdx b/src/content/docs/chatbot/variables/game.mdx index b4b4430..933dc24 100644 --- a/src/content/docs/chatbot/variables/game.mdx +++ b/src/content/docs/chatbot/variables/game.mdx @@ -7,7 +7,7 @@ keywords: - game variable - Twitch game - stream information -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] syntax: "$(game [username])" arguments: optional --- @@ -59,7 +59,7 @@ Output: `shroud is playing: Counter-Strike: Global Offensive` ## Parameters -- `username` (optional): The Twitch username of the channel you want to check. If not provided, the variable will display the game of the current channel. Cross-channel lookups work on Twitch (and partially on Trovo). +- `username` (optional): The Twitch username of the channel you want to check. If not provided, the variable will display the game of the current channel. Cross-channel lookups work on Twitch. ## Related Variables diff --git a/src/content/docs/chatbot/variables/index.md b/src/content/docs/chatbot/variables/index.md index e421819..9f9d8c1 100644 --- a/src/content/docs/chatbot/variables/index.md +++ b/src/content/docs/chatbot/variables/index.md @@ -38,7 +38,7 @@ Variables work on all platforms unless a page notes otherwise — on YouTube, `$ | [`$(game)`](/chatbot/variables/game) | Display the current game on a Twitch channel. | | [`$(title)`](/chatbot/variables/title) | Display a channel's title. Also available as `$(status)`. | | [`$(uptime)`](/chatbot/variables/uptime) | Display stream uptime for any channel. | -| [`$(provider)`](/chatbot/variables/provider) | Display the platform the channel runs on: `twitch`, `youtube`, `trovo`, or `kick`. | +| [`$(provider)`](/chatbot/variables/provider) | Display the platform the channel runs on: `twitch`, `youtube`, or `kick`. | ## Stream Management diff --git a/src/content/docs/chatbot/variables/leagueoflegends.mdx b/src/content/docs/chatbot/variables/leagueoflegends.mdx index 806e402..a9c0a86 100644 --- a/src/content/docs/chatbot/variables/leagueoflegends.mdx +++ b/src/content/docs/chatbot/variables/leagueoflegends.mdx @@ -33,6 +33,8 @@ To use this variable, you need to provide two parameters: the player's Riot ID o $(leagueoflegends ) ``` +The name comes first here — the opposite of [`$(teamfighttactics)`](/chatbot/variables/teamfighttactics), where the region comes first. + The output format is ` ( LP)`, for example `Gold IV (81 LP)` or `Challenger I (1229 LP)`. :::note[Riot IDs] diff --git a/src/content/docs/chatbot/variables/msgid.mdx b/src/content/docs/chatbot/variables/msgid.mdx index 57ffeb4..8fca47e 100644 --- a/src/content/docs/chatbot/variables/msgid.mdx +++ b/src/content/docs/chatbot/variables/msgid.mdx @@ -39,4 +39,4 @@ To use the `$(msgid)` variable, simply include it in your command response or cu **Q: What format does the message ID use?** -A: The variable returns the platform's native message ID. On Twitch this is a UUID (a string of letters and numbers separated by hyphens, such as `bcc9b4bc-566d-4f14-a57d-a86c1c3196f8`); other platforms like YouTube, Trovo, and Kick use their own ID formats. +A: The variable returns the platform's native message ID. On Twitch this is a UUID (a string of letters and numbers separated by hyphens, such as `bcc9b4bc-566d-4f14-a57d-a86c1c3196f8`); other platforms like YouTube and Kick use their own ID formats. diff --git a/src/content/docs/chatbot/variables/provider.mdx b/src/content/docs/chatbot/variables/provider.mdx index 1587db2..fe64adf 100644 --- a/src/content/docs/chatbot/variables/provider.mdx +++ b/src/content/docs/chatbot/variables/provider.mdx @@ -1,6 +1,6 @@ --- title: "$(provider)" -description: "Display which streaming platform a channel runs on — twitch, youtube, trovo, or kick — with the $(provider) variable in StreamElements Chatbot." +description: "Display which streaming platform a channel runs on — twitch, youtube, or kick — with the $(provider) variable in StreamElements Chatbot." syntax: "$(provider)" arguments: none keywords: @@ -8,7 +8,6 @@ keywords: - platform - twitch - youtube - - trovo - kick - StreamElements - chatbot variable @@ -16,7 +15,7 @@ keywords: import ChatExample from '@components/ChatExample.astro'; -The `$(provider)` variable returns the platform the channel runs on, as a lowercase slug: `twitch`, `youtube`, `trovo`, or `kick`. It is identical to [`$(channel.provider)`](/chatbot/variables/channel) and works on every platform. +The `$(provider)` variable returns the platform the channel runs on, as a lowercase slug: `twitch`, `youtube`, or `kick`. It is identical to [`$(channel.provider)`](/chatbot/variables/channel) and works on every platform. ## Use it @@ -41,7 +40,6 @@ The variable takes no arguments and always refers to the channel the bot is runn | --- | --- | | Twitch | `twitch` | | YouTube | `youtube` | -| Trovo | `trovo` | | Kick | `kick` | Because the output is a stable lowercase slug, it is most useful **nested inside other variables** — for example to build platform-aware responses with [`$(customapi)`](/chatbot/variables/customapi): @@ -66,7 +64,7 @@ This requests a different URL per platform (`.../messages/twitch` on Twitch, `.. **Q: Does $(provider) work on every platform?** -A: Yes — it is available on Twitch, YouTube, Trovo, and Kick. +A: Yes — it is available on Twitch, YouTube, and Kick. **Q: Is the output capitalized?** diff --git a/src/content/docs/chatbot/variables/redeem.mdx b/src/content/docs/chatbot/variables/redeem.mdx index feb387d..a8598b0 100644 --- a/src/content/docs/chatbot/variables/redeem.mdx +++ b/src/content/docs/chatbot/variables/redeem.mdx @@ -3,7 +3,7 @@ title: "$(redeem)" description: "Let viewers redeem StreamElements loyalty store items straight from a chat command with the $(redeem) variable." syntax: "$(redeem [item] [input])" arguments: optional -platforms: [twitch, trovo, kick] +platforms: [twitch] keywords: - redeem - loyalty store diff --git a/src/content/docs/chatbot/variables/title.mdx b/src/content/docs/chatbot/variables/title.mdx index 6b5aac0..83431cc 100644 --- a/src/content/docs/chatbot/variables/title.mdx +++ b/src/content/docs/chatbot/variables/title.mdx @@ -56,7 +56,7 @@ Example usage with a parameter: $(title OtherStreamer) ``` -This would return the title of the channel "OtherStreamer" instead of the current channel. Cross-channel lookups are supported on Twitch and Trovo. +This would return the title of the channel "OtherStreamer" instead of the current channel. Cross-channel lookups are supported on Twitch. ## Aliases diff --git a/src/content/docs/chatbot/variables/uptime.mdx b/src/content/docs/chatbot/variables/uptime.mdx index 2dc9516..c138722 100644 --- a/src/content/docs/chatbot/variables/uptime.mdx +++ b/src/content/docs/chatbot/variables/uptime.mdx @@ -52,7 +52,7 @@ shroud has been live for 3 hours 45 mins ## Parameters -- `username` (optional): The name of the streamer whose uptime you want to check. If omitted, the variable will default to the current stream's uptime. Cross-channel lookups are supported on Twitch and Trovo. +- `username` (optional): The name of the streamer whose uptime you want to check. If omitted, the variable will default to the current stream's uptime. Cross-channel lookups are supported on Twitch. ## Related Variables diff --git a/src/content/docs/chatbot/variables/user.mdx b/src/content/docs/chatbot/variables/user.mdx index 8474823..859ec50 100644 --- a/src/content/docs/chatbot/variables/user.mdx +++ b/src/content/docs/chatbot/variables/user.mdx @@ -9,7 +9,7 @@ keywords: - user variable - streamer tools - chat commands -platforms: [twitch, trovo, kick] +platforms: [twitch, kick] --- import ChatExample from '@components/ChatExample.astro'; diff --git a/src/content/docs/chatbot/variables/weather.mdx b/src/content/docs/chatbot/variables/weather.mdx index ffd6837..da62ca0 100644 --- a/src/content/docs/chatbot/variables/weather.mdx +++ b/src/content/docs/chatbot/variables/weather.mdx @@ -87,7 +87,7 @@ The `$(weather)` variable accepts one parameter: **Q: How often is the weather data updated?** -A: The weather data is typically updated every 10-15 minutes. +A: The bot requests fresh data from its weather provider every time the variable runs. How current that data is depends on the provider, not on the bot. **Q: Can I display the temperature in Fahrenheit instead of Celsius?** diff --git a/src/content/docs/overlays/custom-code-in-alertbox.md b/src/content/docs/overlays/custom-code-in-alertbox.md index f2deb94..5ca6609 100644 --- a/src/content/docs/overlays/custom-code-in-alertbox.md +++ b/src/content/docs/overlays/custom-code-in-alertbox.md @@ -82,7 +82,8 @@ Variables can be written with double braces (`{{variable}}`) or single braces (` #### JS ```js -const hideAfter=parseInt("{{widgetDuration}}")-1000; +// {{widgetDuration}} is in seconds; setTimeout expects milliseconds. +const hideAfter=parseInt("{{widgetDuration}}")*1000-1000; const playHideAnimation=()=>{ timeline.reverse(); //or any other thing that will make your alert fancy exit } diff --git a/src/content/docs/overlays/custom-widget.md b/src/content/docs/overlays/custom-widget.md index a5dcfdc..4b5b148 100644 --- a/src/content/docs/overlays/custom-widget.md +++ b/src/content/docs/overlays/custom-widget.md @@ -258,7 +258,7 @@ The best way to explain this is through an example. ```javascript let skippable=["bot:counter","event","event:test","event:skip","alertService:toggleSound","message","delete-message","delete-messages","kvstore:update"]; //Array of events coming to widget that are not queued so they can come even if queue is on hold let playAnimation=(event)=>{ - $("container").html(`
${event.sender}
${event.amount} subs!
`) + $("#container").html(`
${event.sender}
${event.amount} subs!
`) return Math.floor(Math.random()*8)+7; }; window.addEventListener('onEventReceived', function (obj) { diff --git a/src/content/docs/overlays/events.mdx b/src/content/docs/overlays/events.mdx index fdd84fb..77e6b77 100644 --- a/src/content/docs/overlays/events.mdx +++ b/src/content/docs/overlays/events.mdx @@ -27,7 +27,7 @@ window.addEventListener('onWidgetLoad', function (obj) { ## On Widget Load -Event received upon widget is loaded (or refreshed). Contains information about fieldData (fields values), channel information (including apiKey) and session data. +Event received upon widget is loaded (or refreshed). Contains information about fieldData (fields values), channel information (including the `apiToken`) and session data. ```javascript window.addEventListener('onWidgetLoad', function (obj) { @@ -285,8 +285,9 @@ Contains two elements - field name (`field`) and value (`value`). Example below ```javascript window.addEventListener('onEventReceived', function (obj) { + const listener = obj.detail.listener; const data = obj.detail.event; - if (data.listener === 'widget-button') { + if (listener === 'widget-button') { if (data.field === 'chat' && data.value === 'First Message') { const emulated = new CustomEvent("onEventReceived", { detail: { diff --git a/src/content/docs/websockets/examples.mdx b/src/content/docs/websockets/examples.mdx index d699b0d..534ed79 100644 --- a/src/content/docs/websockets/examples.mdx +++ b/src/content/docs/websockets/examples.mdx @@ -69,7 +69,7 @@ websocket.addEventListener('message', (event) => { console.log('Session update - Key:', message.data.key); console.log('Session update - Data:', message.data.data); } else if (message.topic === 'channel.session.reset') { - console.log('Session reset - Full session data:', message.data.session); + console.log('Session reset - Full session data:', message.data); } break; @@ -177,7 +177,7 @@ ws.on('message', (data) => { console.log('Session update - Key:', message.data.key); console.log('Session update - Data:', message.data.data); } else if (message.topic === 'channel.session.reset') { - console.log('Session reset - Full session data:', message.data.session); + console.log('Session reset - Full session data:', message.data); } break; @@ -280,7 +280,7 @@ async def connect_to_streamelements(): elif topic == "channel.session.update": print(f"Session update - Key: {message['data']['key']}") elif topic == "channel.session.reset": - print(f"Session reset: {message['data']['session']}") + print(f"Session reset: {message['data']}") elif msg_type == "reconnect": print("Server is shutting down, reconnecting...") diff --git a/src/content/docs/websockets/topics/channel-chat-message.mdx b/src/content/docs/websockets/topics/channel-chat-message.mdx index 92fd58d..00a0b8f 100644 --- a/src/content/docs/websockets/topics/channel-chat-message.mdx +++ b/src/content/docs/websockets/topics/channel-chat-message.mdx @@ -165,41 +165,6 @@ Payloads are delivered in the raw format of the originating provider, so the str } ``` - - - -```json -{ - "id": "01K0K96X4ZRY83DNP9YZJSXVW2", - "ts": "2025-07-20T06:44:12Z", - "type": "message", - "topic": "channel.chat.message", - "room": "61fa731243f9b92ffaaaaaaa", - "data": { - "id": "1752852369100763935_107354849_145407389_2887140591_5", - "channel_id": "107380000", - "type": 0, - "created_at": "2025-07-20T06:44:12.672224046Z", - "data": { - "avatar": "https://headicon.trovo.live/user/aaaaaaaaaaaaajt4adagzyktda.png?ext=png&t=0", - "roles": [ - "streamer" - ], - "emotes": [ - { - "id": "firedragon!", - "format": 3 - } - ], - "display_name": "exampleuser", - "username": "exampleuser", - "sender_id": "107380000", - "text": "Test message with emote :firedragon! " - } - } -} -``` - diff --git a/src/content/docs/websockets/topics/channel-contests.md b/src/content/docs/websockets/topics/channel-contests.md index 2312140..4c79edd 100644 --- a/src/content/docs/websockets/topics/channel-contests.md +++ b/src/content/docs/websockets/topics/channel-contests.md @@ -108,10 +108,15 @@ Sent when a winner is selected. stateDiagram-v2 created --> running running --> closed + running --> completed closed --> completed + created --> refunded + running --> refunded closed --> refunded ``` +A winner can be selected while the contest is still `running`, so `completed` can follow `running` directly without passing through `closed`. A refund can be issued from any state. + | State | Description | | ----- | ----------- | | `created` | Contest created but not started | @@ -119,6 +124,7 @@ stateDiagram-v2 | `closed` | Voting stopped, awaiting winner selection | | `completed` | Winner selected, rewards distributed | | `refunded` | Contest cancelled, bets returned | +| `ended` | Legacy state — still part of the schema but no longer produced by current systems | ## Data Types diff --git a/src/content/docs/websockets/topics/channel-overlay-update.md b/src/content/docs/websockets/topics/channel-overlay-update.md index f5f4d9f..323e3f4 100644 --- a/src/content/docs/websockets/topics/channel-overlay-update.md +++ b/src/content/docs/websockets/topics/channel-overlay-update.md @@ -17,9 +17,10 @@ This event is triggered when an overlay's configuration is modified, such as whe | Parameter | Type | Description | | --------- | ---- | ----------- | -| `data.settings` | `object` | Overlay canvas settings (dimensions, preset name) | +| `data.settings` | `object` | Overlay canvas settings (dimensions, resolution label) | | `data.settings.width` | `number` | Canvas width in pixels | | `data.settings.height` | `number` | Canvas height in pixels | +| `data.settings.name` | `string` | Resolution label for the canvas size (e.g., `"1080p"`) — not the overlay's name, which is the top-level `data.name` | | `data._id` | `string` | Unique overlay identifier | | `data.channel` | `string` | Channel ID the overlay belongs to | | `data.type` | `string` | Overlay type (`regular`, `campaign`, etc.) | diff --git a/src/content/docs/websockets/topics/channel-session-reset.md b/src/content/docs/websockets/topics/channel-session-reset.md index 6af588e..f58bee0 100644 --- a/src/content/docs/websockets/topics/channel-session-reset.md +++ b/src/content/docs/websockets/topics/channel-session-reset.md @@ -11,13 +11,15 @@ keywords: - real-time data --- -This event is triggered when your channel session is completely reset. It delivers the full reset session data, allowing you to update all session-related information in your applications or overlays at once. Subscribe to this topic to receive a complete snapshot of your channel session data whenever a reset occurs. This is useful for maintaining synchronization with the latest channel state or initializing your application with current session data. +This event is triggered when your channel session is reset. It delivers the complete new session data in one message, so you can reinitialize every session-related value in your application or overlay at once. ## Payload -| Parameter | Type | Description | -| -------------- | -------- | --------------------------------------------------------------------------------------------------------------------- | -| `data.session` | `object` | Contains the complete reset session data including all counters, latest events, and other session-related information | +`data` contains the session object itself — a flat map of session keys, with no wrapper property. The keys follow the `-latest`, `-session`, `-week`, `-month`, `-total`, `-count`, and `-goal` naming pattern, the same keys documented in the [Session Data Reference](/overlays/session-data). + +| Parameter | Type | Description | +| --------- | -------- | ---------------------------------------------------------------------------------------- | +| `data` | `object` | The complete reset session data: all counters, latest events, and other session values | ## Example @@ -28,10 +30,15 @@ This event is triggered when your channel session is completely reset. It delive "type": "message", "topic": "channel.session.reset", "data": { - "latest-follower": { + "follower-latest": { "name": "Styler" }, - // ... other session data + "follower-session": { + "count": 0 + }, + "tip-session": { + "amount": 0 + } } } ``` diff --git a/src/content/docs/websockets/topics/channel-session-update.md b/src/content/docs/websockets/topics/channel-session-update.md index 2f88feb..307ea93 100644 --- a/src/content/docs/websockets/topics/channel-session-update.md +++ b/src/content/docs/websockets/topics/channel-session-update.md @@ -15,10 +15,13 @@ This event is triggered when specific elements of your channel session are modif ## Payload -| Parameter | Type | Description | -| ----------- | -------- | ---------------------------------------------------------------------- | -| `data.key` | `string` | Identifies which session element was updated (e.g., "latest_follower") | -| `data.data` | `object` | Contains the updated information relevant to the key | +| Parameter | Type | Description | +| --------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | +| `data.key` | `string` | The session key that was updated (e.g., `"follower-latest"`, `"tip-session"`) — the same key names used in the [Session Data Reference](/overlays/session-data) | +| `data.name` | `string` | Same value as `data.key` | +| `data.data` | `object` | The updated value for that key, plus the `activityId` of the triggering activity | +| `data.provider` | `string` | The platform that produced the update (e.g., `"twitch"`) | +| `data.channel` | `string` | The channel ID the update belongs to | ## Example @@ -29,23 +32,29 @@ This event is triggered when specific elements of your channel session are modif "type": "message", "topic": "channel.session.update", "data": { - "key": "latest_follower", + "key": "follower-latest", + "name": "follower-latest", "data": { - "name": "Styler" - } + "name": "Styler", + "activityId": "651016c07b356e73c9a3d928" + }, + "provider": "twitch", + "channel": "5f2b4c9e8a1d3e001c8b4567" } } ``` ### Subscription Request +`room` is optional and defaults to the authenticated channel if not specified. + ```json { "type": "subscribe", "nonce": "86ccb2b3-eb8d-4b3c-902d-509c3f5ca88c", "data": { "topic": "channel.session.update", - "room": "channelId123", // Optional: defaults to authenticated channel if not specified + "room": "channelId123", "token": "YOUR_JWT_TOKEN", "token_type": "jwt" } diff --git a/src/content/docs/websockets/topics/channel-stream-status.md b/src/content/docs/websockets/topics/channel-stream-status.md index 347cf96..6b85b6b 100644 --- a/src/content/docs/websockets/topics/channel-stream-status.md +++ b/src/content/docs/websockets/topics/channel-stream-status.md @@ -14,12 +14,16 @@ The `channel.stream.status` topic provides real-time updates about whether a cha ## Payload +`isLive` is the payload's only field — the message carries no stream ID, title, or game. If the channel streams on several platforms at once, it stays `true` as long as at least one stream is live. + | Parameter | Type | Description | | --- | --- | --- | | `data.isLive` | `boolean` | Whether the channel is currently live | ## Example +Going live: + ```json { "id": "01HPPM2TQ6CCMFQGHENAPFR4ZE", @@ -32,6 +36,20 @@ The `channel.stream.status` topic provides real-time updates about whether a cha } ``` +Going offline: + +```json +{ + "id": "01HPPM61Y1V0Q4XRQ9E4H0YB7D", + "ts": "2024-02-15T18:03:11Z", + "type": "message", + "topic": "channel.stream.status", + "data": { + "isLive": false + } +} +``` + ## Related - [Session Update](/websockets/topics/channel-session-update) - Individual session data updates