OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

slackでランダムメッセージを定期的に送りたい!/デザイナーだけどHubot-scriptと格闘してみた

f:id:peroko_tokyo:20150826124221p:plain最近、プログラミングのハードルが高くて悶々としているぺろこです

デザイナーだって、プログラム書けるようになりたい。 書けないの悔しい。 書ける方がかっこいい。

エンジニアさんには「何かひとつ作ってみたらわかるよ」って言っているし、

エンジニアもすなるHubot-scriptといふものを、デザイナーもしてみむとてするなり。

こんな古文もあったような気がするし、 せっかくだから作ってみよう!

ということで、思い立ってHubot-scriptを作ってみました。

今回のお題

開発ブログの執筆がついつい滞りがちになるので、 弊社のhubot、otobotくんにリマインドしてもらいたい。

このお題を選んだ経緯

※ ksatoは元ネタを書いた人と働いていた

http://gyazobank.otobank.biz/812efe99-79b6-4f4e-ad44-6d379a08e182.png

やりたいこと

  • 毎日17:00に
  • team-dev-blogチャンネルで
  • ランダムにメッセージを送信する
  • ただし、チャンネルメンバーのうち誰か一人にメンション(@+name)すること

作ったもの

# Description:
#   A hubot script remind that writing a blog.
#
# Requirement:
#
# Dependencies:
#   cron.js
#
# Commands:
#
# Author:
#   @peroko
CronJob = require('cron').CronJob

module.exports = (robot) ->
  # 投稿する時間のデフォルトを定義
  sendTime = process.env.WRITE_BLOG_TIME_PATTERN || "00 17 * * 1-5"
  # 投稿する部屋のデフォルトを定義
  room = process.env.WRITE_BLOG_SEND_ROOM || "team-dev-blog"

  messages = [
    'ブログ書いた?・ω・',
    'ブログ、書いてほしいな〜(◍´◡`◍)',
    'ブログの下書きできた?(☼◡☼)',
    'ま〜だかな ま〜だかな〜〜〜♪( ・ิω・ิ)',
    'ԅ( ˘ω˘ԅ) 肩揉みますか?',
    'いつ書くの?ʕ•ᴥ•ʔ 今日?明日?',
    '(∩`ω´)⊃)) しゅっしゅっ (更新ボタンを押す準備は万端です)',
    'どう?いい調子?ヽ(`◕ ω ◕)ノ',
    '最近どう?(◍´◡`◍)',
    'いつになったら...ブログ書いてくれるの(´・ε・̥ˋ๑)',
    '更新は今日かな? 明日かな? ٩(๑❛ᴗ❛)人(❛ᴗ❛ ๑)۶',
    'ブログ書いてくれたら・・・Ʊ”-ʓ(っ´ω`)っ :beers: ⊂(´ω`⊂ )Ʊ”-ʓ',
    '٩(•౪• ٩)そういえばブログどんなかんじ?',
    'ブログの進捗いかがですかっ( ✧Д✧) カッ!!'
  ]

  messageFunc = () ->
    users = robot.brain.data.users
    roomMembers = []
    for key, member of users when member.room is room
      roomMembers.push member.name if member.name isnt robot.name

    # メンバーをランダム選択
    selectedMember = roomMembers[Math.floor(Math.random() * roomMembers.length)]

    # メッセージをランダム選択
    message = messages[Math.floor(Math.random() * messages.length)]

    # 選ばれたメンバーがasmzさんだった場合はメッセージの前にビールの絵文字を追加
    if selectedMember == 'asmz'
      message = " :beer: #{ message }"

    message = "@#{ selectedMember } #{ message }"

    robot.send {room: "#" + room}, message

  # デバッグのためにコマンドきっかけでも反応するようにする
  robot.respond /blog-remind$/i, messageFunc

  new CronJob sendTime, messageFunc, null, true, 'Asia/Tokyo'

結果

とりあえず動くようになった、が、、、、

robot.brain.data.usersのusersに紐づくroomは'その人が最後に発言したチャンネル'が入るらしく、ここが常時team-dev-blogになってるユーザーはほとんどいない・・・。ユーザー名の取得を考え直す必要があるということがわかりました;;

ここに最後につぶやいて退社された先輩だけが、常にこの条件に当てはまっているので、 otobotくんが毎日17時に、退社なさった先輩プログラマーにむけて投稿し続けていて、本当に悲しい・・・・。

お礼

Thanks for @asmz, @bito, @ksato ここまで来るまでに、にアドバイスをたくさんもらって修正してきたのですが、その過程を書くには記憶が薄れてしまいました〜〜〜〜ごめんなさい〜〜〜〜笑 エンジニアさんがみんな親切なので、みんなオトバンクに入るといいと思います

次、何を作ろうかな〜


参考にした記事

元ネタは@sotarokさんのこれです qiita.com

どんなメソッドがあるかわからない!と思ったらここに書いてありました。 github.com

cron.jsのパッケージ導入はこれを参考にさせていただきました。 qiita.com

cron記法はここを参照しました。

www.server-memo.net