2016-11-23 70 views
1

我正在嘗試在nodejs中創建一個基於其輸入回覆用戶的鬆散bot。但就目前機器人不斷回覆自己的郵件Slack Bot在Node js中回覆自己的消息

這是我的機器人

let Bot = require('slackbots'); 

// create a bot 
let settings = { 
    token: 'xoxb-10584202949', 
name: 'BotHelp'}; 

let bot = new Bot(settings); 
bot.on('start', function() { 

    bot.postMessageToChannel('general', 'At your service'); 

    }); 

bot.on('message',function (data) { 
    console.log(data); 
    if (data.username != "BotHelp" && data.subtype != 'bot_message'){ 
    bot.postMessageToChannel('general', 'Yoooo'); 
    } 
}); 

控制檯日誌中的數據打印

{ type: 'hello' } 
{ text: 'At your service', 
    username: 'BotHelp', 
    bot_id: 'B336WGVSM', 
    type: 'message', 
    subtype: 'bot_message', 
    team: 'T2ZAW44P3', 
    user_team: 'T2ZAW44P3', 
    channel: 'C303W2D4M', 
    ts: '1479877794.000266' } 
{ type: 'presence_change', 
    presence: 'active', 
    user: 'U33QS0VEF' } 

那麼爲什麼代碼我的驗證無法檢查消息是否已從機器人本身發送?

謝謝您的時間

+0

什麼讓你覺得驗證失敗? –

+0

@MathewJibin,因爲它在我的一般聊天室中不斷髮帖Yooo在無限循環中 – Alexander

+0

你確定'data.username'和'data.subtype'是否如預期的那樣?發送消息中發送它們或在控制檯中打印它們。 –

回答

2

我有同樣的問題。消息事件slackbots觸發每個事件,即user_typing,message_marked,desktop_notification。所有活動都可以在here找到。 我做現在什麼來確保我的機器人接收自己的後未發送的信息是:

bot.on('message',function (data) { 
    if (data.user != "Uxxxxxx" && data.message === 'message'){ 
     bot.postMessageToChannel('general', 'Yoooo'); 
    } 

的data.user賦予一個唯一的ID,您可以通過console.log(data)得到這個,找到你的user ID。

此外,如果您想指定您想要聽的消息,請說直接消息。 channel內部編號data將以D開頭。對於私人頻道,頻道ID以開頭G

希望這會有所幫助。我知道這裏還有很多事情要做,但這是最基本的。你可以在這個上成長。我知道我會試圖:D

0

如果我是你,我會檢查,如果參數是真的USER_NAME亞型。如果它是正確的,我會嘗試檢查即將到來的對象的類型(也許在來自Slack API的對象中有一個強制轉換)。我做了一個small project非常類似於你的,使用相同的圖書館slackbots和我自己建立的庫nodejslack(https://github.com/marcogbarcellos/nodejslack),但沒有得到這個問題。