dr.botzo/modules/Echo.py
Brian S. Stephan 08d08d537e Echo: wrap echo() for the XML-RPC server
this serves as a good example of how to reuse code for the XML-RPC
interface. we wrap it for convenience, so that all that needs to be
supplied to the web service method is the message to echo. of course,
other modules can wrap things how they feel the need to, even adding
authentication, i guess, if they wanted

note that it doesn't unregister the XML-RPC method. for starters, i
didn't add an unregister to DrBotIRC, so it can't, and secondly, it
looks like reregistering overwrites the old one. this hasn't been
extensively tested but that's what i'm seeing
2012-12-20 10:36:53 -06:00

80 lines
2.5 KiB
Python

"""
Echo - repeat text
Copyright (C) 2010 Brian S. Stephan
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from Module import Module
class Echo(Module):
"""Repeat provided text."""
def register_handlers(self):
"""Hook handler functions into the IRC library."""
# register IRC regex handlers
self.irc.add_global_regex_handler('pubmsg', r'^!echo\s+(.*)$',
self.echo)
self.irc.add_global_regex_handler('privmsg', r'^!echo\s+(.*)$',
self.echo)
# register XML-RPC handlers
def echo_wrap(msg):
"""Get back the sent message.
Args:
msg the message to get returned
Returns:
msg
"""
return self.echo(None, None, None, False, (msg,))
self.irc.xmlrpc_register_function(echo_wrap, 'echo')
def unregister_handlers(self):
"""Unhook handler functions from the IRC library."""
self.irc.remove_global_regex_handler('pubmsg', r'^!echo\s+(.*)$',
self.echo)
self.irc.remove_global_regex_handler('privmsg', r'^!echo\s+(.*)$',
self.echo)
def echo(self, nick, userhost, event, from_admin, groups):
"""Return the message received.
Args:
nick source nickname (unused)
userhost source userhost (unused)
event IRC event, used in IRC reply, or none for direct call
from_admin whether or not the event came from an admin (unused)
groups list length 1, the message to echo
"""
msg = groups[0]
self.log.debug("replying with '{0:s}'".format(msg))
if event:
return self.irc.reply(event, msg)
else:
return msg
# vi:tabstop=4:expandtab:autoindent
# kate: indent-mode python;indent-width 4;replace-tabs on;