UNPKG

druid

Version:

NodeJS Jabber bot framework

95 lines (84 loc) 2.42 kB
/* * bugzilla.js * Copyright (C) 2013 Adrian Perez <aperez@igalia.com> * * Distributed under terms of the MIT license. */ var request = require("request"); var cheerio = require("cheerio"); var Trigger = require("./druid").Trigger; var ExpandBugId = Trigger.$extend({ __init__: function (prefix, baseurl) { var self = this; self.baseurl = baseurl; self.$super(new RegExp("\\b" + prefix + "[:#](\\w+)\\b", "i"), function (req, match) { req.reply(self.baseurl + "/show_bug.cgi?id=" + match[0]); return true; }, true); }, }); exports.ExpandBugId = ExpandBugId; var BugSummary = Trigger.$extend({ __init__: function (prefix, baseurl) { var self = this; self.prefix = prefix; self.baseurl = baseurl; self.$super(/\b(https?:\/\/[\w\.\/:-]+)\/show_bug\.cgi\?id=(\d+)\b/, function (req, match) { if (match[0] != self.baseurl) { return false; } var url = self.baseurl + "/show_bug.cgi?id=" + match[1]; request(url, function (error, response, body) { if (error) { console.log("[error:bugzilla] " + error); return; } try { var $ = cheerio.load(body); var summary = $("span#short_desc_nonedit_display").text(); if (!summary) { summary = "Not found / Invalid bug ID"; } req.reply("#" + match[1] + " - " + summary); } catch (e) { console.log("[error:bugzilla] " + e); } }); return true; }, true); }, }); exports.BugSummary = BugSummary; var ExpandNaturalLanguageIds = Trigger.$extend({ __init__: function (bugzillas, defaultbz) { var self = this; self.bugzillas = bugzillas; self.defaultbz = defaultbz; self.$super(/\b(?:(\w+)\s+)?bug\s+#?(\w+)\b/i, function (req, match) { var bugzilla = self.defaultbz; var bugid = null; if (match.length == 2) { bugzilla = match[0]; bugid = match[1]; } else { bugid = match[0]; } if (self.bugzillas[bugzilla]) { var baseurl = self.bugzillas[bugzilla]; req.reply(baseurl + "/show_bug.cgi?id=" + bugid); } return true; }, true); }, }); exports.ExpandNaturalLanguageIds = ExpandNaturalLanguageIds; exports.configure = function (bot, config, mapping, deflt) { for (var prefix in config) { var url = config[prefix]; bot.addTrigger(new ExpandBugId(prefix, url)); bot.addTrigger(new BugSummary(prefix, url)); } if (mapping && deflt) { bot.addTrigger(new ExpandNaturalLanguageIds(mapping, deflt)); } };