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):
try:
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:
raise ValueError("must be either list or function")
except:
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!'])