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 :D 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 ist


    1. 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.

    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.

    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 ausgegeben


    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.

    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> usw


    so 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 :D für fragen stehe ich gern zur Verfügung


    MFG


    hier die aktuelle commands.js und app.js zum download ( ohne Kommentare )
    die Scripte sind getestet und sollten so ohne Probleme laufen


    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

    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 )

    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 " )


    JavaScript
    var 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 :D 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 :D )


    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 )

    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.


    was wird hier gemacht / wurde geändert ?
    ab hier sollte es euch eigentlich schon verständlich genug sein :D und wenn nicht helfen die Kommentare im Code :p


    das war es dann auch mir den cooldowns hier nun die komplette commands.js ( ohne kommentare ) mit allen drei cooldown arten in kombination
    commands.zip


    hey 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 zeile

    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 nein :D


    das 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



    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 Scripte


    warum 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


    JavaScript
    var 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 )



    was wird hier gemacht ?
    ich habe es extra auskommentiert ich denke das sollte als Beschreibung reichen ;)


    endlich kommen wir zum ersten Command


    wir schreiben uns nach dem "// HIER starten jetzt die commands ! JUHUU ;D" folgendes in die commands.js



    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 Comma
    nd ist ( wir erinnern uns an die variable Command ) können wir diese nun abfragen


    das 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 :D
    siehe Kommentar eins weiter unten



    ( Credits gehen natürlich an exxoticx )

    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 ...