アダプタがv2からv3に変わってメンション周りが変更されて面倒だったのでメモ
ユーザー名からメンション
これはとても簡単
ユーザー名がhogeとかなら<@hoge>
でいい
でもusernameがhoge.fooとかだとちゃんとメンション効かない
そういう時はidでメンション送らせるのがいいと思う
idからメンション
<@>
はidを渡しても使えるっぽい
slackbotのidはUSLACKBOTらしいのでそれを例にすると<@USLACKBOT>
みたいな感じ
でもidは普段見えないから取得しなきゃいけない
ユーザーの情報はrobot.brain.data.users
に入ってるので
Users = robot.brain.data.users
for key of Users
if 'hoge.foo' == Users[key].name
return Users[key].id
とかすればユーザー名からidを取得できる
そいつを使って
Users = robot.brain.data.users
getUserId = (name) ->
for key of Users
if name == Users[key].name
return Users[key].id
こんなの用意して<@#{getUserId(hoge.foo)}>
とかするといい
Utilにしとこう
どうせメンションとかよく使うので僕は./scripts
内にこんな感じファイルをutil.coffee
とか名前付けて用意してる
ensureImageExtension = (url) ->
ext = url.split('.').pop()
if /(png|jpe?g|gif)/i.test(ext)
url
else
"#{url}#.png"
Robot = (robot) ->
Util = {}
Users = robot.brain.data.users
delete Users.USLACKBOT
Util.getUsers = ->
return Users
Util.getUserId = (name) ->
for key of Users
if name == Users[key].name
return Users[key].id
Util.imageMe = (msg, query, animated, faces, cb) ->
cb = animated if typeof animated == 'function'
cb = faces if typeof faces == 'function'
q = v: '1.0', rsz: '8', q: query, safe: 'active'
q.imgtype = 'animated' if typeof animated is 'boolean' and animated is true
q.imgtype = 'face' if typeof faces is 'boolean' and faces is true
msg.http('http://ajax.googleapis.com/ajax/services/search/images')
.query(q)
.get() (err, res, body) ->
images = JSON.parse(body)
images = images.responseData?.results
if images?.length > 0
image = msg.random images
cb ensureImageExtension image.unescapedUrl
robot.util = Util
module.exports = Robot
そんでmain.coffee
で
require './util.coffee'
module.exports = (robot) ->
mention = (name) ->
return "<@#{robot.util.getUserId(name)}>:"
robot.hear /hogehoge/, (msg) ->
msg.send "#{mention(msg.message.user.name)}\nhogehoge"
みたいな感じ
まとめ
飽きたのでまとめるまでもなく〆ます