50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import os
|
|
import re
|
|
|
|
from util import hook
|
|
|
|
|
|
@hook.sieve
|
|
def sieve_suite(bot, input, func, args):
|
|
events = args.get('events', ['PRIVMSG'])
|
|
|
|
if input.command not in events and events != '*':
|
|
return None
|
|
|
|
if input.nick.lower()[-3:] == 'bot' and args.get('ignorebots', True):
|
|
return None
|
|
|
|
regex = args.get('re')
|
|
if not regex:
|
|
hook = args.get('hook', r'(.*)')
|
|
|
|
if args.get('prefix', True):
|
|
if input.chan == input.nick: # private message, prefix not required
|
|
prefix = r'^(?:[.!]?|'
|
|
else:
|
|
prefix = r'^(?:[.!]|'
|
|
hook = prefix + input.conn.nick + r'[:,]*\s)' + hook
|
|
|
|
regex = re.compile(hook, flags=re.I)
|
|
args['re'] = regex
|
|
|
|
input.re = regex.match(input.msg)
|
|
if input.re is None:
|
|
return None
|
|
|
|
acl = bot.config.get('acls', {}).get(func.__name__)
|
|
if acl:
|
|
if 'deny-except' in acl:
|
|
allowed_channels = map(str.lower, acl['deny-except'])
|
|
if input.chan.lower() not in allowed_channels:
|
|
return None
|
|
if 'allow-except' in acl:
|
|
denied_channels = map(str.lower, acl['allow-except'])
|
|
if input.chan.lower() in denied_channels:
|
|
return None
|
|
|
|
input.inp_unstripped = ' '.join(input.re.groups())
|
|
input.inp = input.inp_unstripped.strip()
|
|
|
|
return input
|