2017-02-24 76 views
0

我正在爲Sinusbot(一個Bot for TeamSpeak)編寫腳本,並且想編寫一個腳本來檢查用戶是否已加入該頻道。JavaScript setTimeout Sinusbot

問題在這裏:我希望腳本在用戶之後執行某些操作是在該通道中10秒鐘!

我試過setTimeout但它沒有奏效。

我做錯了什麼?

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

編輯:

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:

我懂了:

 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

你的代碼看起來不錯,setTimeout應該工作。看看javascript控制檯的錯誤。使用javascript調試器查看程序中是否達到了setTimeout。 –

+0

沒有「錯誤」。我只是需要一些思考來檢查用戶是否仍然在該頻道中10秒後。 – ZarneXxX

+0

你確定你的程序正在進入if塊嗎? 'ev.newChannel == channel_10m'是真的嗎? – josemigallas

回答

1

如果你的問題是要檢查,如果用戶仍conected你可以嘗試這樣的:

var timeout; 

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

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

編輯: 我覺得你在做什麼,現在取消任何客戶端或縮小移動超時。你應該跟蹤不同的客戶,讓我們試試這個:

// 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

我做到了,我只是把它貼在我的帖子:) – ZarneXxX

+0

@ZarneXxX是否解決了您的問題?您應該將其標記爲已解決,或者您應該添加自己並回答並標記它,以便大家看到問題已關閉:) – josemigallas