mirror of
https://git.wownero.com/wownero/tippero.git
synced 2024-08-15 00:33:14 +00:00
Add events and event handlers, and IRC join/part events
This commit is contained in:
parent
cea60feeae
commit
1efc378ce2
4 changed files with 60 additions and 2 deletions
17
tipbot.py
17
tipbot.py
|
@ -385,6 +385,21 @@ def OnIdentified(link, identified):
|
||||||
return
|
return
|
||||||
RunNextCommand(link, identified)
|
RunNextCommand(link, identified)
|
||||||
|
|
||||||
|
def OnEventProxy(event,*args,**kwargs):
|
||||||
|
log_info('Got event %s, args %s' % (event, str(kwargs)))
|
||||||
|
if disabled:
|
||||||
|
log_info('Ignoring event while disabled')
|
||||||
|
return
|
||||||
|
link=kwargs['link'] if 'link' in kwargs else None
|
||||||
|
if link:
|
||||||
|
link.batch_send_start()
|
||||||
|
try:
|
||||||
|
OnEvent(event,*args,**kwargs)
|
||||||
|
except Exception,e:
|
||||||
|
log_error('Exception handling event %s: %s' % (str(event),str(e)))
|
||||||
|
if link:
|
||||||
|
link.batch_send_done()
|
||||||
|
|
||||||
def RegisterCommands():
|
def RegisterCommands():
|
||||||
RegisterCommand({'module': 'builtin', 'name': 'help', 'parms': '[module]', 'function': Help, 'help': "Displays help about %s" % config.tipbot_name})
|
RegisterCommand({'module': 'builtin', 'name': 'help', 'parms': '[module]', 'function': Help, 'help': "Displays help about %s" % config.tipbot_name})
|
||||||
RegisterCommand({'module': 'builtin', 'name': 'commands', 'parms': '[module]', 'function': Commands, 'help': "Displays list of commands"})
|
RegisterCommand({'module': 'builtin', 'name': 'commands', 'parms': '[module]', 'function': Commands, 'help': "Displays list of commands"})
|
||||||
|
@ -453,7 +468,7 @@ for network_setup in start_networks:
|
||||||
name=network_name or network_type
|
name=network_name or network_type
|
||||||
try:
|
try:
|
||||||
network=registered_networks[network_type](name=name)
|
network=registered_networks[network_type](name=name)
|
||||||
network.set_callbacks(OnCommandProxy,OnIdentified)
|
network.set_callbacks(OnCommandProxy,OnIdentified,OnEventProxy)
|
||||||
if network.connect():
|
if network.connect():
|
||||||
AddNetwork(network)
|
AddNetwork(network)
|
||||||
except Exception,e:
|
except Exception,e:
|
||||||
|
|
|
@ -14,6 +14,7 @@ from tipbot.utils import *
|
||||||
|
|
||||||
modules = dict()
|
modules = dict()
|
||||||
commands = dict()
|
commands = dict()
|
||||||
|
event_handlers = dict()
|
||||||
calltable=dict()
|
calltable=dict()
|
||||||
|
|
||||||
def SendToProxy(link,msg):
|
def SendToProxy(link,msg):
|
||||||
|
@ -123,6 +124,11 @@ def RegisterCommand(command):
|
||||||
commands[command['name']] = []
|
commands[command['name']] = []
|
||||||
commands[command['name']].append(command)
|
commands[command['name']].append(command)
|
||||||
|
|
||||||
|
def RegisterEventHandler(eh):
|
||||||
|
if not eh['event'] in event_handlers:
|
||||||
|
event_handlers[eh['event']] = []
|
||||||
|
event_handlers[eh['event']].append(eh)
|
||||||
|
|
||||||
def OnCommand(link,cmd,check_admin,check_registered):
|
def OnCommand(link,cmd,check_admin,check_registered):
|
||||||
cmdparts = cmd[0].split(':')
|
cmdparts = cmd[0].split(':')
|
||||||
log_log('cmdparts: %s' % str(cmdparts))
|
log_log('cmdparts: %s' % str(cmdparts))
|
||||||
|
@ -178,6 +184,21 @@ def OnCommand(link,cmd,check_admin,check_registered):
|
||||||
if not silent:
|
if not silent:
|
||||||
link.send("Invalid command, try !help")
|
link.send("Invalid command, try !help")
|
||||||
|
|
||||||
|
def OnEvent(event,*args,**kwargs):
|
||||||
|
log_log('modulename: event %s' % str(event))
|
||||||
|
if not event in event_handlers:
|
||||||
|
return
|
||||||
|
|
||||||
|
for eh in event_handlers[event]:
|
||||||
|
Lock()
|
||||||
|
try:
|
||||||
|
log_log('Calling %s handler from module %s' % (str(event),eh['module']))
|
||||||
|
eh['function'](event,*args,**kwargs)
|
||||||
|
except:
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
Unlock()
|
||||||
|
|
||||||
def RunIdleFunctions(param=None):
|
def RunIdleFunctions(param=None):
|
||||||
for module in modules:
|
for module in modules:
|
||||||
if 'idle' in modules[module]:
|
if 'idle' in modules[module]:
|
||||||
|
@ -201,6 +222,7 @@ def RunModuleHelpFunction(module,link):
|
||||||
|
|
||||||
def UnregisterModule(module):
|
def UnregisterModule(module):
|
||||||
global commands
|
global commands
|
||||||
|
global event_handlers
|
||||||
global idles
|
global idles
|
||||||
|
|
||||||
if not module in modules:
|
if not module in modules:
|
||||||
|
@ -220,4 +242,14 @@ def UnregisterModule(module):
|
||||||
new_commands[cmd] = newlist
|
new_commands[cmd] = newlist
|
||||||
commands = new_commands
|
commands = new_commands
|
||||||
|
|
||||||
|
new_event_handlers = dict()
|
||||||
|
for cmd in event_handlers:
|
||||||
|
newlist = []
|
||||||
|
for c in event_handlers[cmd]:
|
||||||
|
if c['module'] != module:
|
||||||
|
newlist.append(c)
|
||||||
|
if len(newlist) > 0:
|
||||||
|
new_event_handlers[cmd] = newlist
|
||||||
|
event_handlers = new_event_handlers
|
||||||
|
|
||||||
del modules[module]
|
del modules[module]
|
||||||
|
|
|
@ -337,6 +337,8 @@ class IRCNetwork(Network):
|
||||||
else:
|
else:
|
||||||
self.userstable[chan][nick] = None
|
self.userstable[chan][nick] = None
|
||||||
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
||||||
|
if self.on_event:
|
||||||
|
self.on_event('user-joined',link=Link(self,User(self,nick),Group(self,chan)))
|
||||||
|
|
||||||
elif action == 'PART':
|
elif action == 'PART':
|
||||||
nick = GetNick(who)
|
nick = GetNick(who)
|
||||||
|
@ -346,6 +348,8 @@ class IRCNetwork(Network):
|
||||||
else:
|
else:
|
||||||
del self.userstable[chan][nick]
|
del self.userstable[chan][nick]
|
||||||
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
||||||
|
if self.on_event:
|
||||||
|
self.on_event('user-left',link=Link(self,User(self,nick),Group(self,chan)))
|
||||||
|
|
||||||
elif action == 'QUIT':
|
elif action == 'QUIT':
|
||||||
nick = GetNick(who)
|
nick = GetNick(who)
|
||||||
|
@ -357,6 +361,8 @@ class IRCNetwork(Network):
|
||||||
removed_list = removed_list + " " + chan
|
removed_list = removed_list + " " + chan
|
||||||
del self.userstable[chan][nick]
|
del self.userstable[chan][nick]
|
||||||
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
||||||
|
if self.on_event:
|
||||||
|
self.on_event('user-left',link=Link(self,User(self,nick)))
|
||||||
|
|
||||||
elif action == 'KICK':
|
elif action == 'KICK':
|
||||||
nick = parts[3].lower()
|
nick = parts[3].lower()
|
||||||
|
@ -368,6 +374,8 @@ class IRCNetwork(Network):
|
||||||
removed_list = removed_list + " " + chan
|
removed_list = removed_list + " " + chan
|
||||||
del self.userstable[chan][nick]
|
del self.userstable[chan][nick]
|
||||||
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
log_log("New list of users in %s: %s" % (chan, str(self.userstable[chan].keys())))
|
||||||
|
if self.on_event:
|
||||||
|
self.on_event('user-left',link=Link(self,User(self,nick)))
|
||||||
|
|
||||||
elif action == 'NICK':
|
elif action == 'NICK':
|
||||||
nick = GetNick(who)
|
nick = GetNick(who)
|
||||||
|
@ -382,6 +390,8 @@ class IRCNetwork(Network):
|
||||||
else:
|
else:
|
||||||
self.userstable[c][new_nick] = None
|
self.userstable[c][new_nick] = None
|
||||||
log_log("New list of users in %s: %s" % (c, str(self.userstable[c].keys())))
|
log_log("New list of users in %s: %s" % (c, str(self.userstable[c].keys())))
|
||||||
|
if self.on_event:
|
||||||
|
self.on_event('user-name',link=Link(self,User(self,new_nick),Group(self,chan)),old_name=nick)
|
||||||
|
|
||||||
except Exception,e:
|
except Exception,e:
|
||||||
log_error('Exception in top level action processing: %s' % str(e))
|
log_error('Exception in top level action processing: %s' % str(e))
|
||||||
|
|
|
@ -35,9 +35,10 @@ class Network:
|
||||||
def dump_users(self):
|
def dump_users(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def set_callbacks(self,on_command,on_identified):
|
def set_callbacks(self,on_command,on_identified,on_event):
|
||||||
self.on_command=on_command
|
self.on_command=on_command
|
||||||
self.on_identified=on_identified
|
self.on_identified=on_identified
|
||||||
|
self.on_event=on_event
|
||||||
|
|
||||||
def get_last_active_time(self,user_name,group_name=None):
|
def get_last_active_time(self,user_name,group_name=None):
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in a new issue