]> kaliko git repositories - sid.git/blob - sid/bts.py
Better use of logging
[sid.git] / sid / bts.py
1 # -*- coding: utf-8 -*-
2
3 # Copyright (C) 2010, 2011 Anaël Verrier <elghinn@free.fr>
4 # Copyright (C) 2015 kaliko <kaliko@azylum.org>
5
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, version 3 only.
9
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14
15 # You should have received a copy of the GNU General Public License
16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18
19 from re import compile as re_compile
20
21 import debianbts
22
23 from .plugin import Plugin, botcmd
24
25
26 class Bugs(Plugin):
27     re_bugs = re_compile('(?<=#)(\d{6,7})')
28
29     def __init__(self, bot):
30         Plugin.__init__(self, bot)
31         bot.add_event_handler("muc::%s::message" % self.bot.room, self.muc_message)
32
33     def muc_message(self, msg):
34         # Does not reply to myself
35         if msg['mucnick'] == self.bot.nick:
36             return
37         if '#' not in msg['body']:
38             return
39         bugs = list()
40         for bug_id in set(Bugs.re_bugs.findall(msg['body'].strip())):
41             self.log.debug('got bug id: %s', bug_id)
42             query = debianbts.get_status(bug_id)
43             if len(query) == 1:
44                 bug = query[0]
45                 url = debianbts.BTS_URL + bug_id
46                 bugs.append({'id': bug_id,
47                              'package': bug.package,
48                              'summary': bug.subject,
49                              'url': url})
50             else:
51                 self.log.warning('Wrong bug number "%s"?', bug_id)
52                 bugs.append({'id': bug_id})
53         for bug in bugs:
54             if len(bug) == 1:
55                 message = 'Invalid bug id: {id}'.format(**bug)
56                 self.reply(msg, message)
57             else:
58                 message = {'mhtml': '<a href="%(url)s">#%(id)s</a>: %(package)s « %(summary)s »' % bug,
59                            'mbody': '#%(id)s: %(package)s « %(summary)s » %(url)s' % bug}
60                 self.reply(msg, message)
61
62     @botcmd
63     def bugs(self, message, args):
64         """ intercepts bugs number in any message, looking for string like #629234
65         !bugs : nothing yet.
66         """
67         return None