[HowTo] Wie erstelle ich meinen EIGENEN Twitch Bot ( Updated )

  • OK, danke für die Info, muss mir jetzt noch jemanden suchen, der das schreiben kann

    selbe lernen macht mehr Spaß :D du hast hier ein Grundlagen Tutorial ... das reicht eigentlich schon wenn man damit etwas rum experimentiert das man den rest davon auch versteht ... du kannst nicht viel kaputt machen außer das script selber ( zumindest in der Programmiersprache :D ) probiere dich aus und schau was passiert aber für fragen stehe ich gern zu Verfügung ... ich könnt es dir zwar schreiben aber ich gebe lieber Hilfe zur Selbsthilfe ( und außerdem bin euch "teuer" :) )

  • selbe lernen macht mehr Spaß :D du hast hier ein Grundlagen Tutorial ... das reicht eigentlich schon wenn man damit etwas rum experimentiert das man den rest davon auch versteht ... du kannst nicht viel kaputt machen außer das script selber ( zumindest in der Programmiersprache :D ) probiere dich aus und schau was passiert aber für fragen stehe ich gern zu Verfügung ... ich könnt es dir zwar schreiben aber ich gebe lieber Hilfe zur Selbsthilfe ( und außerdem bin euch "teuer" :) )

    Wenn man wie ich noch nie mit Java zu tun hatte, ist der notwendige aufwand nicht ganz unerheblich um das zu verstehen, zumindest habe ich bei mir aktuell den Eindruck.
    Und ohne das zu verstehen kann ich es nicht anpassen. Ich hab halt nie irgendeine Programmiersprache gelernt, bisher bin ich nicht über zusammenkopieren hinweg gekommen.
    Ich habe schon Probleme den vorhandenen Teil zu verstehen, leider helfen mir da auch die Kommentare nur bedingt, irgendwie fällt der Groschen einfach nicht. Ich weiß dann zwar was der Teil jeweils macht, ich weiß aber nicht warum er das macht.
    Das selber beibringen mehr Spaß macht ist mit bewusst, hab mir schon so einiges beigebracht.
    Nur hier befürchte ich, das der Aufwand zu groß für den Anteil Freizeit ist, den ich erübrigen könnte um das ganze zu lernen und dann zu verstehen.

  • Und ohne das zu verstehen kann ich es nicht anpassen. Ich hab halt nie irgendeine Programmiersprache gelernt, bisher bin ich nicht über zusammenkopieren hinweg gekommen.

    doch kannst du ;) einfach werte ändern starten und Schauen was passiert ( oder ob es überhaupt noch funktioniert :p ... so habe ich vor 20+ Jahren auch angefangen ;) -- ach das waren noch Zeiten :p -- in einigen situationen mach ich das heute noch so um bestimmte Funktionen zu verstehen ) und so lernst du was es macht ( wie gesagt da kannst du nicht viel zerstören einfach experimentieren ) Programmieren ist kein Hexenwerk es sind logische Schlussfolgerungen ... ich überlege ob ich nicht mal ein Tutorial stream machen soll ... hättet ihr Interesse daran ?

  • Servus erst mal vielen dank für die anleitung


    habe 2 fragen


    wie bekomme ich es hin wenn keiner im chat definiert wurde mit @ das statt undefiniert, chat steht


    zum 2 wie kann ich verschiedene befehle kombinieren das wenn ich zb ein satz nur mit attacker haber und einsatz mit attacker und target habe

    möchte das beide sätze auf ein befehlt funktionieren


    case '!salute' :

    var targetName = args[0],


    randomStrings = [

    '{{ATTACKER}} macht {{TARGET}} ein Bier auf und Prostet zu',

    '{{ATTACKER}} läd {{TARGET}} auf einen Cocktail ein',

    '{{ATTACKER}} reicht {{TARGET}} einen Fencheltee',

    '{{ATTACKER}} jubelt {{TARGET}} ein Alkoholfreies Bier unter',

    '{{ATTACKER}} verpasst {{TARGET}} eine Sektdusche',

    '{{ATTACKER}} stürmt mit zwei Gläsern Vodka-RedBull auf {{TARGET}} zu',

    '{{ATTACKER}} möchte mit {{TARGET}} anstoßen und lässt den Sektkorken knallen',

    '{{ATTACKER}} kippt {{TARGET}} die Errdbeerbowle in den Ausschnitt',

    '{{ATTACKER}} macht {{TARGET}} eine heiße Milch mit Honig, Das du besser schlafen kannst',

    '{{ATTACKER}} möchte mit {{TARGET}} anstoßen und lässt den Sektkorken knallen',

    '{{ATTACKER}} Holt den Caipi aus dem Keller und lötet sich mit {{TARGET}} einen ein ',

    '{{ATTACKER}} nimmt den Jägermeister in die Hand und gibt {{TARGET}} einen aus.'

    ],


    randomString = randomStrings[Math.floor(Math.random()* randomStrings.length)];

    randomString = randomString.replace('{{ATTACKER}}', userName);

    randomString = randomString.replace('{{TARGET}}', targetName);

  • hi :D


    wie bekomme ich es hin wenn keiner im chat definiert wurde mit @ das statt undefiniert, chat steht

    indem du mit einer IF abfrage prüfst ober der typ der variable undefined ist und wenn ja du die variable neu setzt


    JavaScript
    if (typeof targetName == 'undefined') {
        targetName = 'Chat';
    }


    das ganze kann man auch abkürzen indem man es gleich in der variablen Definition abfragen ( da gibt es auch wieder verschieden Möglichkeiten )


    JavaScript
    var targetName = (typeof args[0] == 'undefined') ? 'Chat' : args[0];
    // dies ist eine if abfrage und nach dem ? kommt das was zurück gegeben werden soll wenn die Bedingung erfüllt ist und nach dem : das was zurück gegeben werden soll wenn die Bedingung nicht erfüllt ist ( -- ((wenn) ? dann : sonst) -- )
    
    // oder
    var targetName = args[0] || 'Chat';
    // hier wird einfach nur ein oder angegeben ( || ) also wenn args[0] nicht definiert ist wird der "Standard wert" zurück gegeben

    zum 2 wie kann ich verschiedene befehle kombinieren das wenn ich zb ein satz nur mit attacker haber und einsatz mit attacker und target habe

    möchte das beide sätze auf ein befehlt funktionieren

    dazu einfach die Platzhalter die nicht benötigt werden weg lassen

    beispiel :


    JavaScript
    randomStrings = [
    '{{TARGET}} kann nichts trinken der muss heute noch fahren',
    '{{ATTACKER}} macht ein Bier auf',
    '{{ATTACKER}} trinkt ein Alkoholfreies Bier',
    ...
    ...
    ...
    ...
    ],


    du kannst dir so viele Platzhalter erstellen wie du willst du musst diese dann nur definieren und im String ersetzen denn diese Funktion ersetzt dies Platzhalter nur dann wenn sie auch vorhanden sind sollten sie nicht vorhanden sein passiert einfach nichts


  • Danke erst mal super


    eins habe ich noch

    ich würde gerne eine Nachricht in einem bestimmten zeitraum wieder automatisch erscheinen lassen sprich zb ein Insta link

    wie muss ich das schreiben


    und wie kann ich in einem Befehlt die aufrufe zusammen rechnen lassen das es in Twicht-chat heißt,


    !comloben ist der befehlt


    und schreiben soll er


    Support ist kein Mord - Macht weiter so ihr seid Mega, das fanden auch schon 450 user


    zb so das sich jeder Aufruf Addiert



    vielen dank schon mal

  • ich würde gerne eine Nachricht in einem bestimmten zeitraum wieder automatisch erscheinen lassen sprich zb ein Insta link

    wie muss ich das schreiben

    dazu musst du dir eine neue Funktion erstellen und diese mit einem "timer" immer wieder selbst aufrufen
    beispiel :


    nicht getestet :D aber nutze ich eigentlich immer so sollten fehler drin sein gib bescheid ^^


    und wie kann ich in einem Befehlt die aufrufe zusammen rechnen lassen das es in Twicht-chat heißt,


    !comloben ist der befehlt


    und schreiben soll er


    Support ist kein Mord - Macht weiter so ihr seid Mega, das fanden auch schon 450 user


    zb so das sich jeder Aufruf Addiert

    im normal fall müsste man dafür eine datenbank anlegen ( wir können da es sich ja um einen kleinen bot handelt hier auch einfach mit einer textdatei als "datenspeicher" arbeiten ) da sich sonst die zahl jedes mal wenn man den bot neu startet resetten würde ... das fällt jetzt schon aber nicht mehr unter "anfänger tutorial" und ist etwas fortgeschrittener deswegen stelle ich dir die datenbank.js fertig zur Verfügung und gehe nicht weiter darauf ein ( ich habe so viel wie möglich kommentiert ) database.js.zip ( diese einfach mit in das stammverzeichniss packen )

    das ganze nutzt du wie folgt

    am anfang deiner commands.js datei schreibst du folgendes

    JavaScript
    const database = require('./database.js');


    in deinem command kannst du dann daten aus der Datenbank auslesen / schreiben / addieren oder subtrahieren ( das sind alle funktionen die derzeit in der database.js vorhanden sind )

    ich führe hier alle Funktionen in einzelne commands auf damit du siehst was es macht

    erst wenn du mit database.set infos speicherst ( bei increase und decrease wird set ausgeführt ! ) wird die Datenbank auch gespeichert du hast dann eine neue Datei namens database.json in deinem stammverzeichniss


    ich hoffe es hilft dir weiter :D

  • verstehe ich es richtig das ich es dann so schreiben muss


    so bekommeich ein await fehler als rückmeldung


    case '!comloben' :

    client.say(channel, "Support ist kein Mord - Macht weiter so ihr seid Mega");

    case 'inccount':

    const tableName = 'counter';

    let count = await database.increase(tableName, 'count', 1, 60);

    client.say(channel, 'Das fanden auch schon' + count);

    break;

  • 1. würde ich nicht mit interval arbeiten da ein interval auch aufgerufen wird selbst wenn der letzte Aufruf durch z.b. eine Funktion gerade noch läuft ( node arbeitet Asynchron )
    2. nein so wird das leider nix :D alles was dein interval macht ist die Funktion Messages aufrufen ohne das auch nur irgendetwas passiert

    3. schau dir das Beispiel nochmal genau an und lies dir die Kommentare durch


    fast :D ... das "case 'inccount'" kannst du weg lassen und ich würde das aufgrund der nachrichten begrenzung für bots nicht in zwei nachrichten machen sondern in eine

    JavaScript
    case '!comloben' :
    const tableName = 'counter';
    let count = await database.increase(tableName, 'count', 1); // das maximum mit 60 kannst du weg lassen ( sonst geht der zähler nie höher als 60 das war nur ein beispiel )
    client.say(channel, "Support ist kein Mord - Macht weiter so ihr seid Mega. dies fanden auch schon " + count + ' andere');
    break;



    und die run Funktion muss dann dementsprechend asynchron sein damit das wait auch funktioniert


    JavaScript
    // das
    run: function(client, channel, user, message, _self) { 
    // änderst du zu
    run: async function(client, channel, user, message, _self) { 
    // oder wie ich es gerne schreibe ( einfach weil es kürzer ist )
    run: async (client, channel, user, message, _self) => {
  • vielen dank für deine Hilfe aber ich bekomme den Wait Fehler nicht raus


    Fehler Meldung ist


    let count = await database.increase(tableName, 'count', 1);

    ^^^^^


    SyntaxError: await is only valid in async functions and the top level bodies of modules

  • vielen dank für deine Hilfe aber ich bekomme den Wait Fehler nicht raus


    Fehler Meldung ist


    let count = await database.increase(tableName, 'count', 1);

    ^^^^^


    SyntaxError: await is only valid in async functions and the top level bodies of modules

    der Fehler besagt das die Funktion indem die variable erstellt wird async sein muss ... ich kenne deinen code nicht deswegen bin ich davon ausgegangen das du das in der run Funktion hast ... du musst das async Schlagwort vor die Funktion schreiben so wie oben beschrieben

  • Die Vorlage vom Bot ist deine


    var: async function (client, channel, user, message, _self)

    case '!comloben' :

    const tableName = 'counter';

    let count = await database.increase(tableName, 'count', 1);

    client.say(channel, "Support ist kein Mord - Macht weiter so ihr seid Mega. dies fanden auch schon " + count + ' andere');


    break;


    ich glaube ich bin zu doof für die funktion

  • ich bekomme keine Run hin warum nicht der Bot ist nach deiner Anleitung aufgebaut

    alles hat bisher Funktioniert nur die beiden letzen sachen nicht


    : async function(client, channel, user, message, _self) { }


    case '!comloben':

    const tableName = 'counter';

    let count = await database.increase(tableName, 'count', 1); // das maximum mit 60 kannst du weg lassen ( sonst geht der zähler nie höher als 60 das war nur ein beispiel )

    client.say(channel, "Support ist kein Mord - Macht weiter so ihr seid Mega. dies fanden auch schon " + count + ' andere');

    break;


    RUN nimmte er mir nicht an bei async

Jetzt mitmachen!

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