0

hubotでslackに匿名投稿する

scripts/ の下に置く
anonymous-post.coffee

hubot anon 帰りたい
とか
hubot anon @shokai 帰れ
とか
hubot anon #general はい
とかで投稿できる




# Description:
# hubot anonymous post
#
# Commands:
# hubot anon MESSAGE
# hubot anon #general MESSAGE
#
# Author:
# @shokai

config =
to: '#general'

module.exports = (robot) ->

robot.respond /anon (.+)$/i, (msg) ->
from = msg.message.user.name
args = msg.match[1].trim().split(/\s+/)
if /[#@][a-zA-Z0-9_\-]+/.test args[0]
to = args.shift()
else
to = config.to
text = args.join(' ')
robot.send {room: to}, text
msg.send "@#{from} #{to} にこっそり「#{text}」って言っておきました"
return

robot.respond /anon$/i, (msg) ->
msg.send """
hubot anon MESSAGE
hubot anon [to] MESSAGE
hubot anon #general MESSAGE
"""
return

0

HubotでWiKiの更新通知

何度もメールをやりとりして結果をwiki等にまとめるのではなく、wikiに書いて適当に通知が飛ぶようになっていると便利だと思う。
実際便利なので研究室ではMLにメール月2,3通しか来てない。情報は全部ちゃんとしたフォーマットのストック情報になってて、それが適当にフロー情報として切りだされて流れてくるという感じで、自動的でよい。


gyazzをnodeで書き直してて、ページの更新がJSONのwebhookで通知されるようになった。「.通知」というページを作ってURLを改行区切りで書いておくとwebhookしてくる。

webhookをhubotで受信して、redisに貯めて前回とのdiffをslackに流すようにした。あまり同じページをまとめて通知しても細かすぎるので、webhookを受けてから1分間はデバウンシングする
gyazz-notify.coffee

# Description:
# Gyazz更新通知
#
# Dependencies:
# "diff": "*"
# "debug": "*"
#
# Author:
# @shokai

Diff = require 'diff'
debug = require('debug')('hubot:gyazz-notify')

config =
room: "#news"
header: ":star:"
interval: 60000

timeout_cids = {}

module.exports = (robot) ->

robot.router.post '/hubot/gyazz-webhook', (req, res) ->
url = req.body.url
wiki = req.body.wiki
title = req.body.title
text = req.body.text
unless wiki? and title? and text? and url?
res.status(400).send 'bad request'
return

res.send 'ok'

debug key = "#{url}/#{wiki}/#{title}"

clearTimeout timeout_cids[key]
timeout_cids[key] = setTimeout ->
notify url, wiki, title, text
, config.interval


notify = (url, wiki, title, text) ->
url = "#{url}/#{wiki}/#{title}".replace(' ', '%20')
cache = robot.brain.get url
robot.brain.set url, text

unless cache?.length > 0
debug notify_text = "#{config.header} 《新規》#{url} 《#{wiki}》\n#{text}"
robot.send {room: config.room}, notify_text
else
addeds = []
for block in Diff.diffLines cache, text
if block.added
addeds.push block.value.trim()
if addeds.length < 1
return
debug notify_text = "#{config.header} 《更新》#{url} 《#{wiki}》\n#{addeds.join('\n')}"
robot.send {room: config.room}, notify_text

1

Hubotで読めるRSSリーダー作った

チャットのチャンネル(部屋)毎にRSSを登録して、RSSリーダーにできるhubot scriptを作った。

https://github.com/shokai/hubot-rss-reader

去年nikezonoが「人の読んでるRSS読みたい、むしろRSSのリスト作ってお前コレ読めって薦めたり、他人にRSSの購読を追加してもらったりしたい」というような事を言ってた気がしたので、最近hubotが楽しいし作った。


こんなの


チャットはSlack.comで、HubotはHerokuに置いてつないでる。

「hubot rss add (URL)」とコマンドを発言すると部屋にRSSを追加できるようになっていて、チャットルームごとにRSSが購読できる。

Slackではプロジェクト毎に部屋を作ってGithubやTravisの通知を流すように運用している。

  • そのプロジェクトに関連あるリポジトリのRSSを流す
  • 研究室全員のgithubのfeedを流す部屋を作っておいて、個人活動を共有する
  • 技術系のblogを誰でも何でも登録していいよという部屋を作っておく

とかすると便利だと思う。若者のRSS離れを抑止できる。


インストール


https://www.npmjs.org/package/hubot-rss-reader

npmでhubotにインストールして

% npm i hubot-rss-reader --save

external-scripts.json に
["hubot-rss-reader"]
を追加すれば使える。


環境変数で色々設定できるが、しなくても適当に動く。
export HUBOT_RSS_INTERVAL=600      # 600秒ごとに更新チェック
export HUBOT_RSS_HEADER=:sushi: # RSS Header Emoji (デフォルトで寿司)
export DEBUG=hubot-rss-reader # debug printを有効にする


なおチャットルーム毎のfeedはredisに保存するようになっている。
hubotはデフォルトでredisを使うので、ふつうにredis-server起動しておけば特に必要ない。
herokuなら
% heroku addons:add redistogo:nano
でok


コマンド


追加と削除とリストしか今のところ無い。

hubot rss add https://github.com/shokai.atom
hubot delete add https://github.com/shokai.atom
hubot rss list

0

hubotでSFCのバス時刻表を見る

ご利用下さい

主に神奈川中央交通とSFC用だけど、時刻表のURLを追加すれば路線も追加できる

https://www.npmjs.org/package/hubot-sfc-bus
https://github.com/shokai/hubot-bus-sfc

インストール

% npm install hubot-sfc-bus --save


external-scripts.jsonに
["hubot-sfc-bus"]
を追加


hubot バス 湘南台
hubot バス 辻堂 土曜 12時
のようにして時刻表が見れる


細かい時刻や曜日の指定もできる

0

意志薄弱者のためのhubot choice

何も選べないので作った

https://gist.github.com/shokai/3b14c8fc990d90c09be1


1つ選んでくれる