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
80 lines
2.5 KiB
Python
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;
|