So wie der Code da steht, wird dieser, wie du auch selbst gesagt hast, "[...] nur einmal durchgegangen [...]" und belegt in diesem Fall die Variable randomJoke mit einem Wert. Dieser Wert wird auch nicht mehr geändert und somit wird dir für den Befehl "!witz" der jedesmal ausgeführt wird, wenn das Chat Event aufgerufen wird, dieser ausgegeben.
Doch was wird da überhaupt jedesmal ausgeführt bei dem Chat Event? Wenn du dir das genauer anschaust bemerkst du, dass dem Event eine anonyme Funktion übergeben wurde. In diesem Fall das function(channel, userstate, message, self) {...}.
Anderst könnte der Code so aussehen:
function witz(channel, userstate, message, self) {
if(message == "!witz"){
client.say("TheOWord", "@"+userstate.username+" möchte einen sehr schlechten Witz hören, hier ist er: "+randomJoke);
}
}
client.onclient.on('chat', witz(channel, userstate, message, self));
Die anonyme Funktion verwendet man allerdings eher in so einem Fall, da diese Funktion nur dort gebraucht wird und sonst nirgendwo. Was kannst du dir also jetzt daraus mitnehmen?
Du schreibst dir einfach eine Funktion, die den zufälligen Witz ausgibt und jedesmal aufgerufen wird, wenn dieser benötigt wird.
Dein Code sollte dann so aussehen:
function randomJoke(){
var badjokes = Array(
witz1,
witz2,
witz3
);
return badjokes[Math.floor(Math.random()* badjokes.length)];
}
client.on('chat', function(channel, userstate, message, self) {
if(message == "!witz"){
client.say("TheOWord", "@"+userstate.username+" möchte einen sehr schlechten Witz hören, hier ist er: "+randomJoke());
}
});
Alles anzeigen
Somit wird der Teil in der Funktion randomJoke() jedesmal ausgeführt, sobald dieser aufgerufen wird und gibt dir jedesmal zufällig einen Witz zurück.