"""
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      tuple 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;