如果希望在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); }
沒有留言:
張貼留言