From bf42109d8191c8a9c363fee8379df8d32967c49e Mon Sep 17 00:00:00 2001 From: James Lu Date: Fri, 10 Mar 2017 23:42:45 -0800 Subject: [PATCH] Split fantasy prefix definitions into service-specific blocks Closes #426. This makes the pylink::prefix (aka bot::prefix) option only affect the main PyLink bot, and deprecates the pylink::prefixes::<...> options. As the bot: config block is no longer checked, this commit depends on commit 45ed5b962e215763f7659631d1b98a5031dbab92 (ref #343) to alias it to conf::pylink. --- example-conf.yml | 28 ++++++++++++++++++++-------- plugins/fantasy.py | 17 +++++++---------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/example-conf.yml b/example-conf.yml index 914092b..f28f451 100644 --- a/example-conf.yml +++ b/example-conf.yml @@ -15,18 +15,23 @@ pylink: # Server description (shown in /links, /whois, etc.) serverdesc: PyLink Server - # Sets the default fantasy command prefix for calling commands inside channels - # (requires fantasy plugin). + # Sets the fantasy command prefix for the main PyLink bot. To configure fantasy prefixes for + # other service bots, add or modify the "prefix:" option in the configuration section of each + # plugin. + # Note: prior to PyLink 1.2, defining a prefix here made it global for all service bots. This + # was removed because it called all bots in a channel at once (even if they have conflicting + # commands), which usually led to one successful reply and a string of "Command not found" + # errors. prefix: "&" - # Determines whether the bot will reply to commands prefixed with its nick - # (case sensitive and requires the fantasy plugin). + # Whether service bots will respond to commands prefixes with their nick. respondtonick: true - # Custom fantasy command prefixes for other service bots if they are loaded - # (requires fantasy plugin). - prefixes: - games: "@" + # Custom prefixes for other service bots if they are loaded. Note: this is deprecated + # since PyLink 1.2 in favour of adding prefixes into each plugin's configuration block + # itself (see the "prefix:" option in the "games:" block in this case). + #prefixes: + # games: "@" # Determines whether hideoper modes should be respected in WHOIS replies. # Defaults to true if not specified. @@ -638,10 +643,17 @@ automode: # This option overrides the global "spawn_services" option defined in "pylink:". #spawn_service: true + # Defines a fantasy prefix for the Automode bot (requires spawn_services to be set and the + # fantasy plugin to be loaded). + prefix: "@" + games: # Sets the nick of the Games service, if you're using it. This defaults to "games" if not defined. nick: Games + # Defines a fantasy prefix for the Games bot. + prefix: "./" + stats: # Determines the time format that the Stats plugin should use for showing dates + times. # Defaults to "%a, %d %b %Y %H:%M:%S +0000" (the RFC 2812 standard) if not specified. diff --git a/plugins/fantasy.py b/plugins/fantasy.py index c407d82..41c2d23 100644 --- a/plugins/fantasy.py +++ b/plugins/fantasy.py @@ -29,11 +29,10 @@ def handle_fantasy(irc, source, command, args): servuid = sbot.uids.get(irc.name) if servuid in irc.channels[channel].users: - # Try to look up a prefix specific for this bot in - # bot: prefixes: , falling back to the default prefix if not - # specified. - prefixes = [conf.conf['bot'].get('prefixes', {}).get(botname) or - conf.conf['bot'].get('prefix')] + # Look up a string prefix for this bot in either its own configuration block, or + # in bot::prefixes::. + prefixes = [conf.conf.get(botname, {}).get('prefix', + conf.conf['bot'].get('prefixes', {}).get(botname))] # If responding to nick is enabled, add variations of the current nick # to the prefix list: "," and ":" @@ -43,14 +42,12 @@ def handle_fantasy(irc, source, command, args): prefixes += [nick+',', nick+':'] if not any(prefixes): - # We finished with an empty prefixes list, meaning fantasy is misconfigured! - log.warning("(%s) Fantasy prefix for bot %s was not set in configuration - " - "fantasy commands will not work!", irc.name, botname) + # No prefixes were set, so skip. continue lowered_text = irc.toLower(orig_text) - for prefix in prefixes: # Cycle through the prefixes list we finished with. - if prefix and lowered_text.startswith(prefix): + for prefix in filter(None, prefixes): # Cycle through the prefixes list we finished with. + if lowered_text.startswith(prefix): # Cut off the length of the prefix from the text. text = orig_text[len(prefix):]