mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 11:39:25 +01:00
Add basic command hooks (ref #18)
This commit is contained in:
parent
28e7b52ef4
commit
6370ad492f
14
plugins/hooks.py
Normal file
14
plugins/hooks.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# hooks.py: test of PyLink hooks
|
||||||
|
import sys, os
|
||||||
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
import utils
|
||||||
|
|
||||||
|
def hook_join(irc, source, command, args):
|
||||||
|
print('%s joined channel %s (join hook caught)' % (source, args[0]))
|
||||||
|
utils.add_hook(hook_join, 'join')
|
||||||
|
|
||||||
|
def hook_msg(irc, source, command, args):
|
||||||
|
if utils.isChannel(args[0]) and irc.pseudoclient.nick in args[1]:
|
||||||
|
utils.msg(irc, args[0], 'hi there!')
|
||||||
|
print('%s said my name on channel %s (msg hook caught)' % (source, args[0]))
|
||||||
|
utils.add_hook(hook_msg, 'msg')
|
@ -9,6 +9,11 @@ import traceback
|
|||||||
from classes import *
|
from classes import *
|
||||||
|
|
||||||
uidgen = {}
|
uidgen = {}
|
||||||
|
# Map raw commands to protocol-independent hooks
|
||||||
|
hook_map = {'FJOIN': 'join',
|
||||||
|
'PART': 'part',
|
||||||
|
'QUIT': 'quit',
|
||||||
|
'PRIVMSG': 'msg',}
|
||||||
|
|
||||||
def _sendFromServer(irc, sid, msg):
|
def _sendFromServer(irc, sid, msg):
|
||||||
irc.send(':%s %s' % (sid, msg))
|
irc.send(':%s %s' % (sid, msg))
|
||||||
@ -373,12 +378,23 @@ def handle_events(irc, data):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
return
|
return
|
||||||
|
|
||||||
# We will do wildcard event handling here. Unhandled events are just ignored, yay!
|
cmd = command.lower()
|
||||||
|
# We will do wildcard event handling here. Unhandled events are just ignored.
|
||||||
try:
|
try:
|
||||||
func = globals()['handle_'+command.lower()]
|
func = globals()['handle_'+cmd]
|
||||||
func(irc, numeric, command, args)
|
func(irc, numeric, command, args)
|
||||||
except KeyError: # unhandled event
|
except KeyError: # unhandled event
|
||||||
pass
|
pass
|
||||||
|
else:
|
||||||
|
# All is well; we'll let our hooks do work now.
|
||||||
|
if command in hook_map: # If this is a hook-enabled event
|
||||||
|
# Iterate over hooked functions, catching errors accordingly
|
||||||
|
for hook_func in utils.command_hooks[hook_map[command]]:
|
||||||
|
try:
|
||||||
|
hook_func(irc, numeric, command, args)
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
continue
|
||||||
|
|
||||||
def spawnServer(irc, name, sid, uplink=None, desc='PyLink Server'):
|
def spawnServer(irc, name, sid, uplink=None, desc='PyLink Server'):
|
||||||
# -> :0AL SERVER test.server * 1 0AM :some silly pseudoserver
|
# -> :0AL SERVER test.server * 1 0AM :some silly pseudoserver
|
||||||
|
9
utils.py
9
utils.py
@ -1,9 +1,11 @@
|
|||||||
import string
|
import string
|
||||||
import re
|
import re
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
global bot_commands
|
global bot_commands, command_hooks
|
||||||
# This should be a mapping of command names to functions
|
# This should be a mapping of command names to functions
|
||||||
bot_commands = {}
|
bot_commands = {}
|
||||||
|
command_hooks = defaultdict(list)
|
||||||
|
|
||||||
class TS6UIDGenerator():
|
class TS6UIDGenerator():
|
||||||
"""TS6 UID Generator module, adapted from InspIRCd source
|
"""TS6 UID Generator module, adapted from InspIRCd source
|
||||||
@ -45,6 +47,11 @@ def add_cmd(func, name=None):
|
|||||||
name = name.lower()
|
name = name.lower()
|
||||||
bot_commands[name] = func
|
bot_commands[name] = func
|
||||||
|
|
||||||
|
def add_hook(func, command):
|
||||||
|
"""Add a hook <func> for command <command>."""
|
||||||
|
command = command.lower()
|
||||||
|
command_hooks[command].append(func)
|
||||||
|
|
||||||
def nickToUid(irc, nick):
|
def nickToUid(irc, nick):
|
||||||
for k, v in irc.users.items():
|
for k, v in irc.users.items():
|
||||||
if v.nick == nick:
|
if v.nick == nick:
|
||||||
|
Loading…
Reference in New Issue
Block a user