   transitions = JSON.parse process.env.HUBOT_JIRA_TRANSITIONS_MAP if process.env.HUBOT_JIRA_TRANSITIONS_MAP
   transitionRegex = eval "/(?\:^|\\s)((?\:#{prefixes}-)(?\:\\d+))\\s+(?\:to\\s+|>\\s?)(#{(transitions.map (t) -> t.name).join "|"})/i" if transitions
   rankRegex = eval "/(?\:^|\\s)((?\:#{prefixes}-)(?\:\\d+)) rank (up|down|top|bottom)/i"
+  watchRegex = eval "/(?\:^|\\s)((?\:#{prefixes}-)(?\:\\d+)) watch(?: @?([\\w._]*))?/i"
   assignRegex = eval "/(?\:^|\\s)((?\:#{prefixes}-)(?\:\\d+)) assign @?([\\w._]*)/i"
   commentRegex = eval "/(?\:^|\\s)((?\:#{prefixes}-)(?\:\\d+))\\s?(?\:<\\s?)([^]+)/i"
   labelsRegex = /(?:\s+|^)#\S+/g

    .catch (error) ->
      send msg, "An error has occured: #{error}"

  handleRankRequest = (msg) ->
    msg.finish()
    [ __, ticket, direction ] = msg.match
    ticket = ticket.toUpperCase()
    direction = direction.toLowerCase()

    robot.adapter.customMessage payload

  fetch = (url, opts) ->
    options =
      headers:
        "X-Atlassian-Token": "no-check"
        "Content-Type": "application/json"
        "Authorization": 'Basic ' + new Buffer("#{process.env.HUBOT_JIRA_USERNAME}:#{process.env.HUBOT_JIRA_PASSWORD}").toString('base64')
    options = _(options).extend opts
    options.headers["Content-Length"] = options.body.length if options.method is "POST"

    robot.logger.info "Fetching: #{url}"
    nodeFetch(url,options).then (response) ->
      if response.status >= 200 and response.status < 300
        return response
