A plugin for helga to automatically remember important things. Unless specified
    by the setting ``FACTS_REQUIRE_NICKNAME``, facts are automatically stored when
    a user says: ``something is something else``. Otherwise, facts must be explicitly
    added: ``helga something is something else``.

    Response format is, by default, the full message that was sent, including an author
    and timestamp. However, if a user specifies the string '<reply>' in their message,
    then only the words that follow '<reply>' will be returned in the response.

    For example::

        <sduncan> foo is bar
        <sduncan> foo?
        <helga> foo is bar (sduncan on 12/02/2013)

    Or::

        <sduncan> foo is <reply> bar
        <sduncan> foo?
        <helga> bar (sduncan on 12/02/2013)

    To remove a fact, you must ask specifically using the ``forget`` command::

        <sduncan> helga forget foo
        <helga> forgotten

    To replace a fact, you must use the ``replace`` command, andprovide the
    term as well as the new definition, separated by  '<watch>'::

        <sduncan> helga replace foo <with> new def
        <helga> replaced

def facts(client, channel, nick, message, *args):
    """
    A plugin for helga to automatically remember important things. Unless specified
    by the setting ``FACTS_REQUIRE_NICKNAME``, facts are automatically stored when
    a user says: ``something is something else``. Otherwise, facts must be explicitly
    added: ``helga something is something else``.

    Response format is, by default, the full message that was sent, including an author
    and timestamp. However, if a user specifies the string '<reply>' in their message,
    then only the words that follow '<reply>' will be returned in the response.

    For example::

        <sduncan> foo is bar
        <sduncan> foo?
        <helga> foo is bar (sduncan on 12/02/2013)

    Or::

        <sduncan> foo is <reply> bar
        <sduncan> foo?
        <helga> bar (sduncan on 12/02/2013)

    To remove a fact, you must ask specifically using the ``forget`` command::

        <sduncan> helga forget foo
        <helga> forgotten

    To replace a fact, you must use the ``replace`` command, andprovide the
    term as well as the new definition, separated by  '<watch>'::

        <sduncan> helga replace foo <with> new def
        <helga> replaced
    """
    if len(args) == 2:
        return facts_command(client, channel, nick, message, *args)

    # Anything else is a match
    return facts_match(client, channel, nick, message, args[0])