在HipChat上的Hubot中匹配用户名和@mention名称

Aar*_*ron 5 hubot

有没有办法找到用户名的@mention名称(数字xxxx_xxxxxx或全名),反之亦然?

查看msg.message对象,有一个用户对象,其中包含消息来自的人员的id,jid和名称.我想找到那个人的@mention名字,也可能是他们在邮件中提到的任何人的用户名.

Sam*_*Sam 3

我也想要这个。但由于它不在 xmpp 消息中,hubot 不会知道它。我认为您需要添加一个命令,将提及名称设置为用户的属性。就像是:

robot.respond /mentionname is @?(.+)$/i, (msg) ->
  mentionname = msg.match[2]

  user = robot.brain.userForId(msg.envelope.user.id)
  user.mentionname = mentionname
Run Code Online (Sandbox Code Playgroud)

然后您可以在其他自定义命令中查找它。您向大脑 userForMentionName 添加另一个方法,其作用与 userForName 大致相同。将其添加到您的脚本 init 中的大脑中。

userForMentionName = (name) ->
  result = null
  lowerName = name.toLowerCase()

  for k of (robot.brain.data.users or { })
    mentionName = robot.brain.data.users[k]['mention_name']      
    if mentionName? and mentionName.toLowerCase() is lowerName
      result = robot.brain.data.users[k]
  result
Run Code Online (Sandbox Code Playgroud)

或者,您可以修改 userForName 以检查 userName 或提及名称字段,但这可能会破坏其他内容。无论哪种方式,您都需要您的用户告诉 hubot 他们的提及名称是什么...或者 hubot-hipchat 适配器可能会查找它(如果它有该信息)...我会看看。

- 编辑 -

忽略所有这些:D hipchat 适配器将“mention_name”字段添加到存储在大脑中的用户对象中。因此,您所要做的就是循环用户并找到具有匹配提及名称的用户