LoginSignup
5
4

More than 5 years have passed since last update.

Hubotでbrain使わずにredisにつなぐ

Posted at

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!!

References

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4