IkaEXE Twitch Bot Control Portal
ENTER PORTAL TOKEN
This portal is gated by the PORTAL_TOKEN set in the bot's .env file.
Commands
Create and manage your chat commands. Use variables like {user}, {args}, {count}, or {random:a|b|c} in responses. Text commands reply with the text; Script commands trigger a built-in bot action; AI commands use the AI to generate a reply.
AI Models / API
Choose the AI service that powers your bot's conversations and auto-responses. Works with Claude, ChatGPT, Grok, Deepseek, or any OpenAI-compatible endpoint. Your API key is stored masked and never shown.
Going-live alert
Options for the Discord going-live alert. This toggles the AI-written description line inside the embed (the title/game/screenshot always post regardless).
Soul — persona & prompts
Shape your bot's personality — how it acts, what it talks about, and how it replies. These fields combine into the bot's character. The System prompt override box below lets you write a complete custom character instead.
Dynamic Responses — Community & Engagement
Features that build community moments and respond to chat dynamically — lurker love, raid reactions, attention retention, and more. Each feature has a plain-language explanation and typed controls — no raw key/value editing needed here. Changes are saved together.
AI Usage Audit
Every AI generation the bot makes, newest first — what triggered it, which AI/model answered, the exact prompt sent, the output, token usage, latency, and status. Handy for root-causing a strange or inconsistent response. Records are kept for 30 days (set ai_usage_retention_days to change; 0 keeps everything).
Timers
Timers fire a templated message in chat on a set interval. If "Live only" is on, they only fire while the stream is live. Messages support the same variables as commands.
Quotes
Quotes are added in chat with !quote add <text>, or manually below. This panel lets you browse, add, and delete them.
Channel Point Reward Reactions
When a viewer redeems a Twitch channel point reward, the bot can react in chat. Add a rule per reward title — the reaction is a template using {user} {title} {cost} {input}, or ai for an AI-generated reply. Reward titles match case-insensitively. Requires the reward-redemption EventSub subscription.
Minigames
Chat games viewers can play. Each sub-tab shows one minigame and its settings. Roulette is the only game with real stakes — a lethal roll times the user out. Mods and the broadcaster always survive. Changes are saved together.
Global Variables
Persistent values usable in any command/timer via {var:name}. Set from chat with !setvar name value (mods).
User Variables
Per-user values usable via {uservar:name}. Set from chat with !setuser name value. Enter a username to view theirs.
Moderation Log
Recent moderation actions (ban/timeout/chat modes) performed via the bot.
FX — Sound & Video Commands
Play sound clips and video overlays in OBS from chat commands. Upload media here, then create a sound or video command and pick an asset. Playback happens in OBS Browser Sources — no StreamerBot needed.
OBS setup
Add these as OBS Browser Sources (one per line). The key is the FX_KEY value from your bot's .env. Sounds stack; videos overlap newest-on-top per layer.
Loading… (open the Settings tab to see your base URL)
Upload asset
Use .mp4 or .webm video files. Other formats (like .mov or HEVC/H.265) are rejected because OBS Browser Sources can't play them. Uploading the same file twice is de-duplicated.
Sound FX Pools
A pool is a named set of clips or responses. A command attached to a pool plays a random one on every trigger. Sound pools hold audio clips (from StreamerBot: Yoda, Skill Issue, Beedle, ...); message pools hold random chat text responses.
Discord Webhooks
Send Twitch activity to Discord channels. A chat mirror posts every chat message (styled as the viewer who sent it), a log mirror posts bot log lines, a going-live alert posts a rich embed (stream title, game, live thumbnail, and an AI description) a few minutes after the stream goes live, a new clip alert posts a rich embed whenever a viewer clips the stream, and an AI usage feed posts a rich embed for every AI generation (trigger, provider/model, prompt, output, token usage) for auditing. Add one webhook per Discord channel you want to post to. How to create a Discord webhook.
Chat mirror posts each chat message using the viewer's name and profile picture, so it reads naturally in Discord. Log mirror posts bot log lines (info, errors, moderation — chat itself is already covered by the chat mirror). Going-live alert, New clip alert, and AI usage post as the display name below.
Users
Chat-active tracking per viewer: watch time (minutes active in chat), messages, commands used, points, timeouts, and bans. Sorted by watch time by default.
Logs
Rotating bot logs — chat messages, moderation actions, bot events, and errors. Logs split at 10MB and are retained for 30 days. Download any file below.
Backup & migrate
Download a portable backup bundle (database + asset manifest) so you can move the bot to a new device or keep a manual snapshot. The media files themselves are too large to bundle — after restoring the DB you copy the assets/ folder into place manually.
Accounts
Connect the bot account (primary — handles chat + posts) and an optional streamer account (send-fallback if the bot can't post). There are two ways to connect accounts; both write to the same place and the Connect buttons below take precedence:
Runtime config (.env)
Read-only view of which environment knobs are set. Secrets are masked. Edit these in the bot's .env and restart the service.
Now Playing (Tuna)
Polls the Tuna OBS plugin for the current song and posts an auto "now playing" message when the track changes. Tuna can run on another machine on your network — set its IP in Host. Backs the !nowplaying / !song commands.
Settings
Key/value configuration. Save applies all changes at once.