このドキュメントは、direct 用に hubot を拡張した点について整理しています。
以下のコードブロックの内側についてのものとします。
module.exports = (robot) ->
robot.respond /.../i, (msg) ->
# here
msg.send "This message is text."
もしくは、以下も同等です。
msg.send
text: "This message is text."
msg.send
stamp_set: "3"
stamp_index: "1152921507291203198"
text: "おはよう" # (Option) テキスト付きスタンプの場合のみ
※ stamp_set と stamp_index は、ブラウザの「要素の検証」等で確認してください。
<img src="./images/stamp/3/1152921507291203198.png">
msg.send
question: "質問内容"
msg.send
question: "質問内容"
options: ["選択肢1", "選択肢2", "選択肢3"]
msg.send
title: "すること"
closing_type: 0 # (Option) 誰かが:0, 全員が:1
msg.send
path: "your/file/name.png"
name: "name.png" # (Option) アップロード名
type: "image/png" # (Option) MIME
以下のコードブロックの内側についてのものとします。
module.exports = (robot) ->
# here
robot.respond /(.*)/, (msg) ->
msg.send "Your message is #{msg.match[1]}"
robot.respond "stamp", (msg) ->
msg.send "#{msg.json.stamp_set} - #{msg.json.stamp_index}"
robot.respond "yesno", (msg) ->
if not msg.json.response?
msg.send "Your question is #{msg.json.question}."
else
msg.send "Your answer is #{msg.json.response}."
robot.respond "select", (msg) ->
if not msg.json.response?
msg.send "Your question is #{msg.json.question}."
else
msg.send "Your answer is #{msg.json.options[msg.json.response]}."
robot.respond "task", (msg) ->
if not msg.json.done?
msg.send "Your task is #{msg.json.title}."
else
msg.send "Your task is #{if msg.json.done then 'done' else 'undone'}."
robot.respond "file", (msg) ->
msg.send "File received. name: #{msg.json.name} type: #{msg.json.content_type}
size: #{msg.json.content_size}bytes"
msg.download msg.json, (path) ->
msg.send "downloaded to #{path}"
robot.respond "map", (msg) ->
msg.send "Your location is #{msg.json.place} at #{msg.json.lat}, #{msg.json.lng}"
以下のコードブロックの内側についてのものとします。
module.exports = (robot) ->
robot.respond /room/i, (msg) ->
# here
msg.send "This room type is " + ["unknown", "pair", "group"][msg.message.roomType]
if msg.message.roomType == 2 # Group talk
msg.send "Group name is #{msg.message.roomTopic}"
msg.topic "BotGroup"
text = ""
for user in msg.message.roomUsers
text += "#{user.name} #{user.email} #{user.profile_url}\n\n"
msg.send text
text = ""
for id,talk of msg.message.rooms
text += "name:#{talk.topic} type:#{talk.type} users:#{talk.users}\n\n"
msg.send text
※ msg オブジェクトが利用できない場合は、msg.message.rooms
の代わりに robot.brain.rooms()
も利用できます (注:関数呼出しになります)。
以下のコードブロックの内側についてのものとします。
module.exports = (robot) ->
robot.respond /users/i, () ->
# here
users = robot.brain.users()
console.log users # { id0:user0, id1:user1, ... }
userId = Object.keys(users)[0]
console.log robot.brain.userForId(userId)
user = users[userId]
console.log robot.brain.userForName(user.name)
※ その他にも、usersForRawFuzzyName
(先頭一致)、usersForFuzzyName
(先頭一致、ただし、完全一致を優先) も利用できます。
以下のコードブロックの内側についてのものとします。
module.exports = (robot) ->
# here
robot.respond /.../, (msg) ->
msg.send ""
※ respond
はグループトーク中の「@hubot名 メッセージ」の場合でも呼ばれます。厳密にペアトークのみに対応させたいときはif msg.message.roomType == 1
で場合分けしてください。
robot.hear /.../, (msg) ->
msg.send ""
robot.topic (msg) ->
msg.send "Topic is changed: #{msg.message.text}"
robot.enter (msg) ->
msg.send "Hi! #{msg.message.user.name}"
robot.leave (msg) ->
msg.send "Good bye! #{msg.message.user.name}"
robot.join (msg) ->
msg.send "Nice to meet you!"
robot.respond /read after/, (msg) ->
msg.send
text: "Read thie message, please!"
onsend: (sent) ->
setTimeout ->
text = []
text.push "#{user.name} read after 5sec." for user in sent.readUsers
text.push "#{user.name} did't read after 5sec." for user in sent.unreadUsers
msg.send text.join("\n")
, 5000
リアルタイムに未読・既読を知りたい場合は、以下のようにします。
robot.respond /read now/, (msg) ->
msg.send
text: "Read thie message, please!"
onread: (readNowUsers, readUsers, unreadUsers) ->
text = []
text.push "#{user.name} read now." for user in readNowUsers
msg.send text.join("\n")
msg.leave()
msg.announce "THIS IS AN ANNOUNCEMENT!"
※ アカウントに管理者権限が必要です。