Visit screenshots for an inside look.
This application based on Vue Skeleton (1.x).
This software is meant to be installed on your local machine. If you want to install on a public web server, please secure public folder by .htpasswd or something similar.
- Included Third Party Code
- Install Guides
chatbot.js- Project Commands
- Ports
chatbot.jsongulpfile.json- Chatbot Commands
- Web UI Features
import-videos-folder.jsmigration.js- Localization
- Links
- Audio Files
- Known Issues
- jQuery 3
- Bootstrap 4
- Font Awesome 5
- LazyLoad 17
- CSS User Agent 2
- Moment 2
- Datatables 1
- Sqlite3 5
- Vue 2
- Vue Router 3
- Vue i18n 8
- Vue Datetime Picker 2
- Vue SFC 1
Open console on your OS and navigate to the place where you want to install the project.
php composer create-project --ignore-platform-reqs --no-dev codelinered/twitch-chatbot twitch-chatbot "dev-production"
cd twitch-chatbot
npm i --only=prodAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsgit clone https://github.com/CodelineRed/twitch-chatbot.git
cd twitch-chatbot
git checkout production
npm i --only=prodAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsUnix
wget -O tcb-prod.zip https://github.com/CodelineRed/twitch-chatbot/archive/production.zip
unzip tcb-prod.zipWindows 10+
curl -L -o tcb-prod.zip https://github.com/CodelineRed/twitch-chatbot/archive/production.zip
tar -xf tcb-prod.zipAll OS
cd twitch-chatbot-production
npm i --only=prodAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsGenerate tmiToken and click on "Connect".
If you need PHP, you have to go to Install with Docker.
Open 2 consoles on your OS and navigate to the place where you want to install the project.
php composer create-project --ignore-platform-reqs codelinered/twitch-chatbot twitch-chatbot
cd twitch-chatbot
npm i
gulp buildAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsin 2nd console
gulpgit clone https://github.com/CodelineRed/twitch-chatbot.git
cd twitch-chatbot
git checkout main
npm i
gulp buildAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsin 2nd console
gulpUnix
wget -O tcb-main.zip https://github.com/CodelineRed/twitch-chatbot/archive/main.zip
unzip tcb-main.zipWindows 10+
curl -L -o tcb-main.zip https://github.com/CodelineRed/twitch-chatbot/archive/main.zip
tar -xf tcb-main.zipAll OS
cd twitch-chatbot-main
npm i
gulp buildAdd username, tmiToken, your channel and other channels to src/app/chatbot.json
node migration.js
node chatbot.jsin 2nd console
gulpGenerate tmiToken and click on "Connect".
Open localhost:3000 for Web UI.
Open console on your OS and navigate to the unzipped or cloned app folder.
Unix
systemctl docker start
docker-compose up -d
docker run --rm --interactive --tty --volume $PWD:/app composer install --no-dev
docker exec -ti twitch-chatbot php /var/www/vendor/vrana/adminer/compile.php
-- Ignore error messages --
mv adminer-4.6.2.php ./adminerWindows 10+
"c:\path\to\Docker Desktop.exe"
docker-compose up -d
docker run --rm --interactive --tty --volume %cd%:/app composer install --no-dev
docker exec -ti twitch-chatbot php /var/www/vendor/vrana/adminer/compile.php
-- Ignore error messages --
move adminer-4.6.2.php ./adminerAll OS
$ npm i
$ gulp build
$ node migration.js
$ node chatbot.js| Login | Web UI | Adminer |
|---|---|---|
| Server | localhost:3050 | 127.0.0.1 |
| Username | - | - |
| Password | - | - |
| Database | - | ../data/chatbot.sqlite3 |
chatbot.js Options
| Option | Description |
|---|---|
| --help, -h | Shows list of options |
| --version | Show version number |
| --recordchat, --rc | Record chat messages in database (default: true) |
| --showversion, --sv | Display version text in console (default: true) |
| --intro, -i | Display intro in console (default: true) |
| Description | |
|---|---|
| gulp | watch files and start BrowserSync |
| gulp build | executes following tasks: cleanUp, scss, scssLint, js, jsLint, jsRequire, json, img, font, svg, vue, vueLint, vueJs, vueJsLint |
| gulp lintAll | executes following tasks: scssLint, jsLint, vueJsLint, vueLint, chatbotLint |
| gulp cleanUp | clean up public folder |
| gulp font | copy font files |
| gulp img | copy and compress images |
| gulp js | uglify, minify and concat js files |
| gulp jsLint | checks js follows lint rules |
| gulp jsRequire | copy, uglify and rename files for requirejs |
| gulp json | copy and minify json files |
| gulp scss | compile, minify and concat scss files |
| gulp scssLint | checks scss follows lint rules |
| gulp svg | copy and compress svg files |
| gulp vue | transpile vue files |
| gulp vueLint | checks vue follows lint rules |
| gulp vueJs | transpile vue js files |
| gulp vueJsLint | checks vue js follows lint rules |
| gulp chatbotLint | checks chatbot js follows lint rules |
| gulp watch | watch scss, js, json, vue, chatbot, img, font and svg files |
| Description | |
|---|---|
| 3000 | Web UI with HTML (BrowserSync) |
| 3001 | BrowserSync UI |
| 3050 | Web UI with PHP/ twitch-chatbot (Docker Container) |
| 3060 | Host for twitch-chatbot-videos-folder (Docker Container) |
| 3100 | Main Window (Skateboard Socket for Web UI) |
| 3110 | Chat Window (Skateboard Socket for Web UI) |
| 3120 | Player Window (Skateboard Socket for Web UI) |
| 3130 | Raffle Window (Skateboard Socket for Web UI) |
| 3140 | Poll Window (Skateboard Socket for Web UI) |
| 3150 | Counter Window (Skateboard Socket for Web UI) |
| Description | |
|---|---|
| username | Required - Twitch User Name |
| tmiToken | Required - Twitch TMI Token |
| clientIdToken | Optional - Twitch Client ID Token (is presetted) |
| youtubeToken | Optional - YouTube API Token |
| videosFolder | Optional - Absolute path to videos folder with trailing slash |
| backup | Optional - Daily backup yes or no |
| performance | Optional - 0 = low / 1 = high |
| locale | Required - German (de) and English (en) are presetted |
| channels | Required - List of Channels to connect |
| Description | |
|---|---|
| browserSyncConfig | Required - Defines which config is used for BrowserSync (default: browserSyncDev) |
| sourcePath | Required - Path to raw files (default: src/) |
| publicPath | Required - Path to transpiled files (default: public/) |
| env | Required - Environment dev, test or prod (default: dev) |
| Name | Command |
|---|---|
| about | !about, !chatbot, !cb, !bug, !bugs, !help |
| commands | !commands, !cc |
| counter | counter increased if users counts from 1 - X without interruption |
| diceDuel | !dd6 @User or !dd56w6 @User - first digit can be from 1 - 99 and second from 1 - 9 (automatically removed after 120 sec) |
| diceDuelAccept | !dda - accepting a dice duel request |
| playlistInfo | !plan, !program, !playlist, !video |
| poll | !vote 1 - X |
| raffle | custom keyword (default: !raffle) |
| rollDice | !d6 or !d56w6 - first digit can be from 1 - 99 and second from 1 - 9 |
| customCommand | wrapper for all custom commands |
| Mention User | (NEW) !yourcommand @UserName |
| Name | Command |
|---|---|
| Custom Command | (NEW) !yourcommand [Hello World!] [OPTIONS] |
| Bot List | (NEW) !bots [BotName] [OPTIONS] |
| (Deprecated) !addbot BotName | |
| (Deprecated) !rmbot BotName | |
| (Deprecated) !addcc !command[@cooldown] lorem ipsum e.g. !addcc !hw@10 hello world | |
| (Deprecated) !rmcc !command | |
| (Deprecated) !tglcc !command | |
| (Deprecated) !updcc !command[@cooldown] lorem ipsum dolor e.g. !updcc !hw Hello World! |
| Option | Description |
|---|---|
| --on | Enable command for all users (default: true, if is a new command) |
| --off | Disable command for all users, but not streamer and mods (default: false) |
| --cd 30 | Cooldown for all users, but not streamer and mods (default: 30 seconds, if is a new command) |
| --st | Show command status in chat (default: false) |
| --rm | Remove command (default: false) |
| Option | Description |
|---|---|
| --tc | Show bot list to chat (default: false) |
| --rm | Remove bot (default: false) |
- Timestamp
- Badges
- Custom User Color
- "/me" Messages in full color and italic style
- Cheers
- Subs, Resubs, Sub Gifts (random and specific), Gift Upgrades
- Bans, Timeouts, Deletes
- Now Hosting, Hosted By, Raided By, Unhost
- Clickable Links
- Twitch Emotes
- BetterTTV Emotes
- FrankerFaceZ Emotes
- Popout URL
/channel/[channel]/chatto use browser source in OBS (No pixel recommendation)
- Cooldown
- Active State
- Last Execution Time
- Add Command (only in chat)
- Remove Command
- Toggle Command
- Update Command (only in chat)
- Popout URL
/channel/[channel]/counterto use browser source in OBS (Pixel recommendation: 400x400px)
- Play Local MP4 files with
localhost:3060domain. (Seedocker-compose.videos-folder.yml) - Play Twitch Clips and Videos (past broadcasts, highlights and video uploads)
- Play YouTube Videos
- Add Video
- Edit Video
- Skip Videos
- Move Videos
- Remove Video
- Remove Played Videos
- Remove Skipped Videos
- Add Playlist
- All Playlists
- Edit Playlist
- Switch Playlist
- Merge Playlists
- Remove Playlist
- Reset Playlist
- Clear Playlist
- playlistInfo Command
- Popout URL
/channel/[channel]/playerto use browser source in OBS (Pixel recommendation: 1920x1080px) - Video name overlay in player
- Autofill video name, sub name and duration (Depence on
videosFolder,youtubeTokenandclientIdTokensettings) - Change stream title and / or game dynamic (If at least one Twitch account is connected to "Insanity Meets - Chatbot" App on Twitch)
| Player | Name | Sub Name | Duration |
|---|---|---|---|
| Local | Yes1 (Parsed File Name) | Yes (Modification Date) | Yes |
| Twitch Clip | Yes (Clip Title) | Yes (Game/ Category) | Yes |
| Twitch Video | Yes (Video Title) | Yes (Game/ Category) | Yes |
| YouTube Video | Yes (Video Title) | Yes (First Video Tag) | Yes |
1 example_video-2020.mp4 parsed to Example Video - 2020
- Start Poll
- Close Poll
- Remove Poll
- Copy Poll to Form
- All Polls Modal
- Announce Poll to Chat Button
- Result to Chat Button
- Animate Winner (If multiple options are equal than a random winner will be picked)
- Play Audio for Winner (Audio is only played in popout window)
- Play Audio loop for Poll (Audio is only played in popout window)
- Announce Winner to Chat
- Multiple Choice Yes/No
- Combine Poll with Raffle
- Start Datetime
- End Datetime
- Datime Picker
- Popout URL
/channel/[channel]/pollto use browser source in OBS (Pixel recommendation: 1000x563px by max. 6 options)
- Start Raffle
- Close Raffle
- Remove Raffle
- Copy Raffle to Form
- All Raffles Modal
- Announce Raffle to Chat Button
- Result to Chat Button
- Animate Winner
- Play Audio for Winner (Audio is only played in popout window)
- Play Audio loop for Poll (Audio is only played in popout window)
- Announce Winner to Chat
- Custom Keyword
- Multiplicators
- Start Datetime
- End Datetime
- Datime Picker
- Popout URL
/channel/[channel]/raffleto use browser source in OBS (Pixel recommendation: 1000x563px)
- Own badge in Chat
- Preset of 5 Bots (Mod4YouBot, Moobot, Nightbot, StreamElements, Streamlabs)
- Bot autofilling with BetterTTV API
- Display Viewer Count as Chart
- Top 15 Emotes All
- Top 15 Twitch Emotes
- Top 15 BTTV Emotes
- Top 15 FFZ Emotes
- Top 15 Chatters
- Top 15 Hashtags
- Top 15 Commands
- Amount of Subs
- Amount of New Subs
- Amount of New Paid Subs
- Amount of New Prime Subs
- Amount of Gifted Directly Subs
- Amount of Gifted Random Subs
- Amount of Resubs
- Amount of Paid Resubs
- Amount of Prime Resubs
- Amount of Purges
- Amount of Deleted Messages
- Amount of Timeout Meassages
- Amount of Timeout Users
- Amount of Banned Users
- Amount of New Users
- Amount of All Users
- Amount of Chat Messages
- Amount of Used Emotes
- Amount of Cheers
- Amount of Bits
- Viewer Minimum
- Viewer Maximum
- Viewer Average
import-videos-folder.js Options
| Option | Description |
|---|---|
| --help, -h | Shows list of options |
| --version | Show version number |
| --backup, -b | Optional - Create an additional backup (default: false) |
| --channel, -c | Required - Channel name which owns the videos |
| --identity, -i | Optional - Channel id / Room id. (required if channel is not in database) |
| --locale, -l | Optional - Locale to use in date generation and log messages (default: en) |
| --log | Optional - Show logs in CLI (default: true) |
| --subname, --sn | Optional - Add date as sub name (default: true) |
Example execution: node import-videos-folder.js -c CodelineRed
videosFolderinchatbot.jsonpoints to existing folder- each folder under
videosFoldercorresponds to a playlist - only MP4 files are allowed
The Script only imports videos which are not in the database.
migration.js Options
| Option | Description |
|---|---|
| --help, -h | Shows list of options |
| --version | Show version number |
| --direction, -d | Optional - Migration direction (default: up) |
| --file, -f | Optional - Execute one specific migration file (e.g.: -f version-1.0.0) |
| --locale, -l | Optional - Locale for log messages (default: en) |
| --log | Optional - Show logs in CLI (default: true) |
Example execution: node migration.js -d up
- Web UI:
i18n-locales.js - Web UI:
langswitch.vue - Node:
locales.js
- Twitch Messaging Interface
- Twitch TMI Token
- Twitch API Token
- Twitch API Reference
- YouTube API Token
- BetterTTV API
- FrankerFaceZ API
- Twitch Clip API
- Twitch Clip Embed
- Twitch Video Embed
- ESLint Js Rules
- ESLint Vue Rules
- ESLint Import Rules
- Sass Lint Rules
- Vue SFC
- Path to RegExp
- Moment Parsing (Date Format)
- SCSS Confetti
- Airy by CodelineRed
- Ambi EP by CodelineRed
- Big Clap
- Brassy by CodelineRed
- C-Space by CodelineRed
- Cheering and Clapping
- Ensemble by CodelineRed
- Fan Fare 1
- Fan Fare 2
- Fan Fare 3
- Freedom by Dracon
- Hope by Dracon
- Memory Palace by Dracon
- Peace by Dracon
- Valley by Dracon
- Voice of Doubt by Dracon
- Winner Deep Voice
- Winner Female Voice
- Winner Robot Voice
- Sometimes user are not inserted in channel_user_join. This is under investigation.
- Emotes in Chat component can flicker after new message was added
- An Emoji followed by a Twitch emote (e.g. 🧡 CoolCat) is wrong interpreted by
emote.encodeTwitch()- The API sends a wrong
userstate.emotesobject
- The API sends a wrong