1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2007-2012 Thomas Perl <thp.io/about>
4 # Copyright (C) 2014 kaliko <kaliko@azylum.org>
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.
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.
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/>.
18 from .plugin import Plugin, botcmd
22 def __init__(self, bot):
23 Plugin.__init__(self, bot)
25 self.presence = dict()
26 # The groupchat_presence event is triggered whenever a
27 # presence stanza is received from any chat room, including
28 # any presences you send yourself. To limit event handling
29 # to a single room, use the events muc::room@server::presence,
30 # muc::room@server::got_online, or muc::room@server::got_offline.
31 bot.add_event_handler("muc::%s::presence" % self.bot.room, self.log_presence)
33 def log_presence(self, pres):
34 self.log.debug('{0}: {1}'.format(pres['muc']['nick'], pres['type']))
35 nick = pres['muc']['nick']
36 self.presence.update({nick: (pres['muc']['role'], pres['type'])})
37 self.log.debug(self.presence)
38 if pres['type'] == 'available':
39 while self.inbox.get(nick, []):
40 self.send(self.inbox.get(nick).pop())
44 def tell(self, message, args):
45 """drop a message to be sent when someone gets online.
46 !tell queue : messages in queue
47 !tell <nick> <msg> : append <msg> to <nick> in queue"""
49 self.send('Missing arguments:\n{}'.format(self.tell.__doc__))
52 if args[0] == 'queue':
53 self.send('\n'.join(['{0}:\n\t{1}'.format(k, '\n'.join(v))
54 for k, v in self.inbox.items()]))
56 if args[0] == 'purge':
57 sender = message['from'].resource
58 if self.presence[sender][0] == 'moderator':
62 self.send('Please provide a message:\n{}'.format(self.tell.__doc__))
64 sender = message['from'].resource
65 recipient = message['body'].split()[1]
66 tell_msg = ' '.join(message['body'].split()[2:])
67 self.log.debug('{0}: {1}'.format(recipient, tell_msg))
68 letter = '{0}, {1} told me to tell you: {2}'.format(recipient, sender, tell_msg)
69 if (self.presence.get(recipient) and
70 self.presence[recipient][1] == 'available'):
72 if recipient in self.inbox.keys():
73 self.inbox[recipient].append(letter)
75 self.inbox[recipient] = [letter]
79 # vim: ai ts=4 sw=4 sts=4 expandtab