Slack Bot 在 Node js 中回复自己的消息
Slack Bot Replying to his own message in Node js
我正在尝试在 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' }
那么,为什么我的验证无法检查消息是否是从机器人本身发送的?
感谢您的宝贵时间
如果我是你,我会检查参数是否真的是 user_name 和 subtype 。如果它是正确的,我会尝试检查即将到来的对象的类型(也许有一个来自 Slack api 的对象)。我已经完成 small project very similar to yours, using the same library slackbots and also a library I built myself,nodejslack(https://github.com/marcogbarcellos/nodejslack) 但没有遇到这个问题。
我遇到了同样的问题。 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
我知道问题已经得到解答,但我想补充一下我的答案,因为 slack api 已经做了一些更改。
if (data.type !== "message" || data.subtype === 'bot_message' ){
return;
}
else{
bot.postMessageToChannel('general', 'Yoooo');
}
我正在尝试在 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' }
那么,为什么我的验证无法检查消息是否是从机器人本身发送的?
感谢您的宝贵时间
如果我是你,我会检查参数是否真的是 user_name 和 subtype 。如果它是正确的,我会尝试检查即将到来的对象的类型(也许有一个来自 Slack api 的对象)。我已经完成 small project very similar to yours, using the same library slackbots and also a library I built myself,nodejslack(https://github.com/marcogbarcellos/nodejslack) 但没有遇到这个问题。
我遇到了同样的问题。 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
我知道问题已经得到解答,但我想补充一下我的答案,因为 slack api 已经做了一些更改。
if (data.type !== "message" || data.subtype === 'bot_message' ){
return;
}
else{
bot.postMessageToChannel('general', 'Yoooo');
}