• TeamSpeak has reported a vulnerability in it's client that can potentially lead to RCE. A new version has been released that fixes it. So please update the client in your bot installation as soon as possible as well. Click here for more information.
  • If you need help or want to discuss things, you now can also join us on our Discord Server!

DE "default" - keyword in der Script Configuration

Lukas Westholt

Active Member
Contributor
Hi,

ich hab was seltsames gefunden, vielleicht ein bug, vielleicht verstehe ich es auch nicht. Mit dem "default"-Keyword kann man ja einen Standardwert für Input-Schaltflächen hinzufügen.
Ich habe in @Multivitamin "Jail"-Script "default: false" gefunden und dachte, dass ist quasi die Standardeinstellung des "default"-Attributes, also wenn es keinen Standardwert gibt.
JavaScript:
name: "serverGroup",
title: "Group ID of Servergroup which should be added to the jailed User",
type: "number",
default: false,
Also zum Beispiel hier, weil es kein Standwert für die Servergroup gibt. Doch wenn ich das mache:
JavaScript:
name: '...',
title: 'Möchtest du eine andere TTS-locale setzen, als in den Instanz-Einstellungen? Wenn ja, welche? - hier eintragen z.B: de. Wenn Nein, dann lasse dieses Feld frei, und es wird die TTS-locale aus der Instanzeinstellungen verwendet.',
type: 'string',
conditions: ...,
default: false,
3239

wird einfach "false" als String in die String-Input-Schaltfläche eingefügt. Ist das so vorgesehen? Kann man irgendwo nachlesen was "default" eingentlich wirklich macht, oder kann mir das jemand erklären? :)

LG, Lukas
EDIT: Und wieso funktioniert "default" nur im ersten Layer, also nicht mehr bei Unter-Konfigurationen ("type='array'")
 

Multivitamin

Well-Known Member
Tier III
V.I.P.
Contributor
Insider
an sich geht der default wert nicht zurück an das frontend, könnte mir nur vorstellen dass du in deinem script ein engine.saveConfig() oder ähnliches hast dass diese werte dann zurück zur db schreibt und dadurch dann angezeigt werden

es kann durchaus sein dass default werte für arrays nicht funktionieren
im prinzip ist nur eine funktion dazwischen, dass die "meta" und die aktuellen "config" werte bekommt und dann die mit default werten versetzte config wieder returnt

JavaScript:
function parseConfig({ vars }, config) {
  if (!Array.isArray(vars)) return config
  const keyNames = Object.values(vars).map(c => c.name)
  Object.keys(config).forEach(k => {
    if (keyNames.indexOf(k) === -1) delete config[k]
  })
  vars.forEach(c => {
    if (c.type === "strings" && typeof config[c.name] === "string") config[c.name] = [config[c.name]]
    if (c.default === undefined) return
    if ([undefined, ""].indexOf(config[c.name]) >= 0) config[c.name] = c.default
  })
  return config
}
 

Lukas Westholt

Active Member
Contributor
an sich geht der default wert nicht zurück an das frontend, könnte mir nur vorstellen dass du in deinem script ein engine.saveConfig() oder ähnliches hast dass diese werte dann zurück zur db schreibt und dadurch dann angezeigt werden
Das verstehe ich noch nicht so ganz, ja ich habe ein engine.saveConfig() drin, aber der default wert wird auch im frontend angezeigt, wenn das script noch gar nicht geladen ist, also wenn die Script Checkbox noch nicht angeklickt wurde.

Siehe hier:

KEIN DEFAULT-VALUE FÜR DEBUG:
3240
MIT DEFAULT-VALUE = "0" für DEBUG:
3241

Bei beiden Screenshots sind die Scripte nicht geladen und es sind auch noch keine Konfigurationen gespeichert (deswegen die "6" als Suffix hinter den Scriptdateinamen).
Ich verwende die aktuelle 1.0.0-beta.1 Version.

Das "false" in TTS-locale "string" wird aber tatsächlich nur nach engine.saveConfig() angezeigt, aber warum? Und für was steht default: false?
 
Last edited:

Lukas Westholt

Active Member
Contributor
das steht falls nichts in diesem feld angegeben wurde wird der wert false genutzt
Ok das verstehe ich jetzt. Ich bin an die Sache falsch ran gegangen, ich dachte das der default Wert zuerst ins Input Feld geladen wird, und dann wie gewohnt aus diesem im script verarbeitet wird, so habe ich wert false nicht verstanden, weil ich dachte, dass in nem Input Feld mit type="number" kein boolean geladen werden kann. Doch der default Wert ist quasi nur der Wert, der innerhalb des scriptes zurückgegeben wird, wenn sonst kein Wert eingegeben wurde. 💡
Dann verstehe ich aber nicht, wieso der default wert (machmal) ins frontend landet.
 

Multivitamin

Well-Known Member
Tier III
V.I.P.
Contributor
Insider
wie gesagt das kann passieren wenn du die aktuelle config via engines.saveConfig zurück speicherst, dann ist der auch im frontend
 

Multivitamin

Well-Known Member
Tier III
V.I.P.
Contributor
Insider
das leere feld verschwindet immer automatisch sobald du da was auswählst, das hat mit der default value eig nichts zu tun
 

Lukas Westholt

Active Member
Contributor
das leere feld verschwindet immer automatisch sobald du da was auswählst, das hat mit der default value eig nichts zu tun
Nur ich habe bei beiden nichts ausgewählt. Sinusbot lädt meiner Meinung nach (zumindest bei type="select") den default value automatisch (selbst bei deaktivierten Scripts) vor.
 
Top