Help us understand the problem. What is going on with this article?

Hubotからslackに画像を投稿してみる

More than 3 years have passed since last update.

ある時、突然こんな要望をされて困った。
「猫」って発言されたらこの画像を表示したい!
 ※ 本当は「猫」ではありませんでしたが、猫でマスクしておきます。

まずは普通に応答

nekobot.coffee
module.exports = (robot) ->
    robot.hear /(猫)$/i, (msg) ->
      room = msg.envelope.room
      if room == "image"
        text = msg.match[1]
        msg.send  "#{text} の画像アップするよ"

画像をアップロード

curlにてアップしたい画像のpathとアップ先のchannelを指定

nekobot.coffee
module.exports = (robot) ->
    robot.hear /(猫)$/i, (msg) ->
      room = msg.envelope.room
      if room == "image"
        text = msg.match[1]
        msg.send  "#{text} の画像アップするよ"
        # 下記を追加
        filename = 'image/nya-o.png'
        channel = msg.message.rawMessage.channel
        exec "curl -F file=@#{filename} -F channels=#{channel} -F token=#{process.env.HUBOT_SLACK_TOKEN} https://slack.com/api/files.upload", (err, stdout, stderr) ->
          if err
            # 一応Errorのハンドリングしておく?

後は、該当のチャンネルでの 発言をhubotが拾って指定された猫画像をSlackにアップロード
※画像サイズによってはアップロードに時間がかかります。

更に複数の画像をランダムで表示させたい

ということで、表示する画像の配列を作成して、 random で取得してみる

nekobot.coffee
# 表示したい画像path
neko = ['nya-o.png','bow-wow.png','Cock-a-doodle-doo.png']
module.exports = (robot) ->
    robot.hear /(猫)$/i, (msg) ->
      room = msg.envelope.room
      if room == "image"
        text = msg.match[1]
        msg.send  "#{text} の画像アップするよ"
        # 下記を追加
        filename = msg.random neko
        channel = msg.message.rawMessage.channel
        exec "curl -F file=@#{filename} -F channels=#{channel} -F token=#{process.env.HUBOT_SLACK_TOKEN} https://slack.com/api/files.upload", (err, stdout, stderr) ->
          if err
            # 一応Errorのハンドリングしておく?

コレで に反応したら3種類のどれかの画像がアップします。
※ 連続で同じ画像ばっかりアップされたため、なかなか出なかった画像が当たり扱いされ、いつの間にかくじ引き機能として活躍されるしまつ。。。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away