#$ neutron_plugin 01 import random TRIGGERDB_FILE = 'dynamic/tiggerdb.txt' TRIGGERCACHE ='dynamic/tiggercache.txt' initialize_file(TRIGGERDB_FILE, '{}') initialize_file(TRIGGERCACHE, '{}') def handler_list(type, source, parameters): localdb = eval(read_file(TRIGGERDB_FILE)) out = '' for key in localdb.iterkeys(): out += '\n' + key for x in localdb[key]: out+='\n\t %s' % x smsg(type, source, out) def handler_talk(type, source, parameters): print parameters parameters = parameters.split(' ') if len(parameters) == 2 and type == 'private': localdb = eval(read_file(TRIGGERCACHE)) if parameters[0] == 'on': localdb[parameters[1]] = True elif parameters[0] == 'off': localdb[parameters[1]] = False write_file(TRIGGERCACHE, str(localdb)) smsg(type, source, 'Talking is now "%s" on %s'%(parameters[0],parameters[1])) def alter(msg, source, tnick): out = msg.replace('%nick', source[2]) out = out.replace('%date', time.strftime('%x')) out = out.replace('%time', time.strftime('%X')) ## if out.find('%tnick')>-1 and GROUPCHATS.has_key(source[1]): ## parts = out.split('%tnick') ## for part in parts[1:]: ## nick = part.split( if tnick!='': out = out.replace('%tnick', tnick) return out def can_talk(room): talk = eval(read_file(TRIGGERCACHE)) if talk.has_key(room): return talk[room] else: return False def handler_learn_get(type, source, parameters): #print type, source, parameters if get_nick(source[1]) != source[2] and type == 'public' and can_talk(source[1]): localdb = eval(read_file(TRIGGERDB_FILE)) replies = [] tnick = '' for key in localdb.iterkeys(): if parameters.find(key) > -1: replies.append(key) elif parameters.find(key.replace('%tnick',''))> -1: remainder = parameters.replace(key.replace('%tnick',''),'') if remainder.split(' ')[0] in GROUPCHATS[source[1]]: tnick = remainder.split(' ')[0] replies.append(key) if len(replies)>0: key = random.choice(replies) if len(localdb[key])>0: mesg = random.choice(localdb[key]) msg(source[1], alter(mesg, source, tnick)) def handler_learn_del(type, source, parameters): localdb = eval(read_file(TRIGGERDB_FILE)) pars = parameters.split(' ') try: index = int (pars[0]) except: return key = ' '.join(pars[1:]) #print str(index),key if localdb.has_key(key): try: del localdb[key][index-1] except: return smsg(type, source, 'Record %s from %s is deleted'%(str(index),key)) write_file(TRIGGERDB_FILE, str(localdb)) def handler_learn_set(type, source, parameters): localdb = eval(read_file(TRIGGERDB_FILE)) keyval = string.split(parameters, '=', 1) if len(keyval)==2: key = keyval[0].strip() value = keyval[1].strip() if not value: return else: if localdb.has_key(key): localdb[key].append(keyval[1].strip()) else: localdb[key] = [] localdb[key].append(keyval[1].strip()) smsg(type, source, key + ' == ' + keyval[1].strip()) write_file(TRIGGERDB_FILE, str(localdb)) register_message_handler(handler_learn_get) register_command_handler(handler_learn_set, '!learn', 0, 'Teaches bot new trigger.', '!learn <query> = <definition>', ['!learn neutron = the best!']) register_command_handler(handler_talk, '!talk', 50, 'Starts/stops bot\'s random responses.', '!talk <on|off> <room>', ['!talk on talk@conf.netlab.cz']) register_command_handler(handler_list, '!list', 50, 'Lists bot\'s random responses.', '!list', ['']) register_command_handler(handler_learn_del, '!forget', 50, 'Deletes bot\'s response.', '!forget <n> <trigger>', ['!forget 1 ping'])