• If you need help or want to discuss things, you now can also join us on our Discord Server!
  • A first preview of the unlimited version of SinusBot can be found in the Upcoming Changes thread. A version for Windows will follow, but we don't have a release date, yet.

DE Kann mir jemand Programmieren beibringen?

irgendwr

no longer active, "retired" staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Das Beispiel müsste man halt erneuern und den return Typ spezifizieren, aber vom Prinzip ist es ja zumindest noch richtig.

Welche alternative gibt es, wie bekomme ich aus dem Byte-Array meine Daten? :D
Alle Methoden der Byte Klasse sind hier: https://sinusbot.github.io/scripting-docs/#bytes
Also: Was wollen wir? Einen String. Wie heißen Methoden für sowas normalerweise? .toString()
Und siehe da, genau das findet man dort auch: https://sinusbot.github.io/scripting-docs/#bytestostring

Antwort ist also: .toString() auf einem Element des Arrays aufrufen.
 

TOminerTV

Member
Das Beispiel müsste man halt erneuern und den return Typ spezifizieren, aber vom Prinzip ist es ja zumindest noch richtig.


Alle Methoden der Byte Klasse sind hier: https://sinusbot.github.io/scripting-docs/#bytes
Also: Was wollen wir? Einen String. Wie heißen Methoden für sowas normalerweise? .toString()
Und siehe da, genau das findet man dort auch: https://sinusbot.github.io/scripting-docs/#bytestostring

Antwort ist also: .toString() auf einem Element des Arrays aufrufen.

Soweit bin ich dann auch schon, nur gibts diesmal [Object object] als Rückgabewert, keine der Standard Methoden von JS funktionieren mal wieder welche Spezial-Methode ist denn diesmal dafür zuständig?
 

TwentyFour

BinusSot Junkie
V.I.P.
Contributor
Insider
Glückwunsch, jetzt hast du ein Objekt. Willkommen in der objektorientierten Programmierung! ;) Nun schaust du unter Interfaces nach, welche Funktionen (keine Spezial-Methoden) du darauf anwenden kannst, um zu deinem gewünschten Resultat zu kommen.
 

TOminerTV

Member
Glückwunsch, jetzt hast du ein Objekt. Willkommen in der objektorientierten Programmierung! ;) Nun schaust du unter Interfaces nach, welche Funktionen (keine Spezial-Methoden) du darauf anwenden kannst, um zu deinem gewünschten Resultat zu kommen.

Wenn das mal funktionieren würde, ich bekomme immer nur Zahlen zurück, nie vernüftige Daten! Oder sind das für euch Daten:
[116,101,115,116]?!
 

TwentyFour

BinusSot Junkie
V.I.P.
Contributor
Insider
Weiß ja nicht, was du vorhast zu bewerkstelligen, aber ich gehe davon aus, dass du bytes() benutzt.
Und das gibt dir genau das zurück, was es soll.
Code:
Returns
Array<number>: uint8 array

[116,101,115,116]
Das ist für mich ein Array der Länge 4 mit jeweils einem uint8. ✅
 

flyth

is reticulating splines
Staff member
Developer
Contributor
Ja, auch das sind Daten. Ohne jetzt in die ASCII table zu sehen würde ich sagen da steht "test". Ist halt eine Sache der Interpretation...

Im konkreten Fall ist das ein Array an Bytes. Warum gerade das Datenbankthema so "kompliziert" ist, liegt daran, dass Javascript nicht mit Binärdaten als Strings umgehen kann. Und da niemand weiß, was du in deiner Datenbank speicherst, werden binäre Felder erstmal nicht als String, sondern als eben binäre Daten zurückgegeben. Um dennoch mit Strings arbeiten zu können, gibt es diverse Helper-Methoden.

Das DB Modul wird bisher nicht von sonderlich vielen Leuten genutzt, daher gibt es dazu auch nicht so viele Beispiele und ggf auch noch den ein oder anderen Fehler.

Deine sarkastische Art nervt übrigens extrem. Wenn du weiterhin Hilfe wünschst, dann solltest du daran ggf. arbeiten.
 

TOminerTV

Member
Ja, auch das sind Daten. Ohne jetzt in die ASCII table zu sehen würde ich sagen da steht "test". Ist halt eine Sache der Interpretation...

Im konkreten Fall ist das ein Array an Bytes. Warum gerade das Datenbankthema so "kompliziert" ist, liegt daran, dass Javascript nicht mit Binärdaten als Strings umgehen kann. Und da niemand weiß, was du in deiner Datenbank speicherst, werden binäre Felder erstmal nicht als String, sondern als eben binäre Daten zurückgegeben. Um dennoch mit Strings arbeiten zu können, gibt es diverse Helper-Methoden.

Das DB Modul wird bisher nicht von sonderlich vielen Leuten genutzt, daher gibt es dazu auch nicht so viele Beispiele und ggf auch noch den ein oder anderen Fehler.

Deine sarkastische Art nervt übrigens extrem. Wenn du weiterhin Hilfe wünschst, dann solltest du daran ggf. arbeiten.

Würde das funktionieren was ihr mir hier als Lösungen präsentiert würde ich euch auch nicht alle 5 Minuten auf den Wecker gehen, aber merkwürdigerweise ist das auf einmal ein Feature welches nicht ausgereift ist und einfach nicht funktioniert.

1. Ich bekomme ASCII-Arrays zurück (Ok, scheint bei JS ja normal zu sein)
2. Keine eurer Funktionen aus der Doku funktioniert
3. Ich nutze Online Code dieser hat erst nach mehrer anläufen zu einem lesbaren Text geführt, dieser lautet aber immer nur Test und danach nur noch kauderwelsch.

Warum bekomme ich Daten die in meiner gesamten Datenbank nicht vorhanden sind? Ist das möglicherweise eine Meldung der API, ich kann nicht arbeiten wenn es keine Infos darüber gibt, ihr nutzt zwar JS aber mit einem eigenen System, mit eigenen Funktionen und einem eigenen Rechte-System, dann muss es doch auch die Möglichkeit geben darüber etwas in Erfahrung zu bringen und so lange das nicht der Fall ist ist das hier verlorene Zeit. Ich schreibe derzeit eine Webseite mit PHP und JS, habe ich dort Probleme mit JS? Jein. Kann ich sie durch Google lösen? Ja, weil es Informationen gibt, mehrer Webseiten mit Beispielen und einfach erklärtem Code, findet man sowas zur API? Nein! Ihr könntet wie jeder andere auch einfach ein paar YT-Tutorials erstellen und schön hättet ihr hier weniger Probleme.

Und nur mal um das zu dokumentieren, meine DB-Ausgabe:

JavaScript:
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] s
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:25:12] [116,101,115,116]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] s
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:25:12] [116,101,115,116]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] s
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:25:12] [116,101,115,116]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] s
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] t
2019-07-12T12:55:21+02:00 [ytNewsEditScript:25:12] [116,101,115,116]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] D
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] :
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] n
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] f
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] f
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] r
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] T
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] d
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] n
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] u
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] y
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] l
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] l
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] a
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] R
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] ,
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] g
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] n
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] u
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] l
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] m
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] m
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] a
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] s
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] r
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] e
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] V
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13]
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] :
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] b
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] u
2019-07-12T12:55:21+02:00 [ytNewsEditScript:29:13] l
 

flyth

is reticulating splines
Staff member
Developer
Contributor
"Wie jeder andere auch" haben die meisten hier noch einen richtigen Job, der Zeit kostet. Wenn die Funktion jetzt von tausenden von Leuten genutzt werden würde, könnte man sicherlich drüber nachdenken Videos oder wasauchimmer zu machen. Aber ein Video zum Thema Datenbank nur für 1-2 Personen würde nicht wirklich für "weniger Probleme" sorgen. Dafür ist das Projekt einfach zu umfangreich.

Dass du im Vergleich dazu bei PHP auf mehr Doku stößt, sollte dich bei einem > 20 Jahre alten Projekt mit einer Reichweite von vermutlich 70% der dynamischen Webseiten und tausenden Helfern wenig verwundern. Wenn das dein Anspruch ist, dann solltest du es besser gleich sein lassen. Das Projekt hier ist hauptsächlich von einer Person gebaut und hat eine handvoll von sehr hilfsbereiten Menschen, die ihr Wissen gerne mit anderen teilen.

Unser Anspruch an Entwickler ist dadurch leider gezwungenermaßen etwas höher als der Anspruch an einen PHP-Entwickler was Selbstständigkeit und ggf. Ausprobieren angeht.

Mal abgesehen davon können wir nur erraten, was genau du da machst, weil du nie mehr als einen Befehl gepostet hast, den du nutzt. Poste doch einfach mal dein Script, dann haben zumindest wir mehr Infos.

Noch ein Tipp, wenn dir die DB-Schnittstelle nicht zusagt: viel häufiger genutzt wird die HTTP-Schnittstelle. Ruf doch einfach damit deinen PHP Code auf, da hast du ja keine Probleme mit der Datenbank...
 

TwentyFour

BinusSot Junkie
V.I.P.
Contributor
Insider
Würde das funktionieren was ihr mir hier als Lösungen präsentiert würde ich euch auch nicht alle 5 Minuten auf den Wecker gehen, aber merkwürdigerweise ist das auf einmal ein Feature welches nicht ausgereift ist und einfach nicht funktioniert.
Würdest du jemand auf den Wecker gehen, behaupte ich stark, dass du davon keine Notiz nehmen würdest, da dieser dir einfach nicht antworten aka. versuchen würde zu helfen.
Ich versuchs auch mal mit Sarkasmus, vielleicht verstehen wir uns so besser. Fehler in einer kostenlosen Beta, wie verrückt. :eek:
2. Keine eurer Funktionen aus der Doku funktioniert
Mutige Aussage, aber schlichtweg falsch...:rolleyes:
ich kann nicht arbeiten wenn es keine Infos darüber gibt, ihr nutzt zwar JS aber mit einem eigenen System, mit eigenen Funktionen und einem eigenen Rechte-System, dann muss es doch auch die Möglichkeit geben darüber etwas in Erfahrung zu bringen und so lange das nicht der Fall ist ist das hier verlorene Zeit. Ich schreibe derzeit eine Webseite mit PHP und JS, habe ich dort Probleme mit JS? Jein. Kann ich sie durch Google lösen? Ja, weil es Informationen gibt, mehrer Webseiten mit Beispielen und einfach erklärtem Code, findet man sowas zur API? Nein! Ihr könntet wie jeder andere auch einfach ein paar YT-Tutorials erstellen und schön hättet ihr hier weniger Probleme.
Zwingt dich niemand hier Zeit zu investieren, die am Ende dann verloren wäre. Müssen sich wohl die Leute mal an die Nase packen, die ihre Zeit für die Dokumentation investiert haben, nur dass DU am Ende beim Lesen deine Zeit verlierst.
Stell dir vor, der SinusBot ist die Küche. Kochen müssen die User eben selbst, oder eben von jemand anderem kochen lassen. Nur weil die Bedienungsanleitung in deinen Augen nicht 100%ig ist, macht das ja noch lange nicht die Küche schlecht? Die Küche, die man umsonst benutzen darf.
3. Ich nutze Online Code dieser hat erst nach mehrer anläufen zu einem lesbaren Text geführt, dieser lautet aber immer nur Test und danach nur noch kauderwelsch.

Und nur mal um das zu dokumentieren, meine DB-Ausgabe:
Das ist schön und gut, aber ohne deinen Input zu kennen, lässt sich allein anhand des Outputs schwer auf den Fehler schließen.

Vielleicht solltest du auch mal deinen Ansatz überdenken, denn auch beim Programmieren führen viele Wege nach Rom, und so lässt sich die ein oder andere Klippe umschiffen.
 

TOminerTV

Member
"Wie jeder andere auch" haben die meisten hier noch einen richtigen Job, der Zeit kostet. Wenn die Funktion jetzt von tausenden von Leuten genutzt werden würde, könnte man sicherlich drüber nachdenken Videos oder wasauchimmer zu machen. Aber ein Video zum Thema Datenbank nur für 1-2 Personen würde nicht wirklich für "weniger Probleme" sorgen. Dafür ist das Projekt einfach zu umfangreich.

Dass du im Vergleich dazu bei PHP auf mehr Doku stößt, sollte dich bei einem > 20 Jahre alten Projekt mit einer Reichweite von vermutlich 70% der dynamischen Webseiten und tausenden Helfern wenig verwundern. Wenn das dein Anspruch ist, dann solltest du es besser gleich sein lassen. Das Projekt hier ist hauptsächlich von einer Person gebaut und hat eine handvoll von sehr hilfsbereiten Menschen, die ihr Wissen gerne mit anderen teilen.

Unser Anspruch an Entwickler ist dadurch leider gezwungenermaßen etwas höher als der Anspruch an einen PHP-Entwickler was Selbstständigkeit und ggf. Ausprobieren angeht.

Mal abgesehen davon können wir nur erraten, was genau du da machst, weil du nie mehr als einen Befehl gepostet hast, den du nutzt. Poste doch einfach mal dein Script, dann haben zumindest wir mehr Infos.

Noch ein Tipp, wenn dir die DB-Schnittstelle nicht zusagt: viel häufiger genutzt wird die HTTP-Schnittstelle. Ruf doch einfach damit deinen PHP Code auf, da hast du ja keine Probleme mit der Datenbank...

So hier mein Code. Und zu dem Sarkasmus, hättet ihr mir von Anfang richtige Antworten gegeben und nicht immer nur Lern programmieren dann wäre das Verhältnis hier auch deutlich besser. Tut mir Leid wenn ihr euch angegriffen fühlt, aber wenn jemand *der programmieren kann* euch doch bittet ihm ein Beispielcode zu schicken, da ich keine Beispiele finden konnte, ich wollte ja nicht das ihr das Script für mich schreibt ...

JavaScript:
registerPlugin({
    name: 'Channel-Description Change Script!',
    version: '1.0',
    description: 'Das Script ändert die Channel Beschreibung!',
    author: 'Tobias',
    requiredModules: ['db']
}, function(_, sinusbot, config) {
    const event = require('event');
    const backend = require('backend');
    
    var db = require('db');
    var engine = require('engine');
    var helpers = require('helpers');
    
    var dbc = db.connect({ driver: 'mysql', host: '127.0.0.1', username: 'root', password: '', database: 'eleven' }, function(err) {
        if (err) {
             engine.log("ERROR: " + err);
        }
    });
    if (dbc) dbc.query("SELECT * FROM calendarNotes", function(err, res) {
        if (!err) {
             res.forEach(function(row) {
                var array = row['cn_title'];
                
                engine.log(array);
                
                for(var i = 0; i < array.length; ++i)
                {
                    engine.log(String.fromCharCode(array[i]));
                }
                
                //engine.log(document(row['cn_title']));
                //engine.log(row.toString());
             });
        }
    });
    
    /*event.on('connect', function(ev) {
        
        const channel = backend.getChannelByName('YT News');
        if (!channel) return;

        channel.setDescription('Yippie-Ki-Yay!');
    });*/
});
 

flyth

is reticulating splines
Staff member
Developer
Contributor
nicht immer nur Lern programmieren
Du hast dir den Thread mit genau dem Titel hier ausgesucht, nicht wir^^ Außerdem habe die Richtung auch nur in meinem ersten Post eingeschlagen, eben wegen des Titels...

So, vom Code her würde ich sagen passt das alles...
ich sehe da pro Zeile einen Buchstaben, genau was du da auch im Code ausgibst (Versammung Rallye und Treffen blahblah).

const meinstring = array.map(e => String.fromCharCode(e)).join('')
wäre die pure JS-Lösung, um einen String zu bekommen.

const meinstring = helpers.toString(array)
sollte dasselbe bewirken (helpers müssen natürlich importiert werden).

Vielleicht würde es Sinn machen, dass binäre Felder wie auch im HTTP-Modul als Bytes() ausgegeben werden, damit es einheitlich ist. Ggf ändere ich das in einer der nächsten Versionen.
 

TOminerTV

Member
Vielleicht würde es Sinn machen, dass binäre Felder wie auch im HTTP-Modul als Bytes() ausgegeben werden, damit es einheitlich ist. Ggf ändere ich das in einer der nächsten Versionen.

Das wäre nett, was ich wie gesagt auch besser finden würde wenn man ein simples Beispiel in der Doku steht, welches einem kurz und knapp erleutert wie diese Modul funktioniert, ja zum DB Modul gibt es das ja auch schon, das hat mich ja auch in die richtige Richtung gebracht.
 
Last edited:

irgendwr

no longer active, "retired" staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
setInterval, wie bei JavaScript im Browser auch
 
Top