CrossMod watches chat on Twitch, Kick and YouTube at the same time: it filters messages, answers commands, collects the history of penalties and shows chat on screen in OBS. This page explains, one part at a time, what each part of the dashboard does and where to start.
Everything below happens in the dashboard, after logging in. The dashboard speaks the same language as the home page (you can change it at the bottom of the menu) and works the same on a computer and on a phone.
You can open this page at any time from the dashboard menu, item Help. It opens inside the dashboard, with the menu on the left, so you never have to find your way back.
If you do not know where to look for something, click Search the dashboard at the very top of the menu (keyboard: Ctrl and K) and type a word, for example "ban", "overlay" or "welcome". The dashboard will point to the page it sits on.
You also do not have to hunt for the right chapter here. Below the title of every dashboard page there is a Help for this page link - it opens a window with the same text as below, but straight at the chapter about the page you are on, without leaving the dashboard.
Page and button names below are given as they appear in the dashboard in your language. You can change the dashboard language at the bottom of the menu, in the "Language" field.
A login is valid for a week. If the dashboard starts refusing to save, refreshing the page and logging in again is usually enough.
Everything you do once, at the very beginning, is in Settings (the "Settings" button at the bottom of the menu), in the Bot and connected accounts section. This is where you come back whenever the dashboard says the connection to Twitch or Kick has expired. The full diagnostics stayed on a separate Enable bot page: it is no longer in the menu, but a link at the bottom of that section leads to it.
Overlay addresses contain your private key. Do not show the Enable bot page on stream with the addresses revealed, and do not send them to anyone.
The Automod phrases page is the heart of CrossMod. You type a word or a fragment of text, choose where to look for it and what the penalty should be. The bot checks every message on Twitch and Kick and reacts on its own.
A timeout must have a length set. A zero-second timeout is understood differently by each platform: Twitch rejects such a command and does nothing, while Kick treats a command without a duration as a permanent ban. New phrases get a length automatically, but an old entry with a zero may still be sitting on the list - the dashboard then labels it "Timeout without a duration" and shows a red bar above the list. Select such a phrase and click "Timeout" in the selection bar, and it will get 10 minutes on both platforms.
Scam and scam are the same thing to the bot.cat will not punish someone who wrote "catalogue".discord.gg will work in any link.Before adding a phrase with an ordinary word, check it in the "Check what the bot will do" field and set the author to "Moderator or VIP". You will see straight away whether the penalty would also hit your team.
Not sure how your phrase will behave? At the top of the page there is a "Check what the bot will do" field. You paste a chat message into it, choose who wrote it, and immediately see whether any phrase catches it, which phrase that is and what penalty follows. It is calculated in your browser: nothing goes to chat and nobody gets punished.
The "ban" penalty does not hit everyone the same way. Spam bots almost never have a history on the channel, and a regular viewer pasting a link is usually referring to the conversation on stream. So the bot counts the earlier messages of the person caught by a ban phrase: below 5 they get banned, from 5 to 14 the bot deletes just the message and posts a warning with their nick in chat, and from 15 up it does not react at all and the message stays in chat. You set both thresholds and the warning text on the Automod phrases page, in the "Regular viewers - a milder bot reaction" section; 0 in either threshold turns that step off. Messages from the last 7 days count, because that is how long chat is kept, separately on Twitch and on Kick. In the Mod Log a warning shows as "Warning", and no reaction leaves no entry. The warning replaces only a ban, but from 15 messages up the bot does not react with any penalty - including timeout and message deletion. Messages already removed by the bot or by moderators do not count, so a spammer cannot earn this protection just by spamming. After a ban or timeout the count starts from zero - on Twitch just like on Kick, also when a moderator gave the penalty by hand.
The field above checks one message that you type yourself - and nobody types from memory the exact sentence a regular viewer will write tomorrow. That is why there is a second card under the tester: "A trial run on real chat". You enter the phrase alone, and CrossMod runs the latest messages saved from your chat through it and tells you how many of them it would catch, from how many people and what those messages looked like. It is the simplest way to see, before adding, whether a phrase with an ordinary word would hit your regulars.
Every phrase on your list carries the same button, labelled "test" - one click checks a phrase added long ago, when chat has had time to change. A trial run sends nothing and punishes nobody; it only counts matches on saved messages. The chat record lives for 7 days, so there is nothing to check further back, and on a busy channel a trial run will cover the last few hours - the answer always says how far back the checked messages go.
Below your list is the "CrossMod filters" section: a shared phrase list for all channels in CrossMod that catches typical scams and link spam. The page does not list its contents - you get one switch to turn it on or off. Your list has its own separate switch, so you can keep only the shared one or only yours.
damn with message deletion, a later damn you with a ban will never ban. Hover over the label to see which phrase and which penalty wins.On the Commands page you create what the bot should do on a keyword from chat, and what it should repeat by itself during a stream.
!discord. Letter case does not matter. A name with a capital letter outside the basic alphabet, for example !Żart, is saved by the panel in lower case, because only in that form will the bot recognise it - in chat it can still be typed any way.In a text reply the bot replaces six placeholders. They are written with a dollar sign and in curly brackets:
${sender} - the nickname of the person who typed the command.${nick} - the first word after the command, for example @someone. ${1} means exactly the same.${args} - everything someone added after the command.${target} - the first word after the command, and when nobody gives one, a random viewer from the last half hour.${randomviewer} - a random viewer from the last half hour, regardless of what anyone typed after the command.Example of a !spank command: with the text ${sender} spanks ${target}!, typing !spank @someone sends "You spank @someone!", and plain !spank draws someone from chat.
Three things that are easy to forget. First, a placeholder with a typo or without the dollar sign ({nick}) will not be replaced with anything - it goes to chat literally, brackets included; the version without the dollar belongs to other places in the panel, for example the raid greeting and the automod warning. Second, placeholders work only when someone types the command in chat - with auto-sending every N minutes and in recurring messages there is neither a person writing nor an argument, so the plain text with brackets goes to chat. Third, when ${target} or ${randomviewer} has nobody to draw (nobody wrote for half an hour), the bot will not send your text but a ready-made sentence saying there are no volunteers. The dashboard explains each of these cases on the command card.
These are short announcements sent automatically during a stream, for example a Discord reminder. You set the text, the platform and the interval, no shorter than five minutes. Every command and message has a "Test" option, which sends it to chat right away so you can check the text without waiting. In a command test your own nickname goes in place of the placeholders - a recurring message goes exactly as it is, because placeholders do not work there anyway.
"Test" sends the text even when the switch on the entry is off - so that you can look at the message itself. The dashboard then adds next to the result that the bot will not do it by itself until you turn the switch on. It says the same when the command cannot be triggered for another reason, for example when its name does not start with "!". Commands after which the bot writes nothing in chat (for example a raffle) have nothing to send in a test, and the dashboard then points you to typing them in chat with the overlay running. The same goes for commands that answer about the person asking, that is !followage and !points.
Under the card of every recurring message and every command with auto-sending there is a Schedule line: when the entry last went out and in how many minutes it goes next. Above the whole list there is one sentence about which broadcasts the dashboard currently sees as live, because the bot sends these messages only during a live broadcast. So if an entry "does not work", the screen shows whether it is simply waiting for the stream to start, whether the interval has not passed yet, or whether something is wrong with it - in the last case a separate explanation stands by the card.
That sentence, however, says only what the bot has recorded on its side, and the record can drift away from reality. CrossMod asks Twitch itself every few minutes, but it learns about a broadcast on Kick from a single notification sent at the moment it starts. If that notification is lost, the bot considers Kick offline for the whole stream and will not send any recurring message to that chat. That is why above the list there is a "Check whether the bot sees the stream" button: it asks both platforms directly and shows one sentence for each about how things really are. When the bot says something different from the platform, a "Fix it" button appears next to it and one click puts everything back in place. The check guesses nothing: if a platform does not answer, the dashboard says so plainly and changes nothing.
At the bottom of the Commands page there is a Backup card. "Download backup" saves one file to disk with all commands and recurring messages, together with their text, permissions and intervals. It is worth making before you start a bigger clean-up or before you move settings to another channel.
"Upload backup" works the same way as with automod phrases: it only adds the missing entries and never deletes or overwrites anything. A command with a name you already have, and a message with the same text, are skipped, so uploading the same file twice will not fill the list with duplicates. After the upload the dashboard lists how many entries were added, how many were skipped and why.
The Overlay page gives you the address you paste into OBS. There are two views to choose from: Game, a transparent chat over the game picture, and Chat, the full view of chat from both platforms.
Live rehearsal at the top of the Overlay page gives you five minutes of a pretend stream on Twitch, Kick and YouTube: the viewer counter, chat with emotes and alerts in your open OBS sources, without a real stream. Nothing goes to your real chats, the chat log or the statistics, so open the sources you want to check in OBS before you click. Below the rehearsal there are buttons for single events - follow, sub, resub, gift, raid, bits, Kicksy, Super Chat and a message from each platform separately - which also work without a running rehearsal. With YouTube connected, the same click also starts the YouTube rehearsal right away (the "together with the YouTube rehearsal" box under the button, ticked by default): for 15 minutes, the real chat of the upcoming broadcast from YouTube Studio, described in the YouTube chapter. Writing on YouTube and bot replies start after 1-2 minutes, once CrossMod connects to that chat; until then the chat window shows YT·off. Under the button both rehearsals count down separately, and "Stop" ends both at once.
Everything you change with the sliders on the right of the panel saves by itself and shows up straight away in the preview in the middle. The "Restore defaults" button returns the look to factory settings, and "Download backup" and "Upload backup" let you keep a polished look on disk or move it to the other overlay.
Look templates (Game only, next to "Restore defaults") are ready-made sets of settings: pick a template from the list and click "Apply", and the colors, text size, outline, spacing, icons and animations are set all at once and saved straight away. A template overwrites the current settings of this profile (your font stays as it is), but you can still change every field with the sliders, undo it with the "Undo" button or restore the defaults. The "Whisper" templates are made for the 650x1080 chat frame: set the Game source in OBS to 560x880 and slide it into the frame window - best in a separate profile, so the others stay unchanged. There are six of them: A-D for the cream frame, E-F for the green one; all of them keep your font.
The "Nickname" field decides the colour of viewer names and works in both views, Game and Chat. "User's color" keeps the colour a viewer chose for themselves on Twitch or Kick. "Platform color" paints all nicknames from Twitch purple and those from Kick green, so you can see at a glance which side a message came from. "Custom color" gives every nickname one colour chosen by you. The change also covers messages already on screen, so there is no need to refresh the source in OBS.
In the bar at the top of the Overlay page there is a line "OBS: N sources". It says how many of your overlays are actually connected right now, that is whether OBS on the other side really is receiving. Empty means no source is reporting in - usually OBS is turned off or the address in the source is out of date. The open dashboard itself does not count towards this. Below the line there is a list of those sources. "Reconnecting" next to a source is nothing bad: the connection renews itself roughly every half hour and comes back within a few seconds. "Old address" means the source in OBS has an address from before the addresses were changed in Settings, so nothing reaches it - paste the new address from the top of the page into it.
You can add the same chat address in OBS as your own dock ("Custom Browser Dock") and have chat next to the scene preview. To be able to moderate from it, it has to be paired once:
You pick the platform the chat window writes to with the icon on the left of the message box. Press it and a wheel of platforms opens around it, upwards and to the right: Twitch at the top, Kick on the right, and with YouTube connected also "All" and YouTube in between. The chat under the wheel dims while it is open. Hold, drag towards a platform and let go - the window will write there. A simple click on the icon does not change the platform, it keeps the wheel open: then click a platform, while a click outside the wheel or the Escape key closes it without changes. With the keyboard: Enter opens the wheel, the arrow keys pick a platform and Enter confirms it.
Next to it there is also the address of the "Active" list, that is the people writing in chat right now. This is a dock too, not a scene source. You click a nickname once you have greeted someone and it gets struck through; the "Ukryj OK" button hides the struck-through ones completely. "Wyczyść" empties the whole list - it takes two clicks, so the list is not wiped by accident, and it is remembered even after the window is reopened in OBS: only people who write something new come back onto the list. Someone who got a ban or a timeout leaves the list by themselves. By default the list keeps the last fifteen minutes - you set a different range by adding &min= and the number of minutes, from 1 to 1440, to the address. When the window loses its connection to the server, it says so at the top instead of quietly emptying.
All the addresses at once, including the rarely used ones, are collected on the Enable bot page, in the "Overlay addresses for OBS" card.
The overlay address contains your account's private key. Anyone who knows it sees your chat live, so do not show that address on stream and do not send ready-made OBS scenes to strangers.
Mod Log is the shared history of penalties from both platforms: bans, timeouts, deleted messages, automod reactions and lifted bans. It shows who the action concerned, who carried it out and at what time.
The frame with failed penalties is the dashboard's memory, not an entry in the history - which is why it does not go into the history file and cannot be narrowed with the badges. Most often all the attempts from one evening bounce off the same thing, for example a platform connection that has expired; then one repair in Settings, in the "Bot and connected accounts" section, is enough.
The Mod Log answers the question "what happened", and Statistics the question "was this month calmer". It is the same history of penalties, only counted and shown on charts. You choose the period at the top of the page: 7, 30 or 90 days.
A day is counted in your browser's time zone (the panel shows every time in that same zone), including the switch between summer and winter time, so a penalty from two in the morning lands in the right day. When there was not a single penalty in the period, the page says so plainly instead of showing empty charts.
The Quick moderation page serves one person and one decision, without opening Twitch or Kick. You type a nickname, without the at sign, tick the platforms and click "Timeout", "Permanent ban" or "Lift ban".
There is no "Who is punished right now" list for Kick and there cannot be one: Kick accepts moderation commands but does not publish a list of penalties in force. You can check the state of a single person on Kick by nickname in the "Who is this viewer" card - with the reservation that it comes from CrossMod's record and not from Kick.
On Kick, CrossMod recognises a viewer by the trace they left in your chat - Kick cannot search for ordinary viewers by nickname alone, it only finds channels. We keep chat content for 7 days, and a punished person usually stops writing, so with a very old penalty the dashboard may no longer have a way to point at that person. It will say so plainly, and you then lift such a penalty on your channel's page on Kick.
You also reach this page with one click from other places in the dashboard: with the "Punish" button next to a nickname in Statistics. The nickname is then already filled in, so only the penalty is left to choose.
Settings gathers what belongs to none of the other pages:
{raider} and {link} work in the text; the link is composed separately for each platform, so on Twitch it comes out as twitch.tv/nick and on Kick as kick.com/nick. The button next to it sends a test message with a TEST note - in exactly the form in which the bot will write it.Settings also hold the Bot and connected accounts section: here you connect and disconnect Twitch, Kick and YouTube and start the bot. The "Enabling the bot" chapter describes it. Logging out is at the bottom of the menu.
You switch between the light and dark theme in the side menu, at the bottom. The choice is remembered in the browser.
CrossMod supports three platforms: Twitch, Kick and YouTube. YouTube mostly works the same as the other two, but it has a few limits of its own. This chapter gathers them in one place.
The Google app through which CrossMod connects to YouTube is still in test mode. In this mode Google only lets in accounts added to it as testers, and every other account gets an access denied message from Google. If that happens to you, message @Grithn on Twitch with the Google account address of your channel - she will add it to the testers.
&platformy=youtube to the overlay address. The size of the YouTube logo in the chat window, the game overlay and the viewer counter is set with the YouTube logo size slider on the Overlays page, and for a single source with &ikony=80 added to the address (percent of the Twitch and Kick logo height, 50 to 150). The Twitch and Kick logos stay unchanged.:hand-pink-waving:, which YouTube shows as an emote, and the message comes back to the chat window and the overlays already with the picture. On Twitch and Kick such a shortcut stays plain text.CrossMod can set the thumbnail of your YouTube stream for you: it builds it from your channel avatar, nickname and stream title, plus an optional subtitle (e.g. the game name), your own background and a +18 badge. "+18" and "18+" in the stream title are removed from the text and turn into a red badge. A different stream title means a different thumbnail. You set this up in Settings, in the "YouTube stream thumbnail" block under the YouTube card: "Preview" shows the finished image, and "Set now" sends it to the upcoming stream from YouTube Studio and to the ongoing one while you're live. Each time the thumbnail is set costs 50 units of the daily limit. When the "CrossMod sets the thumbnail" switch is on, CrossMod does this by itself when the stream starts and after every change of its title (also in the "YouTube rehearsal"): each such setting costs 50 units, at most once every 5 minutes. This is on right after you connect YouTube - nothing to save; you can turn it off in Settings.
YouTube only accepts custom thumbnails from channels with a verified phone number. If CrossMod says that YouTube refuses, go to YouTube Studio → Settings → Channel → Feature eligibility and verify your phone number.
Google gives CrossMod 10,000 units per day - for all connected channels together, not for each one separately. The day ends at midnight Pacific time, which is morning in Europe. How much has been used today is shown on the YouTube card on the Enable bot page. This is what each thing costs:
Messages from YouTube reach the panel and overlays with a 15-45 s delay - this is how CrossMod saves the daily Google limit.
At 9,000 used units CrossMod pauses receiving chat, penalties and message deletion on YouTube until midnight Pacific time, and bot messages at 9,500. Twitch and Kick keep working normally in the meantime.
The first answer is already on the Dashboard: the third tile says how many phrases the bot really watches for in every message - yours and CrossMod's shared ones together, but only those whose switch is on. When both switches are off or the enabled lists are empty, the tile turns orange and says so plainly, instead of showing a meaningless number.
The "Automod" card in Settings settles it more broadly: it says plainly whether the automod will do anything. If it says it works and the bot still stays silent on a particular message, paste that message into the "Check what the bot will do" field on the Automod phrases page - you will see whether it matches any phrase at all.
Apart from that, check one by one: whether the switch on your phrase list is on, whether the list has phrases longer than two characters and whether there is no red bar about an expired connection on the Dashboard. If everything is fine and the bot still stays silent, go to Settings and click "Enable bot" in the "Bot and connected accounts" section - a channel requires a one-off start, and that button can be pressed again at any time. If that does not help either, write to Grithn.
It happens that everything is reported correctly and yet no message from Twitch arrives: the bot does not punish, does not answer commands and the chat window in OBS shows only Kick. Twitch sends chat messages by a different route than the rest of the events, and that route can get suspended - most often when the CrossMod server was briefly unavailable.
Open the Enable bot page (the link at the bottom of the "Bot and connected accounts" section in Settings) and look at the "Bot status" card. When this is the case, the "Reading chat messages" item has a cross and a sentence saying that Twitch has suspended sending. Then go back to Settings and click "Enable bot" - that sets this route up again. Give it a minute and check the state once more.
Sending every few minutes works only while the stream is live. Off stream the bot deliberately stays silent. The "Test" button next to a command sends it right away and says whether the message actually arrived.
If the stream is running and still nothing goes out, especially on Kick, click "Check whether the bot sees the stream" above the list of recurring messages. It happens that the notification about a broadcast starting on Kick did not reach CrossMod and the bot thinks you are offline - then the "Fix it" button sets everything right with one click, without waiting for the end of the stream.
Also look at the Schedule line under the entry's card on the Commands page. It says when the entry last went out and in how many minutes it goes next, and if it is waiting for a broadcast to start or goes to a platform that is not live right now, it says that plainly too.
When the bot sent an entry by itself and chat did not accept it, the card says so plainly: instead of "Last sent" it says "Last attempt", and underneath there is an orange note with the reason - for example a repeated text or AutoMod. The note disappears by itself once the next automatic send succeeds. The dashboard remembers a failed attempt for three days, also after a new version is deployed.
Twitch and Kick can accept a message from the bot and still not show it in chat. That happens when AutoMod holds it back, when chat is set to followers only or subscribers only, when slow mode or "emotes only" mode is on, and also when the bot sent exactly the same text a moment earlier - no chat accepts two identical messages in a row.
CrossMod no longer treats such a message as sent. The "Test" button next to a command and the test buttons in Settings say plainly that the message did not appear in chat, and give the reason together with what to do about it. In the chat window in OBS the same reason shows in a bubble at the bottom of the window, and the text goes back into the field if it did not land in any of the chats.
Most often the address was not copied in full or comes from before a key change. Copy it again from the Overlay page and paste it into the source in OBS. The "Refresh cache of current page" button in the browser source settings also helps.
The line "OBS: N sources" at the top of the Overlay page settles which side to look for the problem on. If it says nothing is connected while OBS is running, the address in the source is to blame. If a source is marked "old address", its address is from before the addresses were changed - pasting the new one is enough. If it counts your source and the scene is still empty, check the size and visibility of the source in OBS.
Usually this is an expired login. Refresh the page and log in again. If the message mentions the database, wait a moment and try again, your settings have not disappeared.
The code is valid for ten minutes, and the chat window in OBS shows a new one by itself when the old one expires - it does not need to be refreshed. If instead of digits you see a message about the overlay address, copy the address again from the Overlay page: after a key change the old address no longer allows pairing.
If the dashboard said "Paired" and the window in OBS still asks for a code, wait a few seconds - it unlocks by itself. When it says the write key is missing, open the Overlay page and generate the addresses anew.
What exactly CrossMod stores and for how long is described in the privacy policy. The rules of use are in the terms. The list of changes in the dashboard, release by release, is in the changelog.
Something missing here, or something works differently than described? Write on Twitch to @Grithn, the documentation is written as things go.
The dashboard described is version Beta v.1238.