[HowTo] Wie erstelle ich meinen EIGENEN Twitch Bot

  • So wie der Code da steht, wird dieser, wie du auch selbst gesagt hast, "[...] nur einmal durchgegangen [...]" und belegt in diesem Fall die Variable randomJoke mit einem Wert. Dieser Wert wird auch nicht mehr geändert und somit wird dir für den Befehl "!witz" der jedesmal ausgeführt wird, wenn das Chat Event aufgerufen wird, dieser ausgegeben.


    Doch was wird da überhaupt jedesmal ausgeführt bei dem Chat Event? Wenn du dir das genauer anschaust bemerkst du, dass dem Event eine anonyme Funktion übergeben wurde. In diesem Fall das function(channel, userstate, message, self) {...}.


    Anderst könnte der Code so aussehen:


    JavaScript
    function witz(channel, userstate, message, self) {
      if(message == "!witz"){
        client.say("TheOWord", "@"+userstate.username+" möchte einen sehr schlechten Witz hören, hier ist er: "+randomJoke);
      }
    }
    
    
    client.onclient.on('chat', witz(channel, userstate, message, self));


    Die anonyme Funktion verwendet man allerdings eher in so einem Fall, da diese Funktion nur dort gebraucht wird und sonst nirgendwo. Was kannst du dir also jetzt daraus mitnehmen?
    Du schreibst dir einfach eine Funktion, die den zufälligen Witz ausgibt und jedesmal aufgerufen wird, wenn dieser benötigt wird.


    Dein Code sollte dann so aussehen:




    Somit wird der Teil in der Funktion randomJoke() jedesmal ausgeführt, sobald dieser aufgerufen wird und gibt dir jedesmal zufällig einen Witz zurück.

  • Die Funktion sollte dort stehen, wo diese auch aufgerufen wird. Wenn das allerdings nicht klappt, kannst du es einfach so machen:


    JavaScript
    client.on('chat', function(channel, userstate, message, self) {
      if(message == "!witz"){
        var badjokes = Array(
          witz1,
          witz2,
          witz3
        );
        client.say("TheOWord", "@"+userstate.username+" möchte einen sehr schlechten Witz hören, hier ist er: "+badjokes[Math.floor(Math.random()* badjokes.length)]);
      }
    });


    Das "client.on(...)" hast du ja sicherlich irgendwo stehen und wenn du das einfach so mit reinpackst, funktioniert es auch. Macht an sich keinen Unterschied.

  • @serad0x
    Dieser Code hat leider nicht funktioniert, bzw. der Bot hat gestartet aber ist beim befehl !witz gecrashed.
    Ich habe aber den Vorherigen code zum Laufen gebracht, jetzt funktioniert alles Einwandfrei, danke dafür nochmals :D

  • hey,


    danke für die sehr gute Erklärung und Einrichung :) ....


    folgendes Problem.


    Wenn einer A schreib, soll mit B geantwortet werden.... aber das nur 1x in, ich sag mal 10sek.
    Bekommt man das irgendwie gescriptet ?
    Das Problem ist nämlich, wenn 5 leute A schreiben, soll nicht 5x mit B geantwortet werden... sondern nur 1x ...


    VIELEN dank vorab für die Hilfe.

  • Dafür musst du halt einen Cooldown aktivieren. Also mal dirty:

    Code
    cooldown['A': timeStamp];
    if (currentTimeStamp - cooldown['A'] > 10000) {
    say('B')
    cooldown['A'] = currentTimeStamp
    }

    Damit speicherst du immer das letzte mal wo A geschrieben wurde. Und wenn 10sec vorbei sind, kann wieder B ausgegeben werden.



    Du kansnt natürlich auch es komplizierter machen, wenn du noch einen "User-Cooldown" statt einen "Globalen"-Cooldown hast. Dann musst du noch den user dazu abspeichern.

  • Vielen dank für die schnelle Antwort :) .....


    ich bin in dem Gebiet gaaaanz neu :) ...


    Kannst du mir das in den Script unterbringen ? Das wäre der Abschnitt oder ?
    Ich bedanke mich vielmals.


    client.on('chat', function(channel, user, message, self) {
    if(message == "Hi"){
    client.say("meinChannel", "Selber Hi")}
    });

  • hiho ... sehr nettes Tutorial ...
    ich hätte da aber ein paar kleine Änderungsvorschläge



    das hat den vorteil das man nicht immer den Channel namen bei nachrichten neu schreiben muss sondern kann einfach die Konstante einfügen ( und sollte der Name sich mal ändern reicht es wenn man die Konstante ändert und nicht den kompletten Code anpassen muss ;) )


    JavaScript
    client.say(Bot, "Sei gegrüßt "+userstate.username+", auf meinem Channel!");
    
    
    // oder
    
    
    client.say(Owner, "Sei gegrüßt "+userstate.username+", auf meinem Channel!");


    des weiteren diese kleine Anpassung
    das hier kann man vereinfachen


    JavaScript
    client.on('chat', function(channel, userstate, message, self) { 
      if(message == "!Beispiel" || message == "!beispiel"){ 
        client.say(Bot, "Test");
      }
    });

    indem man das so macht ( und spart somit ein wenig quellcode und vermeidet false positives sollte man sich bei der zweiten vertippt haben :p )


    JavaScript
    client.on('chat', function(channel, userstate, message, self) { 
      // so ist die nachricht ( für den bot ) IMMER klein geschrieben
      var msg = message.toLowerCase();
    
    
      if(msg == "!beispiel"){ 
        client.say(Bot, "Test");
      }
    });


    ( scripte sind jetzt nicht getestet sollten so aber funktionieren :D wenn nicht einfach bescheid geben ich teste dann mal durch :p )


    MFG



    -- EDIT --
    eine Optimierung hätte ich da noch (sry :p ) :D


    da man mehrere nachrichten "abfangen" möchte sollte man nicht mit if arbeiten das ist bei vielen abfragen sehr langsam ( in Performance Sachen gesprochen auch wenn es "nur" Millisekunden sind kann das schnell mal auf mehrere Sekunden ausarten ) ... also macht man es besser mit einem Switch



    und um die cooldown frage von @bbq1337 mal hier noch ein zu bauen wäre das mit meinen änderungen dann so ...



  • Hallo erstmal Danke für das super Tutorial. Ich hätte ein Paar fragen.


    1.Gibt es jetzt einen Funktionierenden Code zu den Witzen ? @TheOWord


    2. Gibt es eine Möglichkeit so befehle wie !watchtime zum laufen zu bringen oder !followtime?


    3. Gibt es eine Möglichkeit den command !follower hinzuzufügen, das dieser automatisch immer die richtige follower anzahl anzeigt?


    Grüße Max Schart und danke für das super Tutorial.

  • zu frage 1 ...
    ich habe eine ausführlichere variante dieses Tutorials veröffentlicht da gehe ich auch genauer auf den Random text ein
    https://streamtalk.de/index.ph…d/?postID=18265#post18265


    zu frage 2 ...
    dies wäre nur möglich wenn du in regelmäßigen Abständen deine zuschauer liste auslesen lässt ( mittelst Timer oder ähnlichem ) und dann die Daten in eine DB speicherst ( dies hat je nachdem wie oft du ausliest dann aber auch Schwankungen und ist nie 100% korrekt ) und diese wieder ausliest sobald der Command getriggert wird
    also für Anfänger dann doch noch sehr schwer um zu setzen aber ja es wäre möglich


    hier gibt es auch einiges zu beachten ... du müsstest abfragen ob du überhaupt online bist damit die watchtime auch erst dann zählt ...
    die müsstest dir eine Möglichkeit überlegen dies auch "genau" zu speichern ... ergo als erstes eine sagen wir mal variable mit dem wert wann er den chat beigetreten ist ( dies ergibt sich daraus ob diese schon existiert oder eben nicht wenn er Joint ) mit der zeit und dem datum ... wenn er wieder verlässt Addierst du in der Datenbank einfach die Differenz zum ersten Zeitpunkt ...


    zu frage 3 ...
    da müsstest du mit der Twitch API arbeiten ... dazu solltest du dich aber als aller erstes mit der Twitch API auseinandersetzen ... Ablauf wäre folgender ...
    Command wird getriggert ... du stellst mittels ajax eine Verbindung zur Twitch API her und fragst deine Kanal Daten ab ( du bekommst als Antwort ein JSON String ) und gibst dann die gewünschten Daten im chat aus.
    auch hier wieder für Anfänger etwas schwer aber nicht unmöglich



    MFG

  • Danke ich habe erst überlegt, ob ich hier überhaupt reinschreiben soll, da der Artikel ja schon etwas älter ist, aber ja es antwortet mit ja glatt einer nach ein paar stunden geantwortet.


    Ok also ist es schon echt nicht einfach. Gibt es dazu irgendwo ein Bsp. Code oder ein ausführliches Tutorial?



    Danke für die Antwort. dann muss ich da wohl mal ein bisschen herumprobieren.


    Vielleicht gibt es ja noch irgendetwas zur Hilfe...


    Grüße Max Schart

  • Hallo an alle erstmal!


    Ich bin überwältigt, da ich nach 4 Jahren Inaktivität auf die Idee gekommen bin mich mal wieder anzumelden und gesehen habe, dass dieser Post bereits um die 70.000 tausend Aufrufe seit der Erstellung erreicht hat. Da der Originalpost bereits sehr veraltet ist und Bilder sowie Links nicht mehr funktionieren, überlege ich ein neues Tutorial zu erstellen. In der Zeit wo dies noch nicht geschehen ist, können mir sämtliche Fragen auf Twitter/X an @exxoticxH1 gestellt werden.


    Bis bald 👋🏼

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!