We-are-Streamers Forum

Normale Version: [HowTo] Wie erstelle ich meinen EIGENEN Twitch Chat Bot
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Hi, in diesem Tutorial zeige ich euch wie ihr mit Hilfe der TMI.JS API und NODE.JS einen Twitch Bot erstellen könnt.
Fragen zum Tutorial können HIER gestellt werden
bitte nicht in diesem Post antworten damit ich das Tutorial jederzeit erweitern kann
( fragen die hier gestellt werden, werden kommentarlos gelöscht )


1 - Programme

als aller erstes installieren wir uns NODE.JS so wie einen Editor mit dem man .JS und .BAT Dateien erstellen und bearbeiten kann ( z.b. Notepad++  oder Visual Studio Code )  
dazu einfach auf den Seiten die gewünschten Version herunterladen und nach Anweisung installieren.

achtet beim erstellen der Dateien darauf das die Codierung UTF-8 ist um spätere Umlaut Fehler zu vermeiden


2 - Vorbereitungen

wir erstellen einen neuen Ordner namens TwitchBotTutorial ( oder einen anderen Namen Hauptsache wir finden ihn schnell wieder )
in diesem Ordner erstellen wir eine Datei namens app.js
als nächstes starten wir die Windows Eingabeaufforderung ( Windows Taste + R im darauf folgenden Fenster cmd eingeben und Enter drücken )

in der Eingabeaufforderung navigieren wir mit Hilfe des Kommandos CD zu dem eben erstellten Ordner. wenn dieser z.b. auf dem Desktop liegt sieht das Kommando wie folgt aus
Code:
CD C:\Users\<DeinName>\Desktop\TwitchBotTutorial
<DeinName> muss natürlich mit dem Namen deines PCs ersetzt werden 

als erstes initialisieren wir NODE.JS indem wir in die Eingabeaufforderung folgendes eingeben
Code:
npm init
bei den folgenden abfragen könnt ihr einfach mit Enter bestätigen oder die gewünschten daten eingeben

nun generieren wir uns mit Hilfe von NODE.JS die benötigte TMI.JS indem wir in die Eingabeaufforderung folgendes eingeben
Code:
npm install tmi.js
wenn alles erfolgreich war sollte in dem Ordner nun ein neuer Ordner namens node_modules zu finden sein



3 -  Verbindung mit dem Twitch Chat aufbauen

wir erstellen in unserem Ordner eine app.js öffnen diese mit Notepad++ und schreiben folgendes hinein
Javascript
  1. const Owner    = 'HierDerChannelNameInDemGejointWerdenSoll'; // wir speichern unseren Channel Namen in eine Konstante
  2.  
  3. const Bot      = 'HierDerBotChannelName'; // das selbe gilt für den bot
  4. const BotOAuth = 'HierDerOAuthDesBots'; // diesen erhaltet ihr auf https://twitchapps.com/tmi/
  5.  
  6. const Channels = [Owner]; // hier könnten noch mehr Chanel eingetragen werden (mit Komma getrennt) wo der bot joinen soll aber es reicht ja unserer! deswegen braucht ihr hier nichts verändern
  7.  
  8.  
  9. // *************************************************************
  10. // **** NACH DIESER LINIE BRAUCHT IHR NICHS MEHR ÄNDERN ********
  11. // *************************************************************
  12.  
  13. var tmi = require('tmi.js');
  14.  
  15. var options = {
  16. options: {
  17. debug: true
  18. },
  19. connection: {
  20. secure: true,
  21. reconnect: true
  22. },
  23. identity: {
  24. username: Bot,
  25. password: BotOAuth
  26. },
  27. channels: Channels
  28. };
  29.  
  30. var client = new tmi.client(options);
  31. client.connect();
  32.  
  33. // wenn der bot zum chat verbindet
  34. client.on('connected', function(adress, port){
  35.     console.log("Adresse: " + adress + " Port: " + port); // gibt eine Nachricht in der Konsole aus damit man sieht das der bot verbunden ist
  36.     // Ausgabe im Chat das man erkennt das der Bot verbunden ist ( könnte auch weg gelassen werden ) *naaa wer versteht die Anspielung :p*
  37.     client.say(Owner, "Arbeit Arbeit!"); // Achtung hier wird angegeben in welchem Chat geschrieben wird ... nicht wer schreibt !
  38. });


HierDerChannelNameInDemGejointWerdenSoll muss auf deinen Channel Name geändert werden
HierDerBotChannelName ist der Chanel Namen deins bots
HierDerOAuthDesBots ist der Token ( das "Passwort" ) des bot Accounts, diesen erhaltet ihr indem ihr euch mit dem bot Account HIER einloggt
der Rest dürfte durch die Kommentare selbst erklärend sein

um das ganze auch zu starten erstellen wir uns eine start.bat Datei im selben Ordner mit folgendem Inhalt
Code:
node app.js
pause
und führen diese zum testen einmal aus nun sollte in eurem Chat die Nachricht "Arbeit Arbeit!" von eurem Bot ausgegeben werden

somit ist der ChatBOT einsatzfähig und Startklar kommen wir nun zu den Grundlagen der Commands


4 - Vorbereitung Commands
als erstes erstellen wir uns eine commands.js in dem Ordner und erweitern die app.js um folgenden Zeilen
( dies einfach am ende der Datei einfügen )

Javascript
  1. var commands = require('./commands');
  2. // wenn eine nachricht im Chat geschrieben wurde fangen wir diese ab
  3. client.on('chat', function(channel, user, message, _self) {
  4.     if(_self) return; // die eigenen bot Nachrichten werden ignoriert ( deswegen am besten einen bot Channel )
  5.  
  6.     commands.run(client, channel, user, message); // da wir das ganze in ein extra Modul packen ( der Übersicht halber ) müssen wir alles wieder übergeben + den clienten selbst
  7. });


das ganze sorgt dafür das wir Chatnachrichten "abfangen" und verarbeiten können
der Übersicht halber packen wir uns command relevanten Code in separate Dateien
in die commands.js schreiben wir nun folgendes
Javascript
  1. module.exports = {
  2.     run: function(client, channel, user, message, _self) {
  3.         const commandTrigger = '!'; // hier legen wir den coammdn trigger fest ( dies kann alles sein am meisten genutzt ist allerdings ein ! oder # )
  4.        
  5.         // da eine Nachricht mehr als nur das command enthalten kann splitten wir uns diese und suchen das command
  6.         var args = message.split(' '); // teilen der Nachricht an Leerzeichen und speichern diese in ein array ( eine variable weil wir dieses nochmal anpassen müssen )
  7.         var command = args.shift().toLowerCase(); // das command befindet sich im Normalfall an 1 stelle ( also 0 weil array immer bei 0 beginnen ) wir speichern es nun in Kleinschreibung
  8.         var trigger = command.charAt(0); // liest den command trigger aus ... z.b. ein "!" zeichen
  9.        
  10.         if (trigger == commandTrigger) { // wir brauchen nur weiter machen wenn es sich auch um ein command handelt
  11.             command = command.slice(commandTrigger.length, command.length); // wir brauchen den trigger am command nicht mehr und entfernen ihn
  12.  
  13.             //der übersicht halber erstellen wir uns für jedes command eine eigene datei wir prüfen ob bei einem Command diese existiert wenn ja führen wir diese aus
  14.             const fs = require('fs');
  15.             const path = './commands/' + command + '.js'; // der phad der datei
  16.  
  17.             fs.access(path, fs.F_OK, (err) => { // prüfe ob das command existiert
  18.               if (!err) { // kein fehler
  19.                 command = require('./commands/' + command); // include command               
  20.                 // wir führen das command aus und übergeben alle nötigen variablen
  21.                 command.run(client, channel, user, args); // run command
  22.               } else {
  23.                   console.log('try to run undefined command: ' + command);
  24.               }
  25.             });
  26.         }
  27.     }
  28. }


hier passiert nun folgendes wenn ein command getriggert wird prüfen wir ob eine Datei mit dem Namen des commands im unterordner commands vorhanden ist und führen diese aus
so müssen wir wenn wir ein command erstellen wollen nur im unterordner commands eine neue JS datei mit dem Namen des gewünschten commands erstellen und nicht ständig in einer Datei neuen quellcode hinzufügen


5 - Der erste Command
wir erstellen uns nun den unterordner namens commands in diesem erstellen wir uns eine Datei namens test.js ( wichtig hierbei ist das alles klein geschrieben wird ) mit folgendem inhalt

Javascript
  1. module.exports = {
  2.     run: function(client, channel, user, args) {
  3.         client.say(channel, "bestanden"); // Chat Nachricht senden
  4.     }
  5. }


jetzt können wir den bot erneut starten und mit dem Chat Command !test sollte der bot nun mit "bestanden" antworten
als nächstes behandeln wir Cooldowns
--- Platzhalter ----
--- Platzhalter ----
--- Platzhalter ----
--- Platzhalter ----