UNPKG

hubot-phabs

Version:

A hubot plugin for communication with a Phabricator instance.

125 lines (114 loc) 4.52 kB
# Description: # enable communication with Phabricator via Conduit api # # Dependencies: # # Configuration: # PHABRICATOR_URL # PHABRICATOR_API_KEY # PHABRICATOR_BOT_PHID # # Commands: # hubot phad projects # hubot phad <project> delete # hubot phad <project> info # hubot phad <project> alias <alias> # hubot phad forget <alias> # hubot phad <project> feed to <room> # hubot phad <project> remove from <room> # # Author: # mose Phabricator = require '../lib/phabricator' moment = require 'moment' path = require 'path' module.exports = (robot) -> phab = new Phabricator robot, process.env data = robot.brain.data['phabricator'] # hubot phad projects robot.respond (/phad projects$/), (msg) -> if Object.keys(data.projects).length > 0 msg.send "Known Projects: #{Object.keys(data.projects).join(', ')}" else msg.send 'There is no project.' # hubot phad <project> delete robot.respond (/phad (.+) del(?:ete)?$/), (msg) -> phab.withPermission msg, msg.envelope.user, 'phadmin', -> project = msg.match[1] if data.projects[project]? delete data.projects[project] msg.send "#{project} erased from memory." else msg.send "#{project} not found in memory." # hubot phad <project> info robot.respond (/phad (.+) info$/), (msg) -> project = msg.match[1] phab.withProject project, (projectData) -> if projectData.error_info? msg.send projectData.error_info else response = "'#{project}' is '#{projectData.data.name}'" if projectData.aliases? and projectData.aliases.length > 0 response += " (aka #{projectData.aliases.join(', ')})" else response += ', with no alias' if projectData.data.feeds? and projectData.data.feeds.length > 0 response += ", announced on #{projectData.data.feeds.join(', ')}" else response += ', with no feed.' msg.send response # hubot phad <project> alias <alias> robot.respond (/phad (.+) a(?:lia)?s (.+)$/), (msg) -> phab.withPermission msg, msg.envelope.user, 'phadmin', -> project = msg.match[1] alias = msg.match[2] phab.withProject project, (projectData) -> if projectData.error_info? msg.send projectData.error_info else if data.aliases[alias]? msg.send "The alias '#{alias}' already exists for project '#{data.aliases[alias]}'." else data.aliases[alias] = projectData.data.name msg.send "Ok, '#{projectData.data.name}' will be known as '#{alias}'." # hubot phad forget <alias> robot.respond (/phad forget (.+)$/), (msg) -> phab.withPermission msg, msg.envelope.user, 'phadmin', -> alias = msg.match[1] if data.aliases[alias] delete data.aliases[alias] msg.send "Ok, the alias '#{alias}' is forgotten." else msg.send "Sorry, I don't know the alias '#{alias}'." # hubot phad <project> feed to <room> robot.respond (/phad (.+) feeds?(?: to)? (.+)$/), (msg) -> phab.withPermission msg, msg.envelope.user, 'phadmin', -> project = msg.match[1] room = msg.match[2] phab.withProject project, (projectData) -> if projectData.error_info? msg.send projectData.error_info else projectData.data.feeds ?= [ ] if room in projectData.data.feeds msg.send "The feed from '#{projectData.data.name}' to '#{room}' already exist." else data.projects[projectData.data.name].feeds ?= [ ] data.projects[projectData.data.name].feeds.push room msg.send "Ok, '#{projectData.data.name}' is now feeding '#{room}'." # hubot phad <project> remove from <room> robot.respond (/phad (.+) remove (?:from )?(.+)$/), (msg) -> phab.withPermission msg, msg.envelope.user, 'phadmin', -> project = msg.match[1] room = msg.match[2] phab.withProject project, (projectData) -> if projectData.error_info? msg.send projectData.error_info else projectData.data.feeds ?= [ ] if room in projectData.data.feeds idx = data.projects[projectData.data.name].feeds.indexOf room data.projects[projectData.data.name].feeds.splice(idx, 1) msg.send "Ok, The feed from '#{projectData.data.name}' to '#{room}' was removed." else msg.send "Sorry, '#{projectData.data.name}' is not feeding '#{room}'."