0

UX基金

ユーエックスの話はもう聞きたくないので1000円を数えることにした



hubot script UX1000円

module.exports = (robot) ->

reply = (msg) ->

who = msg.message.user.name
count = (robot.brain.get(who) or 0) + 1
robot.brain.set who, count
msg.send "@#{who} UX#{count*1000}円"

robot.hear /ux/i, reply

register_censor = (word) ->
robot.hear new RegExp( word.split('').join('.*'), 'i' ), reply

register_censor 'ユザエクスペリエンス'
register_censor 'ユザ体験'
register_censor 'ユエックス'
register_censor 'userexperience'

適当なマッチングはtomblooのタグ補完を参考にした。

linuxって発言できなくなってしまった

0

hubot-gohanに説明と画像を付けた

hubotがごはんを占ってくれる。

https://www.npmjs.org/package/hubot-gohan

0

URLエンコードされた日本語URLをデコードするhubot script

URL 日本語でおk


たまにこういう日本語URLがチャットに貼られて、URLエンコードされていて何がなんだかわからない事があったので対策した。
hubotが日本語に戻してくれる。

そもそもブラウザのURL欄からコピーしたら自動的にエンコードしてくれるのは何でなんだろう、この自動変換があるので日本語ドメイン名とか取る気にならない。



decode-encoded-url.coffee


# Description:
# encodeされたURLを日本語に戻す
#
# Author:
# @shokai

module.exports = (robot) ->

robot.hear /(https?:\/\/[^ ]+)/i, (msg) ->

who = msg.message.user.name
url = msg.match[1]
url_decoded = decodeURI url
return if url is url_decoded
url = url_decoded.replace /[ <>]/g, (c) -> encodeURI c
msg.send "@#{who} 日本語でおk\n#{url}"

スペースと、<と>があるとSlackのURLの自動リンクが付かないのでデコードした後に再コードしてる。

0

hubot-rss-readerにRSSを探す機能を付けた

SlackなどのチャットサービスをRSSリーダーにできるhubotスクリプトであるhubot-rss-readerにRSSを探す機能を付けた

v0.5.3になった。

えらい人のはてブとかを読み込んだチャンネルをSlackにいろいろ作って、それをみんなでウォッチしたりできる。


RSSを探す

RSSではない、ふつうのwebページのURLを追加しようとするとRSSを探すようになった。
nikezono君のfind-rssを使ったら簡単だった。



callbackを全部Promiseで書きなおした


ちゃんとテスト書いてあれば、mochaならcatchを自動的にやってくれるしcallbackからpromiseへの書き直しすんなりできると思う。hubot-rss-readerの他にも1つ全体を書きなおしたのがあるけど特にハマる所は無かった。

bluebirdを使った。
bluebirdはpromisifyAllにオブジェクトを渡すとそれが持っているメソッドを全部Promise化してくれるし、1つの関数だけ提供しているfind-rssなんかもpromisifyでPromise化して使える。

FindRSS = Promise.promisify require 'find-rss'

これが
  robot.respond /rss\s+(add|register)\s+(https?:\/\/[^\s]+)/im, (msg) ->
url = msg.match[2].trim()
last_state_is_error[url] = false
debug "add #{url}"
checker.addFeed msg.message.room, url, (err, res) ->
if err
msg.send err
return
msg.send res
checker.fetch url, (err, entries) ->
unless err
for entry in entries
msg.send entry.toString()
return
msg.send err
if err.message is 'Not a feed'
checker.deleteFeed msg.message.room, url
RSSFinder url, (err, feeds) ->
return if err or feeds?.length < 1
msg.send _.flatten([
"found some Feeds from #{url}"
feeds.map (i) -> " * #{i.url}"
]).join '\n'
return


こう書けてすっきりした
  robot.respond /rss\s+(add|register)\s+(https?:\/\/[^\s]+)/im, (msg) ->
url = msg.match[2].trim()
last_state_is_error[url] = false
debug "add #{url}"
checker.addFeed msg.message.room, url
.then (res) ->
new Promise (resolve) ->
msg.send res
resolve url
.then (url) ->
checker.fetch {url: url, room: msg.message.room}
.then (entries) ->
for entry in entries
msg.send entry.toString()
, (err) ->
msg.send "[ERROR] #{err}"
return if err.message isnt 'Not a feed'
checker.deleteFeed msg.message.room, url
.then ->
FindRSS url
.then (feeds) ->
return if feeds?.length < 1
msg.send _.flatten([
"found some Feeds from #{url}"
feeds.map (i) -> " * #{i.url}"
]).join '\n'
.catch (err) ->
msg.send "[ERROR] #{err}"
debug err.stack

0

hubot-rss-readerの本文を見やすくした

hubot-rss-reader

hubot-rss-reader

チャットチャンネルを個別にRSSリーダーにできるhubotスクリプト。
% npm install hubot-rss-reader
でインストールできる。

本文を見やすくした


今までsummaryを表示していたけど、githubのRSS等はsummaryが無くてdescriptionだけある。どちらかある方を表示するようにした。

summaryがHTMLで書かれている場合は、HTMLタグを除去した。

一番最初のimgタグの中身を記事の先頭に持ってくるようにした。slackなど画像の自動ロードが有効なチャット環境の場合、ヘッダ画像のようになって見やすい。

無駄な改行を除去した。3つ以上改行のみの行が続く場合、改行2つにまとめた。

スクリーンショット