• 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?

D

Deleted member 62173

Guest
Es gibt in der Hinsicht sehr viele Anleitungen, Videos, und und und im Internet (Google - dein Freund und Helfer) - meist auf englisch, aber das sollte man prinzipiell in den Bereich auch mitbringen. Wenn du im Genuss einer größeren Stadt als Wohnort bist bieten dort auch gegebenenfalls die VHS gute, preiswerte Kurse zu Programmiersprachen an.

Ich denke damit fährst du sicherlich besser als auf jemanden hier zu hoffen ;)

- Dave
 
Last edited by a moderator:

TOminerTV

Member
Es gibt in der Hinsicht sehr viele Anleitungen, Videos, und und und im Internet (Google - dein Freund und Helfer) - meist auf englisch, aber das sollte man prinzipiell in den Bereich auch mitbringen. Wenn du im Genuss einer größeren Stadt als Wohnort bist bieten dort auch gegebenenfalls die VHS gute, preiswerte Kurse zu Programmiersprachen an.

Ich denke damit fährst du sicherlich besser als auf jemanden hier zu hoffen ;)

- Dave

Jo Hi,

wenn es doch so viele Tutorials dazu gibt, dann schick doch bitte mal hier nen Link rein, weil bei dieser Top Dokumentation ist einem überhaupt nicht geholfen und es wäre sehr wünschenswert wenn man da mal einen Anhaltspunkt hätte ohne das ich noch zwanzig Scripte zerlegen muss um irgendwelche Infos zum Sinusbot scripten zu erhalten.

Mfg
Tobias
 

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Was genau ist denn unklar an der Dokumentation?
Vorausgesetzt für Sinusbot wird ein minimal Verständnis von JavaScript

Beispiele sind eigentlich oftmals in den docs auch dabei und alle links der typen die zurückkommen sind ebenfalls klickbar zu einer Dokumentation
Du brauchst quasi nur das script grundgerüst welches ebenfalls als Beispiel unter "registerPlugin" zu finden sind enthalten

aber oftmals ist es am besten andere scripts durchzulesen um ein überblick zu bekommen wie etwas funktioniert, es wird natürlich nie Schritt für Schritt Anleitungen geben wie etwas programmiert wird das wäre definitiv zu viel Aufwand
 
D

Deleted member 62173

Guest
Mühsam ernährt sich das Eichhörnchen - klingt blöd, aber so ist es einfach. Mehr hab ich @Multivitamin seiner Antwort nicht hinzuzufügen :)

- Dave (Berlin)
 

TOminerTV

Member
Und falls fragen auftauchen sollten über die scripting api ist dir im Sinusbot Discord immer noch am besten geholfen https://discord.gg/h6s5Ykc

Das klingt doch mal nach nem Plan, ich habe mit JavaScript noch nicht so viel gearbeitet, es geht halt darum das ich die Beschreibung eines Channels verändern möchte, nur leider finde ich weder Informationen zum 'Backend' noch zu 'Channel' an sich, es gibt keine Bespiel Scripte wo diese Objekte erklärt werden.

Mfg
Tobias
 

irgendwr

no longer active, "retired" staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
weil bei dieser Top Dokumentation ist einem überhaupt nicht geholfen und es wäre sehr wünschenswert wenn man da mal einen Anhaltspunkt hätte ohne das ich noch zwanzig Scripte zerlegen muss um irgendwelche Infos zum Sinusbot scripten zu erhalten
Hm, da fühlt man sich doch ein wenig angegriffen.
Wir haben sehr viel Zeit in die Dokumentation gesteckt (auch machen dies auch weiterhin) und ich bin recht zufrieden damit.

Dass eine Dokumentation einer API dir nicht programmieren beibringt ist.... eigentlich recht offensichtlich? Das ist halt einfach nicht der Zweck.
Eine Dokumentation soll hauptsächlich einheitlich und fachlich richtig dokumentieren was für Schnittstellen es gibt. Beispiele sind auch enthalten, allerdings hauptsächlich Ausschnitte; Alles andere würde den Rahmen sprengen.

Wir haben dennoch zusätzlich ein kleines "Intro" zum Thema Scripting, welches auch in der Dokumentation verlinkt ist:
3363

Siehe https://sinusbot.github.io/docs/scripts/#writing-a-script


Wir setzen allerdings grundlegende JavaScript Kenntnisse voraus, denn alles zu erklären ist ziemlich unmöglich und nicht unsere Aufgabe.

wenn es doch so viele Tutorials dazu gibt, dann schick doch bitte mal hier nen Link rein
Hängt alles davon ab was du noch lernen musst und wie du am besten lernst. Das können andere nicht für dich einschätzen. Es gibt auf jeden Fall genug Material, wer nicht fündig wird ist sein eigenes Problem bzw. faul ^^
Keiner kann dir das eine universelle Tutorial geben, man lern über lange Zeit mit vieeelen verschiedenen und durch eigenes "Rumspielen".

Mozilla hat die besten JS Dokumentationen und auch Beginner Tutorials: https://developer.mozilla.org/en-US/docs/Web/javascript#Tutorials

ohne das ich noch zwanzig Scripte zerlegen muss um irgendwelche Infos zum Sinusbot scripten zu erhalten
Das ist eigentlich ein sehr guter Weg zum lernen sobald man die Grundlagen beherrscht.
Die Infos musst du nicht suchen, die sind ja Dokumentiert. Lernen kann für dich keiner.

Over and out.
 

TOminerTV

Member
Hm, da fühlt man sich doch ein wenig angegriffen.
Wir haben sehr viel Zeit in die Dokumentation gesteckt (auch machen dies auch weiterhin) und ich bin recht zufrieden damit.

Dass eine Dokumentation einer API dir nicht programmieren beibringt ist.... eigentlich recht offensichtlich? Das ist halt einfach nicht der Zweck.
Eine Dokumentation soll hauptsächlich einheitlich und fachlich richtig dokumentieren was für Schnittstellen es gibt. Beispiele sind auch enthalten, allerdings hauptsächlich Ausschnitte; Alles andere würde den Rahmen sprengen.

Wir haben dennoch zusätzlich ein kleines "Intro" zum Thema Scripting, welches auch in der Dokumentation verlinkt ist:
View attachment 3363

Siehe https://sinusbot.github.io/docs/scripts/#writing-a-script


Wir setzen allerdings grundlegende JavaScript Kenntnisse voraus, denn alles zu erklären ist ziemlich unmöglich und nicht unsere Aufgabe.


Hängt alles davon ab was du noch lernen musst und wie du am besten lernst. Das können andere nicht für dich einschätzen. Es gibt auf jeden Fall genug Material, wer nicht fündig wird ist sein eigenes Problem bzw. faul ^^
Keiner kann dir das eine universelle Tutorial geben, man lern über lange Zeit mit vieeelen verschiedenen und durch eigenes "Rumspielen".

Mozilla hat die besten JS Dokumentationen und auch Beginner Tutorials: https://developer.mozilla.org/en-US/docs/Web/javascript#Tutorials


Das ist eigentlich ein sehr guter Weg zum lernen sobald man die Grundlagen beherrscht.
Die Infos musst du nicht suchen, die sind ja Dokumentiert. Lernen kann für dich keiner.

Over and out.

Hallo irgendwr,

danke erstmal für deinen Beitrag und Sorry falls das als Angriff angesehen wird, sollte es nicht sein. Was deinen ersten Link angeht den habe ich auch gefunden, das war ja auch kein Problem, wenn man den Bot anschreibt bekommt man eine Nachricht zurück, das habe ich ja soweit geschafft, es geht halt wie gesagt nur darum wie ich auf Channel zugreifen kann, dazu fehlen mir halt einfach die Bespiele bzw. Erklärungen, ich habe keine einzige dazu gefunden, sollte ich was übersehen haben, kann ich gerne vom Gegenteil überzeugt werden, falls nicht ist das wohl etwas was man an der Dokumentation verbessern kann, klar ganze Scripte wären schön, sind aber verständlicherweise zu viel. Allerdings kann eine kurze Erklärung ja nicht schaden.

Mfg
Tobias
 

TwentyFour

BinusSot Junkie
V.I.P.
Contributor
Insider
es geht halt wie gesagt nur darum wie ich auf Channel zugreifen kann, dazu fehlen mir halt einfach die Bespiele bzw. Erklärungen
Möchtest du, dass der Bot sich in den Channel moved?
Möchtest du die Beschreibung des Channels ändern?
Möchtest du die Anzahl der User im Channel auflisten?
Möchtest du die Channel Eigenschaften bearbeiten?
...

Du siehst, Beispiele können - und brauchen - niemals das abdecken, was du an Infos aus der Dokumentation herausholen kannst.
Mein Tipp an dich wäre, dass du etwas "reverse engineering" an Skripten aus den Ressources betreibst. Schau dir den Quelltext an, und versuche anhand der Dokumentation zu verstehen, was das Skript macht. Das sind deine "Beispiele", die du suchst.
Steiger dich von einfachen zu komplexeren Skripten und schon bald wirst du dein eigenen Skript dir bauen können.
 

TOminerTV

Member
Möchtest du, dass der Bot sich in den Channel moved?
Möchtest du die Beschreibung des Channels ändern?
Möchtest du die Anzahl der User im Channel auflisten?
Möchtest du die Channel Eigenschaften bearbeiten?
...

Du siehst, Beispiele können - und brauchen - niemals das abdecken, was du an Infos aus der Dokumentation herausholen kannst.
Mein Tipp an dich wäre, dass du etwas "reverse engineering" an Skripten aus den Ressources betreibst. Schau dir den Quelltext an, und versuche anhand der Dokumentation zu verstehen, was das Skript macht. Das sind deine "Beispiele", die du suchst.
Steiger dich von einfachen zu komplexeren Skripten und schon bald wirst du dein eigenen Skript dir bauen können.

Das habe ich ja schon gemacht, nur leider verstehe ich nicht wie ich auf einen Channel zugreifen kann und die Beschreibung verändern kann, aber ich möchte grundsätzlich verstehen mit welcher Code Zeile ich anfangen muss, was muss ich einbinden, wie kann ich ein Channel Objekt erstellen, wie wähle ich einen Channel aus?

Mfg
Tobias
 

flyth

is reticulating splines
Staff member
Developer
Contributor
Am besten fängst du an mit ein bisschen englisch und tastest dich dann intuitiv ran. Meistens versuchen die Entwickler es auch so intuitiv zu machen wie möglich.

Dann nutzt du die Suchfunktion.

Im konkreten Fall: du willst einen Channel haben. Übersetzt als Anweisung wäre das: get channel. Spaces gibt es in Befehlsnamen in der Regel nicht, also getchannel. Danach suchst du auf der Seite.

Protipp: die Kategorien und Module sind nicht ohne Grund da, man könnte sich auch da entlang hangeln. Dass die das Audio-Modul vermutlich keinen Channel holt, sollte auch selbstverständlich sein.

Wenn's immer noch hakt, wäre es vermutlich nicht verkehrt ein wenig Zeit in das Verständnis der Doku zu stecken.

Programmieren lernen heißt immer auch selbst forschen und probieren. Spoon-feeding nervt und hilft dir im Endeffekt auch nicht, wenn du wirklich Programmieren lernen willst, weil eben die Methode an die Infos zu kommen, die du brauchst, Teil des Jobs ist :)

Wenn es dir hingegen nur um eine schnelle Lösung des Problems geht, musst du deine Frage anders stellen :)
 

TOminerTV

Member
Am besten fängst du an mit ein bisschen englisch und tastest dich dann intuitiv ran. Meistens versuchen die Entwickler es auch so intuitiv zu machen wie möglich.

Dann nutzt du die Suchfunktion.

Im konkreten Fall: du willst einen Channel haben. Übersetzt als Anweisung wäre das: get channel. Spaces gibt es in Befehlsnamen in der Regel nicht, also getchannel. Danach suchst du auf der Seite.

Protipp: die Kategorien und Module sind nicht ohne Grund da, man könnte sich auch da entlang hangeln. Dass die das Audio-Modul vermutlich keinen Channel holt, sollte auch selbstverständlich sein.

Wenn's immer noch hakt, wäre es vermutlich nicht verkehrt ein wenig Zeit in das Verständnis der Doku zu stecken.

Programmieren lernen heißt immer auch selbst forschen und probieren. Spoon-feeding nervt und hilft dir im Endeffekt auch nicht, wenn du wirklich Programmieren lernen willst, weil eben die Methode an die Infos zu kommen, die du brauchst, Teil des Jobs ist :)

Wenn es dir hingegen nur um eine schnelle Lösung des Problems geht, musst du deine Frage anders stellen :)

Ich hätte ganz gerne nur ein Code Schnipsel oder ein Tutorial, programmieren kann ich, daran sollte es nicht liegen ich habe nur noch nie JavaScript im Bezug auf TS3-Bots verwendet, für Anfänger mag das vielleicht alles richtig sein, aber ich komme an dieser einen Stelle nicht weiter und da mir die Doku nicht weiterhilft ...
Ich habe auch nur auf diesen Thread geantwortet, die Frage mit "Kann mir jemand programmieren beibringen" stammt nicht von mir.
Wie auch immer, ich finde weder eine Beschreibung dazu noch ein Tutorial, das mit "setDescription(description)" habe ich auch gefunden, aber es ist ja nur eine Funktion und ich habe keinen Plan in welchem zusammenhang ich sie aufrufen kann bzw. muss damit ich auf einen Channel zugreifen kann.
 

flyth

is reticulating splines
Staff member
Developer
Contributor
da mir die Doku nicht weiterhilft
Wenn's immer noch hakt, wäre es vermutlich nicht verkehrt ein wenig Zeit in das Verständnis der Doku zu stecken.

Das ist nicht böse gemeint, aber es ist wirklich viel Zeit in die Doku geflossen und es haben schon einige Leute gut damit arbeiten können.


Dennoch, hier ein grober Überblick:

Beispiel von getChannelByName (dort landet man, wenn man wie ich sagte die Browser-Suche bemüht):

JavaScript:
var backend = require('backend');

var channel = backend.getChannelByName('Welcome Channel');

Das gibt dir (wenn er existiert und der Bot verbunden ist) den Channel. Ein Channel hat die Funktion setDescription() => siehe hier.

JavaScript:
channel.setDescription("blargh");

WANN du das aufrufst, hängt von dem ab, was dein Script tun soll.

Der Body der Funktion, die du an registerPlugin übergibst (die mainFunction), wird ausgeführt, sobald das Script geladen wird - da willst du das vermutlich nicht tun, da es sein kann, dass der Bot gar nicht mit dem Server verbunden ist. Also registrierst du über event.on() einen Callback, der aufgerufen wird, wenn das angegebene Event eintritt. Das kann sein:
  • connect: sobald der Bot verbunden ist
  • chat: wenn jemand etwas schreibt
  • etcpp.

Ungetestet und ohne Garantie, hier ein Beispiel:
JavaScript:
registerPlugin({
    name: 'Description Maestro',
    version: '1.0.0',
    description: 'This scripts sets a description to a channel on connect.',
    author: 'John McClane <[email protected]>',
    vars: []
}, (_, config, meta) => {
    const event = require('event');
    const backend = require('backend');
    
    event.on('connect' () => {
        const channel = backend.getChannelByName('Welcome Channel');
        if (!channel) return;

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

TOminerTV

Member
Das ist nicht böse gemeint, aber es ist wirklich viel Zeit in die Doku geflossen und es haben schon einige Leute gut damit arbeiten können.


Dennoch, hier ein grober Überblick:

Beispiel von getChannelByName (dort landet man, wenn man wie ich sagte die Browser-Suche bemüht):

JavaScript:
var backend = require('backend');

var channel = backend.getChannelByName('Welcome Channel');

Das gibt dir (wenn er existiert und der Bot verbunden ist) den Channel. Ein Channel hat die Funktion setDescription() => siehe hier.

JavaScript:
channel.setDescription("blargh");

WANN du das aufrufst, hängt von dem ab, was dein Script tun soll.

Der Body der Funktion, die du an registerPlugin übergibst (die mainFunction), wird ausgeführt, sobald das Script geladen wird - da willst du das vermutlich nicht tun, da es sein kann, dass der Bot gar nicht mit dem Server verbunden ist. Also registrierst du über event.on() einen Callback, der aufgerufen wird, wenn das angegebene Event eintritt. Das kann sein:
  • connect: sobald der Bot verbunden ist
  • chat: wenn jemand etwas schreibt
  • etcpp.

Ungetestet und ohne Garantie, hier ein Beispiel:
JavaScript:
registerPlugin({
    name: 'Description Maestro',
    version: '1.0.0',
    description: 'This scripts sets a description to a channel on connect.',
    author: 'John McClane <[email protected]>',
    vars: []
}, (_, config, meta) => {
    const event = require('event');
    const backend = require('backend');
   
    event.on('connect' () => {
        const channel = backend.getChannelByName('Welcome Channel');
        if (!channel) return;

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

Perfekt, das ist eine Antwort mit der ich arbeiten kann, danke!
 

TOminerTV

Member
Das ist nicht böse gemeint, aber es ist wirklich viel Zeit in die Doku geflossen und es haben schon einige Leute gut damit arbeiten können.


Dennoch, hier ein grober Überblick:

Beispiel von getChannelByName (dort landet man, wenn man wie ich sagte die Browser-Suche bemüht):

JavaScript:
var backend = require('backend');

var channel = backend.getChannelByName('Welcome Channel');

Das gibt dir (wenn er existiert und der Bot verbunden ist) den Channel. Ein Channel hat die Funktion setDescription() => siehe hier.

JavaScript:
channel.setDescription("blargh");

WANN du das aufrufst, hängt von dem ab, was dein Script tun soll.

Der Body der Funktion, die du an registerPlugin übergibst (die mainFunction), wird ausgeführt, sobald das Script geladen wird - da willst du das vermutlich nicht tun, da es sein kann, dass der Bot gar nicht mit dem Server verbunden ist. Also registrierst du über event.on() einen Callback, der aufgerufen wird, wenn das angegebene Event eintritt. Das kann sein:
  • connect: sobald der Bot verbunden ist
  • chat: wenn jemand etwas schreibt
  • etcpp.

Ungetestet und ohne Garantie, hier ein Beispiel:
JavaScript:
registerPlugin({
    name: 'Description Maestro',
    version: '1.0.0',
    description: 'This scripts sets a description to a channel on connect.',
    author: 'John McClane <[email protected]>',
    vars: []
}, (_, config, meta) => {
    const event = require('event');
    const backend = require('backend');
 
    event.on('connect' () => {
        const channel = backend.getChannelByName('Welcome Channel');
        if (!channel) return;

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

So das hat geklappt, danke für die Hilfe, habe jetzt aber ein neues Problem, der Bot scheint nicht die benötigten Rechte zu haben (missing privilege for module db) um auf die DB zugreifen zukönnen.

Uncaught exception: TypeError: Cannot read property 'connect' of undefined at ytNewsEditScript:16:15
var dbc = db.connect({ driver: 'mysql', host: 'localhost', username: 'root', password: '', database: 'eleven' }, function(err) { ^ Stack trace: TypeError: Cannot read property 'connect' of undefined at ytNewsEditScript:16:16

Ich weiß das man da von außen nicht viel machen kann, aber vielleicht ist der Fehler irgendwie bekannt, hier mein Code:
JavaScript:
/**/
event.on('connect', function(ev) {
    var db = require('db');
    var engine = require('engine');
    var helpers = require('helpers');

    var dbc = db.connect({ driver: 'mysql', host: 'localhost', 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) {
                engine.log(helpers.toString(row.eleven));
            });
        }
    });
});
/**/
 

flyth

is reticulating splines
Staff member
Developer
Contributor
Es ist echt alles an Infos da... siehe => DB Modul
Anschließend (!), um die Rechte zu gewähren, die Script-Einstellungen nochmal speichern.

Den DB connect solltest du nicht in einem wiederkehrenden Event absetzen, sondern globaler.
 

TOminerTV

Member
Es ist echt alles an Infos da... siehe => DB Modul
Anschließend (!), um die Rechte zu gewähren, die Script-Einstellungen nochmal speichern.

Den DB connect solltest du nicht in einem wiederkehrenden Event absetzen, sondern globaler.

Wieso muss man sich in euerer Doku alles zusammen dichten, kann man da nicht vernünftige Verlinkungen einbauen?
Und alles was der DB Request ausspuckt ist das hier:
2019-07-11T15:50:13+02:00 [ytNewsEditScript:24:13] "undefined"
 

Multivitamin

Well-Known Member
Tier III
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
musst du doch nicht zusammen dichten steht doch ganz anfangs da dass man das zum script manifest hinzufügen sollte

3364

alles was unter "modules" aufgelistet wird kannst du importieren via require(<module name>) wie es auch unter dem namen "Modules" verlinkt ist

3365


und in der tat das "result" ist noch nicht ganz ausdokumentiert und gibt eigentlich ein Array<Bytes> zurück und helpers.toString ist btw deprecated steht aber auch in der doku... (du kannst dazu ja ein Pull Request auf github machen da die docs von der Community gemacht werden und durch die tolle CI integration von @mxschmitt und @irgendwr automatisch auf Github pages deployed)
 

TOminerTV

Member
(du kannst dazu ja ein Pull Request auf github machen da die docs von der Community gemacht werden und durch die tolle CI integration von @mxschmitt und @irgendwr automatisch auf Github pages deployed)

Sorry aber ich bin absolut kein Github Fan

helpers.toString ist btw deprecated steht aber auch in der doku...

Welche alternative gibt es, wie bekomme ich aus dem Byte-Array meine Daten? :D
 
Top