如果希望在Bot登入但連接到頻道之前可以用AUTHENTICATED。
slack.on("authenticated",(connectData)=>{
console.log(`Logged in as ${connectData.self.name} of team ${connectData.team.name}, but not yet connected to a channel`);
});
當等你將會看到以下的訊息。
Logged in as hellobot of team Deikhoong, but not yet connected to a channel
Bot要接收使用者的訊息可以使用MESSAGE EVENT. 只要每次將訊息發送到Bot所在的頻道或向Bot發送Direct Message時,這個Event都會被觸發。當我們發送"Hi Bot"或"Hello Bot",Bot會回覆給發送者的頻道。
slack.on('message', (message) => {
(async() =>{
let user= {"user":message.user};
let userInfo = await getUserInfo(user);
console.log(userInfo.user.is_bot);
if (userInfo && userInfo.user.is_bot) {
return;
}
let channel = message.channel;
if (message.text) {
console.log(`Incoming message: ${message.text}`);
let msg = message.text.toLowerCase();
if (/(hello|hi) bot/g.test(msg)) {
slack.sendMessage(`Hello to you too, ${userInfo.user.name}!`,channel);
}
}
})();
});
結果如下

傳送Direct Message
Direct Message (DM) 是一個僅在兩個用戶之間運行的頻道。根據設計,它不能有多於或少於兩個用戶,並且用於私人通信。 發送DM與向頻道發送消息非常相似。
在index.js新增getDM() function和片段程式
slack.on('message', (message) => {
(async() =>{
let user= {"user":message.user};
let userInfo = await getUserInfo(user);
let dmInfo = await getDM(user);
if (userInfo && userInfo.user.is_bot) {
return;
}
let channel = message.channel;
if (message.text) {
console.log(`Incoming message: ${message.text}`);
let msg = message.text.toLowerCase();
if(/uptime/g.test(msg))
{
let uptime = process.uptime();
let minutes = parseInt(uptime / 60, 10),
hours = parseInt(minutes / 60, 10),
seconds = parseInt(uptime % 60, 10);
slack.sendMessage(`I have been running for: ${hours} hours,${minutes} minutes and ${seconds} seconds.`, dmInfo.channel.id);
}else if (/(hello|hi) bot/g.test(msg)) {
slack.sendMessage(`Hello to you too, ${userInfo.user.name}!`,channel);
}
}
})();
});
function getDM(user)
{
return web.im.open(user).then((resp)=>{
return resp;
}).catch((error) => {console.log(error);});
}
限制訪問
偶爾,我們會希望Bot某些指令只允許Admin才能使用。我們使用之前的例子uptime 指令只能讓Admin才能使用,其他user使用將會回傳warning 訊息。只要透過userInfo判斷該user是否admin即可。
if(/uptime/g.test(msg)){
if (!userInfo.user.is_admin) {
slack.sendMessage(`Sorry ${userInfo.user.name}, but that functionality is only for admins.`, dmInfo.channel.id);
return;
}
let uptime = process.uptime();
let minutes = parseInt(uptime / 60, 10),
hours = parseInt(minutes / 60, 10),
seconds = parseInt(uptime % 60, 10);
slack.sendMessage(`I have been running for: ${hours} hours,${minutes} minutes and ${seconds} seconds.`, dmInfo.channel.id);
}


沒有留言:
張貼留言