2016-11-23 75 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),但没有得到这个问题。