以下是Botkit的安装和执行任意命令的示例
安装 Node.js v6.x
在Ubuntu 16.04标准仓库中提供了nodejs v4版本。然而,根据目前的LTS情况,选择了v6版本。
- Installing Node.js via package manager | Node.js
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
$ nodejs -v
v6.9.5
sudo npm update -g npm
botkit 的安装
mkdir ~/slackbot && cd ~/slackbot
npm init -y
npm install botkit --save
使用方法
export token=xxxxxxxxx
node index.js
- sh run.sh
sh df -h | grep G
sh ip a s | grep glo
sh sudo whoami
exit
- sudoは以下必要
user1 ALL=(ALL:ALL) NOPASSWD:ALL
执行任意命令
- 命令を受け付けるユーザーを制限しているので、
请修改变量 allow_user 的值为 “用户名”。
const Botkit = require('botkit');
if (!process.env.token) {
console.log('Error: Specify token in environment');
process.exit(1);
}
const controller = Botkit.slackbot({
debug: false
});
controller.spawn({
token: process.env.token
}).startRTM(function(err){
if (err) {
throw new Error(err);
}
});
// 実行可能ユーザーの制限
function is_allow_user(bot,message) {
var allow_user = "ユーザ名";
bot.api.users.info({user:message.user},function(error,response){
if(response.user.name != allow_user){
return false;
}
});
return true;
}
// コマンド実行
controller.hears('sh (.*)',['direct_message'],function(bot,message) {
if(!is_allow_user(bot,message)) {
bot.reply(message,'your access denied.');
return false;
}
var matches = message.text.match(/^sh (.*)/);
var command = matches[1];
const execSync = require('child_process').execSync;
try {
const result = execSync(command).toString();
bot.reply(message,result);
} catch(error) {
bot.reply(message,error.toString());
}
});
// exit で終了
controller.hears('exit',['direct_message'],function(bot,message) {
process.exit(0);
});