eigentlich mit jedem bot ... unter anderem bietet tipeee das an
tipeeestream.com
Beiträge von We-are-streamers
-
-
ich rate dir dies selbst beim amt an zu fragen weil sich dies schon in den bereich Rechtsberatung bewegen würde und das darf hier einfach niemand es sei denn er ist zufälligerweise anwalt.
aber ich gehe davon aus das du da keine Probleme bekommen würdest ... hier handelt es sich um Affiliate Marketing und keine Nebenbeschäftigung in dem sinne ( soweit ich informiert bin ) Gelder zählen so oder so erst wenn sie auf deinem Konto sind gib sie einfach beim amt an und lass es mit verrechnen ...aber wie gesagt hol dir diese Info bitte direkt an der quelle
MFG
-
ihr habt das noch nicht nicht mal richtig gelesen
doch ich lese genau dafür ist ein Forum da
man findet ja nicht für alles einen Antwort im Internet
Eigentlich schon man muss nur nach den richtigen begriffen suchen ... meist landest du dann auf foren wie diesen die dir weiter helfen ... und wenn dort keine fragen gestellt werden sondern nur im TS oder DC besprochen dann kann man auch nichts finden
und hat man nicht bei den Regeln akzeptiert das man die Leute respektvoll behandeln soll
hat man wer Behandelt dich hier nicht mit Respekt ... du hast gefragt und eine mehr als ausführliche Antwort bekommen
ich habe keine Freund die streamen
muss man ja auch nicht haben dafür sind unter anderem solche foren da
und ich gebe auch keinen fall Geld aus
für das thema streaming sollte man schon ein wenig geld in die hand nehmen um etwas mehr erfolg zu haben und sich von der masse ab heben zu können .... unter anderem eigene overlays und co
Nun jetzt nochmal ein Schritt vom Gas mein Lieber^^
Wir helfen dir gerne, und ich finde Game of Jones hat dir bereits sehr gute Anhaltspunkte gegeben
dem stimme ich 100% zu
Zudem sind hier viele Streamer unterwegs, deren VoDs eventuell auch schon Abhilfe schaffen können. Ich spreche hierbei zwar nicht von direkten kopieren, aber das Rad muss auch nicht wirklich neu erfunden werden.
genau so sieht es aus ... das Streaming am Anfang ist ein Selbstfindungs Prozess schau dich um wie es andere machen versuch das zu nehmen was funktioniert und mach dein eigenes ding draus
--------
aber wer schon anfängt mit "ich bin zu faul" und "da muss ich ja ewig warten" so wie "dafür geb ich kein Geld aus" sollte sich echt überlegen ob Streaming was für ihn ist1. wenn du zu faul bist schon hier fragen zu stellen wie willst du dann deinen Stream bewerben dies ist auch mit arbeit verbunden
2. erfolg kommt nicht sofort ( da musst du auch warten )
3. wie bereits erwähnt muss man fürs Streaming auch mal Geld in die Hand nehmen unter anderen Equipment, spiele vielleicht sogar bezahlte Werbung oder ein professionelles Coaching ( wenn man mehr erreichen will als nur ein Hobby)hier und auch auf diversen Plattformen wird dir gern geholfen aber wie sage ich immer so gerne bei uns -> wir bieten die Plattform nutzen müsst ihr sie selber ... und das trifft eben auch hier zu ... sei aktiv und mach was draus dann wird dir auch geholfen.
-
im Chat soweit ich weis nicht aber du kannst dir ein Overlay einbauen alles Infos dazu findest du unter
https://help.twitch.tv/s/artic…language=es&sf222407025=1
MFG
-
Bin zu faul dauernd zu schreiben
wenn du dafür schon zu faul bist dann hast du mit Streaming ein Problem ... die arbeit beginnt vor und nach dem Streamen
-
Wenn du kein Halbwissen möchtest, solltest du nicht in einem Internet-Forum schreiben, sondern den direkten Kontakt zu deinem Finanzamt und Gewerbeamt suchen.
genau so sieht es aus ... da einige Regelungen von Kommune zu Kommune unterschiedlich sind ...die einen wollen ein Gewerbe ab den ersten Cent den du verdienst anderen reicht es ab 500€ monatlich ...
aber eins ist wichtig -> egal ob Gewerbe oder nicht du musst jeden Cent versteuern den du einnimmst. -
test es am besten aus ... CPU und GPU sind nicht die einzigen Komponenten die bei der Leistung eines PC eine rolle spielen ... Sarte das spiel und schau auf die jeweiligen Auslastungen ... aber allgemein für FPS games würde ich den Encoder über die CPU laufen lassen.
-
das kommt immer auf das spiel an
ist es extrem GPU lastig nimm die CPU
ist es extrem CPU lastig nimm die GPUbeides ist dafür ( zumindest fürs Streaming ) ausreichend geeignet achte nur darauf das du für das jeweilige die richtigen Einstellungen hast
-
ich weiß der post ist etwas älter ... aber ich habe ihn jetzt erst gesehen ? hast du schon was du suchst oder brauchst du noch Hilfe ?
-
so hart das jetzt auch kling aber ja ... nutze kein SLOBS ;D ...
OBS ist open Source SL hat dies genutzt und ihren eigenen daraus gemacht Problem daran ist aber SLOBS basiert auf einen verbugten Quellcode den sie bis heute nicht gefixt haben ( OBS hat diesen Fehler mittlerweile behoben )
nutze OBS Studio damit kannst du vom Prinzip her genau das selbe ist aber ein wenig Einstellungssache und es ist Performance schonender als SLOBS -
wir machen weiter mit der Ausgabe von zufälligen texten.
an dieser stelle möchte ich Credits an TheOWord geben er hatte im original post schon den richten Ansatz nur einen kleinen Denkfehler
wenn man die variable außerhalb des Commands definiert wird diese auch nur einmal erstellt und bleibt auch so.
erstellt man diese im command wird sie jedesmal wenn sie aufgerufen wird neu erstellt und somit immer ein anderer zufälliger text ausgegebenJavaScript
Alles anzeigencase '!random' : var randomStrings = [ // hier speichern wir uns die antwortmöglichkeiten in ein array 'antwort 1', 'antwort 2', 'antwort 3' ], randomString = randomStrings[Math.floor(Math.random()* randomStrings.length)]; // hier wählen wir zufällig einen eintrag aus dem zuvor erstellten array botMessage = randomString; break;
was wird hier gemacht / wurde geändert ?
wir speichern uns alle Ausgabemöglichkeiten in das Array randomStrings und holen uns mit der mathematischen Funktion random einen zufälligen wert zwischen 0 und 1 ( aber niemals 1 z.b. 0.44723722869536964 ) das ganze multiplizieren wir mit der länge des Arrays ( die anzahl der Einträge ) und runden mit der mathematischen Funktion floor das ganze immer ab. so hat man eine zufällige zahl zwischen 0 und 2 ( zumindest im bespiel )mehr gibt es dazu eigentlich auch nicht zu zeigen also kommen wir nun zu den Argumenten
was sind Argumenten und wie benutze ich diese ?
Ein Argument bezeichnet einen Übergabewert, welcher bei einem Funktionsaufruf angegeben wird die Commands die wir aufrufen sind im Grunde genommen Funktionsaufrufe und dort können wir Argumente übergeben
( wir erinnern uns an unsere variable args die wir uns bereits erstellt haben)wir nehmen als beispiel ein !kill Command da können wir auch gleich die zufälligen texte einbauen und ich kann euch zeigen wie man Platzhalter texte ersetzt.
JavaScript
Alles anzeigencase '!kill' : // z.b. !kill <name> var targetName = args[0], // da wir nur ein argument übergeben wissen wir es ist an position 0 ( hier kann theoretisch alles angegeben werden nicht unbedingt ein name ) randomStrings = [ // hier speichern wir uns wieder random texte diese mal mit platzhaltern die wir ersetzen {{ATTACKER}} und {{TARGET}} '{{ATTACKER}} bewirft {{TARGET}} mit Wattebällchen bis er/sie blutet!', '{{ATTACKER}} zieht sein Quitschehammer und rennt auf {{TARGET}} zu ... *QUITSCH* mist daneben!', '{{ATTACKER}} bewirft {{TARGET}} mit gummiebärchenbomben.' ], randomString = randomStrings[Math.floor(Math.random()* randomStrings.length)]; // hier wird wieder der zufällige text gewählt randomString = randomString.replace('{{ATTACKER}}', userName); // mit replace ersetzen wir uns {{ATTACKER}} mit dem usernamen der den command ausführt randomString = randomString.replace('{{TARGET}}', targetName); // hier ersetzen wir uns {{TARGET}} mit dem argument0 in diesem fall der name der angegeben wurde botMessage = randomString; break;
was wird hier gemacht / wurde geändert ?
ich denke die Auskommentierung dürfte hier ausreichen aber im Grunde lesen wir das übergebene Argument aus ( je nach anzahl der Argumente müsst ihr hier die richtige Position angeben beginnend mit 0 )
z.b !command <argument1> <argument2> <argument3> uswso könnt ihr euch unter anderem für bestimmte Command Settings einstellen ( Achtung die werden noch nirgends gespeichert also bei jedem neustart des Bots sind diese weg ( vielleicht mach ich dazu auch noch ein tut :p ) )
so das war es ( zumindest bis jetzt ) mit dem Tutorial
ich hoffe es hilft euch weiter und vielen dank fürs lesen für fragen stehe ich gern zur VerfügungMFG
hier die aktuelle commands.js und app.js zum download ( ohne Kommentare )
die Scripte sind getestet und sollten so ohne Probleme laufen -
Ich nutze streamelements. Ist es denn da sicherer?
ja da diese Donation seiten ihre eigenen AGB haben unter anderem das zurückziehen der Zahlung betreffend. das ist von Seite zu Seite unterschiedlich geregelt aber im normalfall hast du da kein problem
-
in der Theorie ja ... praktisch wird es schwer für ihn ... er müsste nachweisen das er die "bezahlte Gegenleistung" also das Produkt das er gekauft hat nicht erhalten hat ... da es sich aber um ein "Trinkgeld" handelt hat er eigentlich keine handhabe da Paypal da gegen vorgeht ... kleiner tipp ... nutze Donation Plattformen wie z.b. Tipeee da bist du auf der sicheren Seite
MFG
-
Kann man sich noch bewerben ??
bei uns ? klar immer infos findest du auf der HP
-
so wie funktioniert das nun mit den Cooldowns ?
ich erkläre euch hier die einzelne schritte poste aber am Schluss das komplette Script ohne Kommentare ( sollte zu dem Zeitpunkt alles bekannt sein )als erstes müssen wir uns ein paar neue variablen in der commands.js erstellen
diese packen wir ganz nach oben noch vor dem " module.exports = { " damit diese nicht immer beim Aufruf Resettet werden( ich behandel hier Global-/ Command-/ und User -cooldowns gleichzeitig ihr könnt einzelne natürlich auch weg lassen )
JavaScript
Alles anzeigen// wir erstellen uns eine coldown variable auserhalb des moduls damit sie beim aufruf nicht immer resettet wird. // und definieren die einzelnen cooldowns vor ( javascript hat sich etwas affig wenn wir etwas setzen wollen was nicht definiert ist ) var lastRun = []; lastRun['global'] = 0; // wann wurde irgendein command zuletzt ausgeführt ( hier 0 weil nie :D ) lastRun['commands'] = []; // wann wurde ein bestimmter command zuletzt ausgeführt ( ein leeres array weil wir hier nich nicht wissen was genau drin stehen wird ) lastRun['user'] = []; // wann wurde ein bestimmter command von einem bestimmten user zuletzt ausgeführt ( ein leeres array weil wir hier nich nicht wissen was genau drin stehen wird ) var globalCooldown = 2, // globaler cooldown in sekunden ... wie lang ist die pause bis der bot im allgemeinen auf commands reagiert ( spam protection ) commandCooldown = 0, // command cooldown in sekunden ... wie lang ist die pause bis ein command wieder getrigert werden darf ( hier 0 weil wir diesen pro command anpassen ) userCooldown = 0; // user cooldown in sekunden ... wie lang ist die pause bis ein user den command wieder triggern darf ( hier 0 weil wir diesen pro command anpassen )
was wird hier gemacht / wurde geändert ?
wir haben uns die einzelnen Cooldowns in variablen gespeichert und schon einmal dafür gesorgt das wir die letzte Ausführung eines Commands abspeichern können
was wir nun aber noch nicht kennen ist der aktuelle Zeitpunkt wann ein Command ausgeführt wurde hierzu erstellen wir uns folgende variable und fragen die zeit ab.
( des weiteren erstelle ich hier schon einmal eine variable botMessage diese wird aber erst später relevant )beides muss nach " module.exports = { " erfolgen ( packt sie euch am besten nach " // HIER starten jetzt die commands ! JUHUU ;D " )
JavaScriptvar curentTimestamp = Math.floor(Date.now() / 1000), // der aktuelle timestamp in sekunden botMessage = false; // die nachricht die der bot senden soll ... muss später gesetz werden ( standart auf false lassen damit der bot weil es gibt nichts zu senden )
was wird hier gemacht / wurde geändert ?
da gibt es nicht viel zu sagen mit dem curentTimestamp fragen wir die aktuelle zeit in Sekunden ab und die botMessage ist das was später vom bot geschrieben wird ( hier auf false weil wir noch keine nachricht senden )
die Vorbereitung ist geschafft nun können wir die einzelnen cooldowns abfragen und Aktionen ausführen wenn diese abgelaufen sind
wir fangen an und bauen uns nur den Globalen cooldown ein ( dies ist super als Spam Protektion und sollte mindestens drin sein )JavaScript
Alles anzeigen// HIER starten jetzt die commands ! JUHUU ;D if (lastRun['global'] + globalCooldown <= curentTimestamp) { // prüft ob der globale cooldown schon abgelaufen ist switch(command) { // **************************************************** // Der erste command // **************************************************** case '!test' : botMessage = 'bestanden'; // die nachricht die gesendet werden soll break; } } else { // das else sollte man weg lasen und ist nur zu Demonstrationszwecken drin ( sonst hat die spam Protektion keinen sinn ) botMessage = 'sry @' + userName +' Globaler cooldown'; // die nachricht die gesendet werden soll } if (botMessage !== false) { // prüft ob überhapt eine nachricht zu senden ist client.say(channel, botMessage); // ausgabe im chat ( channel reicht als variable da wir ja in verschiedenen channels sitzen können übergeben wir den in dem der command ausgeführt wurde ) lastRun['global'] = curentTimestamp; // setzt den last run für den global cooldown }
was wird hier gemacht / wurde geändert ?
wie ihr seht senden wir die nachricht nicht mehr direkt sondern packen sie uns in eine variable und senden sie erst am Schluss das hat den vorteil das wir Code sparen da wir nicht immer den cooldown neu setzen müssen wenn ein Command ausgeführt wurde sondern nur ein mal. des weiteren fragen wir nun ab ob die letzte Ausführung + die cooldown zeit kleiner als die aktuell zeit ist und wenn ja führt der bot den Command aus.nun bauen wir uns nur den Command cooldown ein ist vom Prinzip her nichts anders nur müssen wir wieder beachten das wir variablen vordefinieren wenn sie nicht existieren ( und das kann nervig werden :p )
JavaScript
Alles anzeigencase '!test' : // mit cooldown für den command commandCooldown = 5; // in sekunden command cooldown ( gilt nur für diesen command ) // vordefinieren der variable wenn sie noch nicht exisitert ... ( wie bereits erwähnt ist javascript da etwas pingelig :D ) lastRun['commands'][command] = (lastRun['commands'][command] != undefined) ? lastRun['commands'][command] : 0; if (lastRun['commands'][command] + commandCooldown <= curentTimestamp) { // prüfen ob der command cooldown schon abgelaufen ist botMessage = 'bestanden'; // die nachricht die gesendet werden soll lastRun['commands'][command] = curentTimestamp; // speichern des aktuellen Timestamps im lastrun des commands } else { // wenn nicht sag dem user bescheid ( sollte man nur machen wenn es ein langer cooldown ist um spam zu vermeiden ) botMessage = 'sry @' + userName + ' dieser command hat noch Cooldown'; // die nachricht die gesendet werden soll } break;
was wird hier gemacht / wurde geändert ?
im grunde ist es ähnlich wie der globale colldown -> prüfe Cooldown und wenn abgelaufen führe command aus nur das wir uns die cooldowns für jeden command einzeln in ein array schreiben
das "lastRun['commands'][command] = (lastRun['commands'][command] != undefined) ? lastRun['commands'][command] : 0;" ist nur eine Kurzschreibweise einer if else abfrage.so nun kommen wir zum User cooldown dieser funktioniert wie der Command cooldown nur das wir uns eben für jeden User jeden Command abspeichern.
JavaScript
Alles anzeigencase '!test' : // mit user cooldown userCooldown = 120; // cooldown für einzelne user in sekunden ( gilt nur für diesen command ) // und wieder müssen wir uns die variablen vor definieren da wir hier ein array im array haben das ganze zwei mal lastRun['user'][userName] = (lastRun['user'][userName] != undefined) ? lastRun['user'][userName] : []; lastRun['user'][userName][command] = (lastRun['user'][userName][command] != undefined) ? lastRun['user'][userName][command] : 0; if (lastRun['user'][userName][command] + userCooldown <= curentTimestamp) { // prüfen ob der user cooldown abgelaufen ist botMessage = 'bestanden'; // die nachricht die gesendet werden soll lastRun['user'][userName][command] = curentTimestamp; } else { // wenn nicht sag dem user bescheid ( sollte man nur machen wenn es ein lange cooldown ist um spam zu vermeiden ) botMessage = 'sry @' + userName + ' dieser command hat für dich noch Cooldown'; // dier nachricht die gesendet werden soll } break;
was wird hier gemacht / wurde geändert ?
ab hier sollte es euch eigentlich schon verständlich genug sein und wenn nicht helfen die Kommentare im Code :pdas war es dann auch mir den cooldowns hier nun die komplette commands.js ( ohne kommentare ) mit allen drei cooldown arten in kombination
commands.ziphey da sind aber noch ungenutzte variablen !!
ja super aufgepasst wir haben weiter oben den mod / subscriber status usw abgefragt aber nie genutzt
wenn ihr z.b. wollt das eure mods den User cooldown umgehen können ändert ihr einfach folgende zeileJavaScript
Alles anzeigenif (lastRun['user'][userName][command] + userCooldown <= curentTimestamp) { // mach was } // zu if (lastRun['user'][userName][command] + userCooldown <= curentTimestamp || isMod) { // mach was }
was wird hier gemacht / wurde geändert ?
hier wurde nur " isMod" hinzugefügt die zwei | bedeuten so viel wie oder und die variable isMod haben wir weiter oben diese wird uns von Twitch in der user variable übergeben und ist entweder true oder false also salopp gesagt ja oder neindas cooldown thema ist somit durch weiter geht es mit zufälligen texten und Argument Übergabe.
siehe Kommentar eins weiter -
Hi da der Post schon etwas älter ist und der User nun schon ein paar Monate nicht mehr online war dachte ich mir ich update mal sein Script und beantworte ein paar fragen die dort aufgekommen sind in einem neuen Post.
( da die Zeichenbegrenzung in antworten einfach nicht ausreicht )ihr richtet euch Node.js und tmi.js ( neuer link da im Original nicht mehr verfügbar ) wie in dem Post beschrieben ein
nun befinden wir uns in der app.js ( schritt 3.3 im Post ) die ihr mithilfe von Notepad++ einrichtet.
( er empfiehlt Atom es spielt aber keine rolle welchen ihr verwendet Hauptsache ein Editor mit dem ihr .JS und .BAT Dateien erstellen könnt )und nun zu den unterschieden / Verbesserungen
in die app.js schreibt ihr folgendes
JavaScript
Alles anzeigenconst Owner = 'HierDerChannelNameInDemGejointWerdenSoll'; // wir speichern unseren Channel namen in eine Konstante const Bot = 'HierDerBotChannelName'; // das selbe gilt für den bot const BotOAuth = 'HierDerOAuthDesBots' // diesen erhaltet ihr auf https://twitchapps.com/tmi/ const Channels = [Owner]; // hier könnten noch mehr channel eingetragen werden wo der bot joinen soll aber es reicht ja unserer! deswegen braucht ihr hier nichts verändern // ************************************************************* // **** NACH DIESER LINIE BRAUCHT IHR NICHS MEHR ÄNDERN ******** // ************************************************************* var tmi = require('tmi.js'); var options = { options: { debug: true }, connection: { secure: true, reconnect: true }, identity: { username: Bot, password: BotOAuth }, channels: Channels }; var client = new tmi.client(options); client.connect(); // wenn der bot zum chat verbindet client.on('connected', function(adress, port){ console.log("Adresse: " + adress + " Port: " + port); // gibt eine nachricht in der konsole aus damit man sieht das der bot verbunden ist // ausgabe im chat das man erkennt das der Bot verbunden ist ( könnte auch weg gelassen werden ) *naaa wer versteht die anspielung :p* client.say(Owner, "Arbeit Arbeit!"); // achtung hier wird angegeben in welchem chat geschrieben wird ... nicht wer schreibt ! ( da gab es einige missverständnisse im original post ) });
was wurde geändert ?
der Channel und Bot Name ( sowie das "passwort" des Bots ) wurden in einer Konstante gespeichert das erleichtert das nachträglich bearbeiten wenn sich mal etwas daran ändert so wie den Zugriff darauf im späteren verlauf der Scriptewarum eine konstante und keine variable ?
diese angaben sollen sich im späteren verlauf nicht mehr ändern konstanten bleiben wie der Name schon sagt konstant und können im Script nicht angepasst werden wenn sie einmal gesetzt wurden.nun kommen wir zur eigentlichen Funktion eines Bots, das ausführen von Commands.
als erstes erstellt ihr euch in dem Ordner in dem sich die app.js befindet eine Datei namens commands.js und schreibt euch folgendes ans ende eurer app.js
JavaScriptvar commands = require('./commands'); // wenn eine nachricht im Chat geschrieben wurde fangen wir diese ab client.on('chat', function(channel, user, message, _self) { if(_self) return; // die eigenen bot nachrichten werden ignoriert ( deswegen am besten einen bot Channel ) commands.run(client, channel, user, message, _self); // da wir das ganze in ein extra modul packen ( der übersicht halber ) müssen wir alles wieder übergen + den clienten selbst });
was wurde geändert ?
wir packen uns der Übersicht halber alle Commands in ein separates Modul so muss die app.js nicht mehr angefasst werden diese ist nun fertig !jetzt kann unser bot theoretisch arbeiten nur weiß er noch nicht was er machen soll.
in die commands.js packen wir nun folgenden Code ( was er genau macht ist hier erst einmal irrelevant zu den Commands kommen wir gleich )
JavaScript
Alles anzeigenmodule.exports = { run: function(client, channel, user, message, _self) { // da eine nachricht mehr als nur das command entahlten kann splitten wir uns diese und suchen das command var msg = message.split(' '), // teilen der nachricht an leerzeichen und speichern diese in ein array ( eine variable weil wir dieses nochmal anpassen müssen ) command = msg[0].toLowerCase(); // das command befindet sich im normalfall an 1 stelle ( also 0 weil array immer bei 0 beginnen ) wir speichern es un in kleinschreibung msg.shift(); // die restlichen teile sind die argumente ( wenn man z.b. !kill <name> angibt ist <name> ein argument) also entfernen wir den command und haben nur noch die argumente var args = msg, // nicht unbedingt nötig aber so machen wir uns das übersichtlicher und speichern die argumente und die args variable // hier kommen 3 variablen die später für commands praktisch sind wenn es für bestimmte user gruppen sein soll :D isMod = user.mod, // ja wir können abfragen ob der user mod ist oder nicht ;) isSub = user.subscriber, // jhuhuu er ist sub ... oder doch nicht ? die variable sagt es uns :D isTurbo = user.turbo, // hat der user Twitch turbo oder nicht ( keine ahnung wofür man das brauchen könnte aber hey nun haben wir es ) userName = user.username; // hier ist der komplette name klein geschrieben // HIER starten jetzt die commands ! JUHUU ;D } }
was wird hier gemacht ?
ich habe es extra auskommentiert ich denke das sollte als Beschreibung reichenendlich kommen wir zum ersten Command
wir schreiben uns nach dem "// HIER starten jetzt die commands ! JUHUU ;D" folgendes in die commands.js
JavaScript
Alles anzeigenswitch(command) { // **************************************************** // Der erste command // **************************************************** case '!test' : client.say(channel, "bestanden"); // ausgabe im chat ( channel reicht als variable da wir ja in verschiedenen channels sitzen können übergeben wir den in dem der command ausgeführt wurde ) break; // **************************************************** // Der zweite command // **************************************************** case '!test2' : client.say(channel, "auch bestanden"); // ausgabe im chat ( channel reicht als variable da wir ja in verschiedenen channels sitzen können übergeben wir den in dem der command ausgeführt wurde ) break; // **************************************************** // Der dritte und vierte command // **************************************************** // sollte man das break; weg lassen werden darunterliegende commands auch ausgeführt ( wofür auch immer man das benötigt aber es geht :D ) case '!test3' : client.say(channel, "test 3 bestanden"); case '!test4' : client.say(channel, "test 4 ? oder doch erst 3"); break; }
was wird hier gemacht / wurde geändert ?
der Orignal Ersteller des Posts hatte hier if abfragen diese sind aber in masse unperformant deswegen ändern wir das nun auf Switches
da wir wissen was das Command ist ( wir erinnern uns an die variable Command ) können wir diese nun abfragendas switch geht jedes einzelne case durch und "stoppt" dort wo er eine Übereinstimmung findet und führt den darunter liegenden code bis zum break aus
der bot ist so nun eigentlich einsatzbereit aber wir wollen ja mehr
siehe Kommentar eins weiter unten( Credits gehen natürlich an exxoticx )
-
hiho ... sehr nettes Tutorial ...
ich hätte da aber ein paar kleine ÄnderungsvorschlägeJavaScript
Alles anzeigenconst Owner = 'DEINCHANNELNAMEAUFTWITCH'; const Bot = 'DEINBOTNAMEAUFTWITCH'; // hier können mehrere channels angegeben werden bei den der Bot joinen soll ( mit komma getrennt ) const Channels = [Owner]; var options = { options: { debug: true }, connection: { cluster: "aws", reconnect: true }, identity: { username: Bot, password: "" }, channels: Channels }; var client = new tmi.client(options); client.connect();
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 )
JavaScriptclient.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 vereinfachenJavaScriptclient.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 )
JavaScriptclient.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 wenn nicht einfach bescheid geben ich teste dann mal durch :p )MFG
-- EDIT --
eine Optimierung hätte ich da noch (sry :p )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
JavaScript
Alles anzeigenclient.on('chat', function(channel, userstate, message, self) { var BotMessage = false, msg = message.toLowerCase(); switch(msg){ // if message = !beispiel1 case '!beispiel1' : BotMessage = "Test 1"; break; // if message = !beispiel2 case '!beispiel2' : BotMessage = "Test 2"; break; // if message = !beispiel3 case '!beispiel3' : BotMessage = "Test 3"; break; // und so weiter und so weiter ... // zwischen case und break ist dann der gewünschte code zum command // lässt man das break weg führt er auch das case darunter aus .... // praktisch wenn man mit mehreren nachrichten ein und das selbe machen will ( warumm auch immer :p ) // if message = !beispiel4 oder !beispiel5 case '!beispiel4' : case '!beispiel5' : BotMessage = "Test 4 oder 5 ?"; break; } // sende Bot nachricht wenn vorhanden if (BotMessage !== false) { client.say(Bot, BotMessage); } });
und um die cooldown frage von @bbq1337 mal hier noch ein zu bauen wäre das mit meinen änderungen dann so ...
JavaScript
Alles anzeigen// hier wird die letzte ausführung des jeweiligen commands gespeichert var LastRun = []; client.on('chat', function(channel, userstate, message, self) { var BotMessage = false, msg = message.toLowerCase(); user = userstate.username; curentTimestamp = Math.floor(Date.now() / 1000); // in sekunden switch(msg){ // if message = !beispiel1 mit cooldown case '!beispiel1' : var cooldown = 10; // in sekunden if (LastRun['!beispiel1'] + cooldown <= curentTimestamp) { BotMessage = "Test 1"; LastRun['!beispiel1'] = curentTimestamp; } else { // wenn eine nachricht erwünscht ist var seconds = ( LastRun['!beispiel1'] + cooldown ) - curentTimestamp; BotMessage = "sry " + user + " der command !beispiel1 hat noch " + seconds + " sekunden cooldown."; } break; // if message = !beispiel2 ohne cooldown case '!beispiel2' : BotMessage = "Test 2"; break; // if message = !beispiel3 mit cooldown case '!beispiel3' : var cooldown = 30; // in sekunden if (LastRun['!beispiel3'] + cooldown <= curentTimestamp) { BotMessage = "Test 3"; LastRun['!beispiel3'] = curentTimestamp; } else { // wenn eine nachricht erwünscht ist var seconds = ( LastRun['!beispiel3'] + cooldown ) - curentTimestamp; BotMessage = "sry " + user + " der command !beispiel3 hat noch " + seconds + " sekunden cooldown."; } break; // und so weiter und so weiter ... // zwischen case und break ist dann der gewünschte code zum command // lässt man das break weg führt er auch das case darunter aus .... // praktisch wenn man mit mehreren nachrichten ein und das selbe machen will ( warumm auch immer :p ) // if message = !beispiel4 oder !beispiel5 case '!beispiel4' : case '!beispiel5' : BotMessage = "Test 4 oder 5 ?"; break; } // sende Bot nachricht wenn vorhanden if (BotMessage !== false) { client.say(Bot, BotMessage); } });
-
wir haben Streamer im Team die auch dort Streamen von einem zumindest weiß ich es 100% das ist der BlackWolfHB kannst dich ja gern mal bei ihm melden
-
da solltest du dich eher an den Support von Paysafe / Twitch wenden da dieses Problem dann eher bei denen liegt welcher von beiden dir da eher helfen kann, kann ich dir aber leider nicht sagen.