做一个可以在slack匿名发言的机器人

运行环境

  • Ubuntu16.04
  • node.js

完成后的示意图

添加Bot

首先点击下面的link在slack里添加bot

https://my.slack.com/services/new/bot

这里用了anonymous的bot名字,也可以输入其他的,然后点击「Add bot integration」按钮。

然后记下画面上显示的 「API Token」

获取频道ID

https://slack.com/api/conversations.list?token=刚刚记录下的API_Token

还可以取得用户ID和非公开频道ID


安装Botkit

安装并使用Slack官方文档上的Bot框架Botkit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//创建路径
$ cd ~
$ mkdir slack_anonymous_bot
$ cd slack_anonymous_bot

//botkit clone
$ git clone https://github.com/howdyai/botkit.git
$ cd botkit

//branch 移动
$ git checkout origin/legacy

//安装
$ npm install

//如果安装失败・・・
$ npm audit fix
$ npm install

如果生成了~/botkit/example/slack_bot.js就说明成功了


编码

1
2
3
4
5
6
// 移动到你生成的路径
$ cd ~
$ cd slack_anonymous_bot/botkit/

//制作anonymous_bot.js
$ touch anonymous_bot.js

在anonymous_bot.js里粘贴下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var Botkit = require("./lib/Botkit.js"); // 注意path
var os = require("os");

var controller = Botkit.slackbot({
debug: true,
});

var bot = controller.spawn({
token: "刚刚记录下的API_TOKEN"
}).startRTM();

controller.on("direct_message", (bot, message) => {
var now = new Date(); //获取时间
var user_name = "名無しさん: "+ now.getFullYear()+"/"+(now.getMonth()+1)+"/"+now.getDate()+"/ "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds();

bot.reply(message, "匿名で投稿しました.");

bot.startConversation({ channel : "刚刚取得的频道ID" }, (err, convo) => {
var send_message = {
type: "message",
channel: "刚刚取得的频道ID",
text: message.text,
username: user_name,
thread_ts: null,
reply_broadcast: null,
parse: null,
link_names: null,
attachments: null,
unfurl_links: null,
unfurl_media: null,
icon_url: null,
icon_emoji: ":robot_face:",
as_user: true
}
convo.say(send_message);
});
});

运行

1
2
3
4
5
6
7
8
//debug环境
$ cd ~/slack_anonymous_bot/botkit
$ node anonymous_bot.js

//通常一般环境
$ cd ~/slack_anonymous_bot/botkit
$ forever start slack_bot.js
$ forever stop slack_bot.js // 停止bot

运行结果

如果bot运行成功了,bot前的灯会变绿色。

投稿时候首先会给你回信

然后你就可以看到匿名bot在你登陆的频道里代表你发言了