3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-27 21:19:31 +01:00

relay_clientbot: skip relaying non-PRIVMSGs for X seconds after connect

This can be configured via the option relay::clientbot_startup_delay, and defaults to 5 seconds.
This commit is contained in:
James Lu 2016-08-08 22:20:31 -07:00
parent df4277e530
commit 1b747bf09d

View File

@ -1,6 +1,7 @@
# relay_clientbot.py: Clientbot extensions for Relay # relay_clientbot.py: Clientbot extensions for Relay
import string import string
import collections import collections
import time
from pylinkirc import utils, conf, world from pylinkirc import utils, conf, world
from pylinkirc.log import log from pylinkirc.log import log
@ -43,6 +44,11 @@ def cb_relay_core(irc, source, command, args):
except KeyError: # User has left due to /quit except KeyError: # User has left due to /quit
sourcename = args['userdata'].nick sourcename = args['userdata'].nick
relay_conf = conf.conf.get('relay', {})
# Be less floody on startup: don't relay non-PRIVMSGs for the first X seconds after connect.
startup_delay = relay_conf.get('startup_delay', 5)
# Special case for CTCPs. # Special case for CTCPs.
if real_command == 'MESSAGE': if real_command == 'MESSAGE':
# CTCP action, format accordingly # CTCP action, format accordingly
@ -56,11 +62,15 @@ def cb_relay_core(irc, source, command, args):
return return
elif args.get('is_notice'): # Different syntax for notices elif args.get('is_notice'): # Different syntax for notices
real_command = 'NOTICE' real_command = 'NOTICE'
elif (time.time() - irc.start_ts) < startup_delay:
log.debug('(%s) relay_cb_core: Not relaying %s because of startup delay of %s.', irc.name,
real_command, startup_delay)
return
# .get() chains are lovely. Try to fetch the format for the given command from the # Try to fetch the format for the given command from the relay:clientbot_styles:$command
# relay:clientbot_format:$command key, falling back to one defined in default_styles # key, falling back to one defined in default_styles above, and then nothing if not found
# above, and then nothing if not found. # there.
text_template = conf.conf.get('relay', {}).get('clientbot_styles', {}).get(real_command, text_template = relay_conf.get('clientbot_styles', {}).get(real_command,
default_styles.get(real_command, '')) default_styles.get(real_command, ''))
text_template = string.Template(text_template) text_template = string.Template(text_template)
@ -126,6 +136,8 @@ def cb_relay_core(irc, source, command, args):
# still have to be relayed as such. # still have to be relayed as such.
nicklist = args.get('nicks') nicklist = args.get('nicks')
if nicklist: if nicklist:
# Get channel-specific nick list if relevent.
if type(nicklist) == collections.defaultdict: if type(nicklist) == collections.defaultdict:
nicklist = nicklist.get(channel, []) nicklist = nicklist.get(channel, [])