• If you need help or want to discuss things, you now can also join us on our Discord Server!

Moving Commands from Core to Scripts

flyth

is reticulating splines
Staff member
Developer
Contributor
Thanks to a collaboration with @irgendwr, the native bot commands (like !play / !stop etc.) have now (1.0.0-beta.7+) been moved to a script and can therefore be edited / extended / restricted by the admin of a SinusBot. The new script (sinusbot-commands.js) can be found in the scripts folder and uses the awesome command.js library from @Multivitamin, so that the code should be easily understandable and a breeze to maintain.

This thread is where we can discuss this new feature and maybe extisting bugs.
 

LeonJoas

Donor
is awesome!
is uber awesome!
Guten Tag,

ich bin mir nicht zu 100% sicher, aber ich denke ich habe einen Bug gefunden:

Ich besitze seit einigen tagen eine Lizenz, die es mir erlaubt den Abo-Modus zu nutzen. Ich habe mir ein Script geschrieben, welches in der 1.0.0-beta.6 einwandfrei funktioniert hat. Dieses Script nutzt client.setSubscription(true). Nach dem Update wird mir jedoch der Fehler angezeigt, dass die Funktion setSubscription(true) nicht existiert.
2019-10-13T14:10:35+02:00 error on setTimeout/setInterval callback: Uncaught exception: TypeError: client.setSubscription is not a function at botmode:51:35 client.setSubscription(true); ^ Stack trace: TypeError: client.setSubscription is not a function at botmode:51:36

Dann dachte ich mir, dass sich was bei der Scripting-Engine verändert hat (sollte dies der fall Sein, habe ich nichts in der Dokumentation gefunden) und habe das Script erstmal deaktiviert.

Darauf hin wollte ich das Abo mit !sub starten, aber es passiert nichts. !mode 0 bzw. !mode 1 funktioniert auch nicht, genau so wenig wie !subchan. Auch nach neustarts etc. hat sich nichts verändert.

Auch dann wollte ich nicht aufgeben und habe mir gedacht, dass das daran liegt, dass die Commands jetzt über das sinusbot-command Script gesteuert werden und dass diese Commands dort einfach fehlen (habe zumindest nichts in dessen Code gesehen). Aber sobald ich mir dann ein eigenes Script bastele, dass in meinen Fall den Command !abo hinzugefügt hat, konnte ich im Instanz-Log den selben fehler sehen:
2019-10-13T14:29:36+02:00 error on callback func: Uncaught exception: TypeError: ev.client.setSubscription is not a function at abocmd:22:26 ev.client.setSubscription(1); ^ Stack trace: TypeError: ev.client.setSubscription is not a function at abocmd:22:27
JavaScript:
registerPlugin({
    name: 'Subscribe on Command',
    version: '2.1s',
    description: 'Defines a command to subscribe to a user',
    author: 'Leon Joas <[email protected]>',
    vars: [{
        name: 'command',
        title: 'Command to subscribe to a user:',
        type: 'string',
    }, {
        name: 'mes',
        title: 'The message that should be displayed: (%n = nickname)',
        type: 'multiline',
    }]
}, (_, { command, mes }) => {
    const event = require('event');
    const engine = require('engine');

    event.on('chat', function (ev) {
        if (ev.text.startsWith(command)) {
            let message = mes.replace('%n', ev.client.name());
                ev.client.setSubscription(true);
                ev.client.chat(message);
        }
    })
});
Ich gehe einfach mal davon aus, dass es sich um einen Fehler handelt und möchte dies nun melden. Den Modus kann ich im Panel des Bots in den normalen Modus umstellen und den Bot erstmal so nutzen. Sollte es sich hierbei um einen Fehler von mir handeln, bitte ich dies zu entschuldigen.

Liebe Grüße,
Leon Joas
 

irgendwr

semi-inactive™
Staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
Darauf hin wollte ich das Abo mit !sub starten, aber es passiert nichts. !mode 0 bzw. !mode 1 funktioniert auch nicht, genau so wenig wie !subchan. Auch nach neustarts etc. hat sich nichts verändert.
Ah ja die commands hab ich nicht implementiert, da sie in meiner Liste fehlen.
Aktuell noch fehlende Befehle:
Code:
!sub            Subscribe to bot (subscription transfer-mode only)
!unsub          Unsubscribe from bot (subscription transfer-mode only)
!mode <mode>    change transfer mode; 0 = to channel, 1 = subscription mode
!subchan        add subscription for channel (the user is currently in) (subscription transfer-mode only)
!unsubchan      remove subscription for channel (the user is currently in) (subscription transfer-mode only)
!playlist       starts playing back the playlist <playlistname>
Ich werde die fehlenden Befehle demnächst hinzufügen.

Dieses Script nutzt client.setSubscription(true). Nach dem Update wird mir jedoch der Fehler angezeigt, dass die Funktion setSubscription(true) nicht existiert.
Das kann ich auch so reproduzieren, liegt aber nicht an meinen Änderungen.
@flyth Hast du da etwas verändert?

client.setSubscription(true) geht nicht, aber ev.client.subscribe(true) geht dafür schon.
setSubscription sollte am besten ein Alias für subscribe sein.

Danke für die Rückmeldung @LeonJoas :)
 
Last edited:

LeonJoas

Donor
is awesome!
is uber awesome!
Guten Mittag,

ich habe einen weiteren kleinen Fehler gefunden, bzw. habe einen Optimierungsvorschalg zum !yt - Command und den dazugeörigen Commands, wie z.B. !qyt.

Oft wird vom TS-Client automatisch der - BBcode um einen Link gesetzt. Aus diesem Grund funktioniert der !yt Command meistens nicht.

Den Tag könnte man möglicherweise im Script filtern :p
@irgendwr @Multivitamin

sb_screen01.png
sb_screen02.png

Liebe Grüße,
Leon Joas
 

irgendwr

semi-inactive™
Staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
gnah, das kommt davon wenn ich kein TS nutze :p
Thanks again, kommt auch auf die ToDo-Liste
 

LeonJoas

Donor
is awesome!
is uber awesome!
Hey, ich habe noch einen Fehler gefunden:

JavaScript:
                var channel = ev.client.getAudioChannel();
                channel.subscribe(true);
Das Abbonieren von Channeln funktioniert nicht..

Fehlermeldung: error on callback func: Uncaught exception: TypeError: channel.subscribe is not a function at abocmd:25:44 channel.subscribe(true)); ^ Stack trace: TypeError: channel.subscribe is not a function at abocmd:25:45

Folgender Code funktioniert jedoch in meinem Script:

JavaScript:
                var channel = ev.client.getAudioChannel();
                ev.client.chat(channel.id());
Ich wollte eigendlich einen kleinen Ersatz für !subchan schaffen, aber das einzige Event, dass dazu dient, den Channel zu abonieren, funktioniert leider nicht :/

LG Leon Joas
 

irgendwr

semi-inactive™
Staff member
is awesome!
V.I.P.
is uber awesome!
Contributor
Insider
client.getChannels()[0] statt client.getAudioChannel() sollte gehen.
getAudioChannel() ist irgendwie komisch, müsste sich flyth angucken, ich kann da nicht viel zu sagen
 
Top