【问题标题】:Slack Bot Replying to his own message in Node jsSlack Bot 在 Node js 中回复自己的消息
【发布时间】:2017-04-06 23:51:20
【问题描述】:

我正在尝试在 nodejs 中创建一个 slack 机器人,它会根据用户的输入回复用户。但到目前为止,该机器人一直在回复他自己的消息

这是我的机器人的代码

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' }

那么为什么我的验证无法检查消息是否是从机器人本身发送的?

感谢您的宝贵时间

【问题讨论】:

  • 是什么让您认为验证失败?
  • @MathewJibin 因为它一直在我的普通聊天室中​​无限循环地发布 Yooo
  • 您确定data.username 和data.subtype 符合预期吗?在消息中发送它们或在控制台中打印。
  • 那么,当您说“用于数据打印的控制台日志”时,是指data 的三个单独的控制台日志吗?因为如果是这样的话,其中两个datas 甚至没有username 或subtype,使它们未定义和undefined != "BotHelp",因此您的条件检查将通过并发送消息。如果是这种情况,on('message') 可能不仅适用于实际的聊天消息,而且通常适用于通过 slack 传递给机器人的任何类型的数据。

标签: node.js slack-api slack


【解决方案1】:

我遇到了同样的问题。 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 id 将以 D 开头。对于私人频道,频道 id 以 G

开头

希望这会有所帮助。我知道这里还有很多事情要做,但这是基本的。你可以在此基础上成长。我知道我会尝试:D

【讨论】:

    【解决方案2】:

    我知道这个问题已经回答了,但我想添加我的答案,因为 slack api 已经做了一些更改。

     if (data.type !== "message" || data.subtype === 'bot_message' ){
        return;
        }
        else{
            bot.postMessageToChannel('general', 'Yoooo');
        }
    

    【讨论】:

      【解决方案3】:

      如果我是你,我会检查参数是否真的是 user_name 和 subtype 。如果它是正确的,我会尝试检查即将到来的对象的类型(也许有来自 Slack api 的对象的强制转换)。我做了一个与你非常相似的small project,使用相同的库 slackbots 以及我自己构建的库,nodejslack(https://github.com/marcogbarcellos/nodejslack) 但没有遇到这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 2018-06-30
        • 1970-01-01
        • 2021-10-31
        • 2017-08-07
        • 2019-06-21
        相关资源
        最近更新 更多