動かざることバグの如し

近づきたいよ 君の理想に

【Slack】botkitを使ってSlack Commandを作成する

そもそもSlack Commandってなんだ

/から始まるアレ

/remind me コンビニに寄る in 3 hours

上のはリマインダー よく使う

つくるもの

今回はこんな便利な機能であるスラッシュコマンドをbotkit自作しようと言う話

面倒なので /hello って打ったらこんにちは!って返すbotを作る

用意するもの

  • botAPIキー
    • xoxb-から始まるやつ これがないと始まらない
  • HTTPサーバー
    • Slack CommandはHTTPサーバー経由が必須とのこと
    • 他Slackチームでも使ってもらうならhttps必須になるっぽい
  • botkitが動かせる環境

Slack側の設定

まずhttps://my.slack.com/services/new/botにアクセスしてSlack Commandを作成する

  • コマンド:任意 今回は/hello
  • URL :http://HOST_NAME/slack/receive httpsである必要はない
  • Autocomplete help textを設定しておくと吉

インストール

mkdir slack-hello
cd slack-hello
npm init
npm install -S botkit

適当に bot.jsでも作って以下

var Botkit = require('botkit');

if (!process.env.token) {
  console.log('Error: Required Token');
  process.exit(1);
}

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

var bot = controller.spawn({
  token: process.env.token
}).startRTM();

// Webサーバー(express)起動
controller.setupWebserver(process.env.port, function(err, webserver) {
  controller.createWebhookEndpoints(controller.webserver);
});

controller.on('slash_command', function(bot, message) {
  if ('/hello' === message.command) {
    bot.replyPublic(message, 'Hello!');
  }
});

起動

token=**** port=3000 node bot.js

これで挨拶を返してくれるはずである

蛇足

返信の方法は2種類ある

だれにでも見られるreplyPublic

bot.replyPublic(message, 'Hello!');

コマンドを実行した人にしか見れないreplyPrivate

bot.replyPrivate(message, 'Hello!');

Slackのbotを30秒で作成する

環境

mPro:botkit_test thr3a$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.11.5
BuildVersion:   15F34
mPro:botkit_test thr3a$ npm -v
3.8.3
mPro:botkit_test thr3a$ node -v
v5.10.0

APIキーの取得

ココからキーを取得して控えておく

インストール

npm install -S botkit
var Botkit = require('botkit');

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

# プログラム

controller.spawn({
    token: 'API KEY'
}).startRTM()

controller.hears('ping',['direct_message','direct_mention','mention'],function(bot,message) {
    bot.reply(message,'pong');
});

起動

mPro:botkit_test thr3a$ node bot.js 
info: ** No persistent storage method specified! Data may be lost when process shuts down.
info: ** Setting up custom handlers for processing Slack messages
info: ** API CALL: https://slack.com/api/rtm.start
notice: ** BOT ID: debug ...attempting to connect to RTM!
notice: RTM websocket opened

Botの開発用フレームワークが多すぎて死にそうなのでまとめた

いやいや、人工知能元年とはいえ乱立しすぎでしょ

Hubot

https://hubot.github.com/hubot.github.com

  • Github社が開発
  • NodeJSで動く
  • 一般的にYeomanでひな壇作ってCoffeeScriptで書く

Botkit

github.com

Lita

www.lita.io

Ubuntu 16.04ではPHP5.6をインストールすることは出来ない

発端

さぁ心機一転、Ubuntu16.04でPHPインストールしようとした。まぁ7.xも悪くないけど今回は安定志向ということでPHP5.6をインストールすることに

sudo apt show php

結果

user@ubuntu:~$ sudo apt show php
Package: php
Version: 1:7.0+42+deb.sury.org~xenial+1
Priority: optional
Section: php
Source: php-defaults (42+deb.sury.org~xenial+1)
Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Installed-Size: 11.3 kB
Depends: php7.0
Download-Size: 4,588 B
APT-Sources: http://ppa.launchpad.net/ondrej/php/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).

N: There is 1 additional record. Please use the '-a' switch to see it

ん??????????????????デフォルトで7だと?

16.04のデフォルトはPHP 7

なんかそうっぽい まだ安定版じゃないって開発者自身が言ってたくせに何やってるんだ感

5.6をインストール

いつものPPA追加するしかない

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php5.6
user@ubuntu:~$ sudo apt show php5.6
Package: php5.6
Version: 5.6.22-4+deb.sury.org~xenial+1
Priority: optional
Section: php
Maintainer: Debian PHP Maintainers <pkg-php-maint@lists.alioth.debian.org>
Installed-Size: 278 kB
Provides: php
Depends: libapache2-mod-php5.6 | php5.6-fpm | php5.6-cgi, php5.6-common
Download-Size: 253 kB
APT-Manual-Installed: yes
APT-Sources: http://ppa.launchpad.net/ondrej/php/ubuntu xenial/main amd64 Packages
Description: server-side, HTML-embedded scripting language (metapackage)
 This package is a metapackage that, when installed, guarantees that you
 have at least one of the four server-side versions of the PHP interpreter
 installed. Removing this package won't remove PHP from your system, however
 it may remove other packages that depend on this one.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.

やっためう!

これだけでは終わらないPHP5.6の罠

Apache2で使うときは

sudo apt install libapache2-mod-php5.6 libapache2-mpm-itk

した後に sudo a2enmod php5.6 が必要