Goal
- hubotからredisに格納されたデータを利用したい
- hubotには永続化層としてhubot brainが用意されていて、redisを利用できるが、hubot brainではキー名に制限があるのでこれを使わずに実現したい
Example
hubotのpackage.jsonのdependenciesにredisを追加する.
package.json
(省略)
"dependencies": {
"hubot": ">= 2.6.0 < 3.0.0",
"hubot-scripts": ">= 2.5.0 < 3.0.0",
"hubot-slack": ">= 2.2",
"redis": "0.8.4"
},
(省略)
scripts/redis_test.coffee
# Description:
# Redis Test
#
# Dependencies:
# "redis": "0.8.4"
#
# Commands:
# hubot redis-get message
# hubot redis-get message "Hello, World!!"
#
# Authors:
# metheglin
Redis = require "redis"
module.exports = (robot) ->
robot.respond /redis-get (.*)$/i, (msg) ->
redis_key = msg.match[1].trim()
client = Redis.createClient()
client.get "#{redis_key}", (err, reply) ->
if err
throw err
else if reply
result = JSON.parse( reply )
msg.send result
else
msg.send "key: #{redis_key}は見つかりません."
robot.respond /redis-set ([^\s]*) (.*)$/i, (msg) ->
redis_key = msg.match[1].trim()
redis_val = msg.match[2].trim()
client = Redis.createClient()
client.set "#{redis_key}", "#{redis_val}", (err, keys_replies) ->
if err
throw err
やや注意点として、redisのデータget結果をhubotストリームに返したい場合は、get結果を待つ必要がある.
redisのclient.get
は非同期なのでコールバック関数内でmsg.send
する必要がある.
■実行結果
Hubot> hubot redis-get "message"
Hubot> key: "message"は見つかりません.
Hubot> hubot redis-get message
Hubot> key: messageは見つかりません.
Hubot> hubot redis-set message "Hello, World!!"
Hubot> hubot redis-get message
Hubot> Hello, World!!