2016-11-23 8 views
1

Я пытаюсь сделать слабый бот в nodejs, который отвечает пользователю на основе их ввода. Но Насколько теперь бот продолжает отвечать на своих собственных сообщенийSlack Bot Ответ на его собственное сообщение в узле 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 дает уникальный идентификатор, вы можете получить это, console.log(data) и найти user идентификатор.

Кроме того, если вы хотите указать, какое сообщение вы хотите прослушать, скажите прямое сообщение. channel id внутри data начнется с D. Для частных каналов идентификатор канала начинается с G

Надеюсь, это поможет. Я знаю, что здесь есть гораздо больше, но это основное. И вы можете расти на этом. Я знаю, что буду пытаться: D

0

Если бы я тебя, я бы проверить, если параметры действительно user_name и подтип. Если это правильно, я попытаюсь проверить тип объектов, которые идут (возможно, есть листинг в объектах, идущих из Slack api). Я сделал small project очень похожим на ваш, используя те же библиотеки slackbots, а также библиотеку, которую я построил, nodejslack (https://github.com/marcogbarcellos/nodejslack), но не получил эту проблему.