如何使Slack bot使用node.js在同一频道上动态回复

时间:2019-03-25 08:11:05

标签: node.js slack-api

我想让我的slackbot应用程序在用户提到的频道上回答,而无需在代码中手动编写频道名称。

-example-
问题:我邀请我的漫游器进入频道#hello#hi。我在频道#hello提到了我的漫游器,写了@mybot hi there,但是它只回复了频道#hi我手动在代码中写下了代码。
我希望我的机器人自动找到消息来自哪个频道,并在用户提到的同一频道进行回复。
不像我写的bot.postMessageToChannel('everyone', `Chuck Norris: ${joke}`,params);代码

这是我使用的模块和代码的链接
https://github.com/mishk0/slack-bot-api

const SlackBot = require('slackbots');
const axios = require('axios');

const bot = new SlackBot({
    token : "",
    name : ""
});

// Start Handler
bot.on('start', () =>{
    const params = {
        icon_emoji: ':)'
    };

    bot.postMessageToChannel('everyone', 'Feeling tired??? Have some fun with @Joker!'
    , params);
});

// Error Handler
bot.on('error', (err) => console.log(err));

//Message Handler
bot.on('message', (data) => {
    if(data.type !== 'message'){
        return;
    }

    console.log(data);
    handleMessage(data.text);
});


// Responding to Data
function handleMessage(message){
    if(message.includes('chucknorris')){
        chuckJoke();
    }
    else if(message.includes(' yomama')){
        yoMamaJoke();
    }
    else if(message.includes(' random')){
        randomJoke();
    }
    else if(message.includes(' help')){
        runHelp();
    }
}


// Tell a Chuck Norris Joke
function chuckJoke(){
    axios.get('http://api.icndb.com/jokes/random/')
    .then(res =>{
        const joke = res.data.value.joke;

        const params = {
            icon_emoji: ':laughing:'
        };

        bot.postMessageToChannel('everyone', `Chuck Norris: ${joke}`,params);
    });
}

1 个答案:

答案 0 :(得分:1)

here中,您会在message上找到channel id的数据对象

然后 您可以使用已使用的API中的postMessage()

  

postMessage(id,text,params)(返回:Promise)-向频道发布消息|组|用户ID,

bot.on('message', (data) => {

    bot.postMessage(data.channel, 'Feeling tired??? Have some fun with @Joker!'
    , params);
    console.log(data);
    handleMessage(data.text);
});