简体   繁体   中英

How to intercept/hook into Hubot responses

Is there any way to intercept all Hubot triggers/response globally? The interception should be able to inspect, modify, forward, or reject Hubot response before being sent.

Some goals I would like to achieve:

  • Throttle all message sent by Hubot (from all plugins/scripts) to prevent flooding.
  • Apply some kind of ACL (Access Control List) to limit who can use a command.
  • etc.

I cannot find it in the official Hubot documentation. Am I missing some things?

For controlling access to listeners, check out listener middleware: https://hubot.github.com/docs/scripting/#listener-middleware https://hubot.github.com/docs/patterns/#restricting-access-to-commands

For rate limiting command execution, check out hubot-rate-limit: https://github.com/michaelansel/hubot-rate-limit

For controlling responses, keep an eye on the response middleware PR: https://github.com/github/hubot/pull/1021

this is a simple middleware I wrote to log messages that are directed at the robot. it can easily be modified to do something else depending on the user name or room name or whatever.

module.exports = (robot) ->
  robot.listenerMiddleware (context, next, done) ->
    #create a regex with the robots name in it
    robotName = new RegExp("#{context.listener.robot.name}", "i")
    #only log messages meant for the robot
    if robotName.test("#{context.response.message.text}")
      #only log messages once with the "everything" listener context
      if context.listener.regex.source is /(.+)/i.source
        console.log "User: #{context.response.message.user.name} asked me to \"#{context.response.message.text}\" in Channel: #{context.response.message.room}"
        #your code goes here
    next()

this thing will allow you to rate limit

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM