2017-02-24 5 views
0

Ich schreibe für Sinusbot (ein Bot für TeamSpeak) und möchte ein Skript schreiben, das prüft, ob ein Benutzer dem Kanal beigetreten ist.JavaScript setTimeout Sinusbot

Problem hier: Ich möchte, dass das Skript etwas tun, nachdem der Benutzer 10 Sekunden in diesem Kanal ist!

Ich versuchte es mit setTimeout, aber es hat nicht funktioniert.

Was habe ich falsch gemacht?

if (ev.newChannel == channel_10m){ 
     //if someone joins channel_10m 
     //wait 10 seconds 
     setTimeout(function(){ 
      if (ev.newChannel == channel_10m){ 
       //check if user is in channel_10m 
       //do somethink 
      } 
     }, 10000); 
    } 

Sinusbot API: https://www.sinusbot.com/scripts/scripting3.html

Edit:

var timeout; 

sinusbot.on('clientMove', function(ev) { 
    if (ev.newChannel == channel_10m) { 
     timeout = setTimeout(() => { 
      sinusbot.chatPrivate(ev.clientId, msg1); 
     }, 10000); 
    } 
} 

sinusbot.on('clientMove', function(ev) { 
    if (timeout) { 
     clearTimeout(timeout); 
     sinusbot.chatPrivate(ev.clientId, msg2); 
    } 
} 

EDIT2:

ich es bekommen habe:

 if (ev.newChannel == achannel_entrance){ 
     setTimeout(function(){ 
      if ((sinusbot.getChannel(1267)['clients'][0]['id'] && ev.newChannel) == (sinusbot.getChannel(1267)['clients'][0]['id'] && achannel_entrance)){ 
       sinusbot.chatPrivate(ev.clientId, msg0); 
       sinusbot.move(ev.clientId, bchannel_support); 
      } 
     }, 300000); 
    } 
+0

Ihr Code sieht gut aus, sollte die setTimeout funktionieren. Schau in der JavaScript-Konsole nach Fehlern. Verwenden Sie den Javascript-Debugger, um festzustellen, ob setTimeout in Ihrem Programm erreicht ist. –

+0

Es gibt keinen "Fehler". Ich brauche nur etwas, das überprüft, ob der Benutzer nach 10 Sekunden immer noch in diesem Kanal ist. – ZarneXxX

+0

Sind Sie sicher, dass Ihr Programm den if-Block eingibt? Ist 'ev.newChannel == channel_10m 'wahr? – josemigallas

Antwort

1

Wenn Ihr Problem ist, dass Sie immer noch, wenn die Benutzer überprüfen wollen conected Sie so etwas wie versuchen:

var timeout; 

sinusbot.on("connect", ev => { 
    if (ev.newChannel == channel_10m) { 
     timeout = setTimeout(() => { 
      doSomething(); 
     }, 10000); 
    } 
} 

sinusbot.on("disconnect", ev => { 
    if (timeout) { 
     clearTimeout(timeout); 
    } 
} 

EDIT: Ich denke, was Sie jetzt tun, um die Timeout Cancelling was Client in oder out bewegt. Sie sollten verschiedene Kunden verfolgen, lassen Sie uns versuchen dies:

// Dictionary for <clientId, timeout> 
const timeouts = []; 

// Event triggers when a client goes online or offline 
// If client disconnects channel will be 0 
sinusbot.on('clientMove', function(ev) { 
    const clientId = ev.clientId; 

    if (ev.newChannel == channel_10m) { 
     timeouts[clientId] = setTimeout(() => { 
      sinusbot.chatPrivate(clientId, msg1); 
     }, 10000); 

    } else if (ev.newChannel == 0 && timeouts[clientId]) { 
     clearTimeout(timeouts[clientId]); 
     sinusbot.chatPrivate(clientId, msg2); 
    } 
} 
+0

Ich habe es getan, ich habe es einfach auf meinem Post eingefügt :) – ZarneXxX

+0

@ZarneXxX hat meine Lösung Ihr Problem gelöst? Sie sollten es dann als gelöst markieren oder Sie sollten sich selbst hinzufügen und antworten und es markieren, so dass jeder die Frage geschlossen sieht :) – josemigallas