summaryrefslogblamecommitdiff
path: root/plugins/chatbot.py
blob: e52bb0fb2949724533676554c1935c946ba11391 (plain) (tree)































                                                                         









                                                                

























                                           
                                                
import re
import random
import types
import net.mapserv as mapserv
from utils import extends
import chat


__all__ = [ 'PLUGIN', 'init', 'answer', 'add_command', 'remove_command' ]


PLUGIN = {
    'name': 'chatbot',
    'requires': (),
    'blocks': (),
}

commands = {}


def answer_info(nick, message, is_whisper, match):
    if is_whisper:
        chat.send_whisper(nick, "This is an experimental bot.")

def answer_random(nick, message, is_whisper, answers):
    resp = random.choice(answers)
    if is_whisper:
        chat.send_whisper(nick, resp)
    else:
        mapserv.cmsg_chat_message(resp)

def answer(nick, message, is_whisper):

    for regex, action in commands.iteritems():
        match = regex.match(message)
        if match:
            if isinstance(action, types.ListType):
                answer_random(nick, message, is_whisper, action)
            elif isinstance(action, types.FunctionType):
                action(nick, message, is_whisper, match)
            else:
                answer_random(nick, message, is_whisper, action)

@extends('smsg_being_chat')
def being_chat(data):
    idx = data.message.find(' : ')
    if idx > -1:
        nick = data.message[:idx]
        message = data.message[idx + 3:]
        answer(nick, message, False)


@extends('smsg_whisper')
def got_whisper(data):
    nick, message = data.nick, data.message
    answer(nick, message, True)


def add_command(cmd, action):
    cmd_re = re.compile(cmd)
    commands[cmd_re] = action

def remove_command(cmd):
    cmd_re = re.compile(cmd)
    commands.remove(cmd_re)

def init(config):
    add_command('!info', answer_info)
    # ~ add_command('!random', ['asd', 'Ciao!'])