# example_service.py: An example using the PyLink services API.
import random

from pylinkirc import utils
from pylinkirc.log import log

# The first step is to register ourselves as a service. utils.registerService() passes keyword
# arguments (configuration options) to ServiceBot, which in turn supports the following:
#
# - name (required):     The name of the service.
#
# - default_help=True:   Determines whether the built-in 'help' command should be enabled for this
#                        bot.
#
# - default_list=True:   Determines whether the built-in 'list' command should be enabled for this
#                        bot.
#
# - nick=None:           The fallback nick that the service bot should use if nothing is specified
#                        in the config (i.e. both serverdata:SERVICENAME_nick and conf:SERVICE:nick
#                        are missing). If left empty, the fallback nick will just be the service
#                        name.
#
# - ident=None:          The fallback ident that the service bot should use if nothing is specified
#                        in the config (i.e. both serverdata:SERVICENAME_ident and
#                        conf:SERVICE:ident are missing). If left empty, the fallback ident will
#                        just be the service name.
#
# - manipulatable=False: Determines whether the service bot should be manipulable by things like
#                        the 'join' command in the 'bots' plugin. Depending on the nature of your
#                        plugin, it's really up to you whether you want to enable this.
#
# - desc=None:           An optional service description that's shown (if present) when the 'help'
#                        command is called without an argument.

mydesc = "Example service plugin."
# Note: the service name is case-insensitive and always lowercase.
servicebot = utils.registerService("exampleserv", manipulatable=True, desc=mydesc,
                                   nick='ExampleServ')

# These convenience assignments allow calling reply() and error() more quickly, but you can remove
# them and call the functions directly if you don't want them.
reply = servicebot.reply
error = servicebot.error

# Command functions for service bots are mostly the same as commands for the main PyLink client,
# with a couple of key differences:
def greet(irc, source, args):
    """takes no arguments.

    Greets the caller.
    """
    response = random.choice(['Hi!', 'Hello!'])
    # 1) Instead of calling irc.reply() or irc.error(), which return data through the main PyLink
    #    bot, use the reply() and error() commands in the ServiceBot instance (servicebot).
    #    These functions take the Irc object as the first argument, but otherwise use the same
    #    options as irc.reply().
    reply(irc, response)

# 2) Instead of using utils.add_cmd(function, 'name'), bind functions to your ServiceBot instance.
#    You can also use the featured=True argument to display the command's syntax directly in 'list'.
servicebot.add_cmd(greet, featured=True)