From 09b406e68533a65d66b73bfa7c4376465bab4b13 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 11 May 2019 17:27:45 -0400 Subject: [PATCH 01/56] Add more AI --- sopel_modules/SpiceBot_AI/AI_Really.py | 18 ++++++++++++++++++ sopel_modules/SpiceBot_AI/AI_Welcomeback.py | 13 +++++++++++++ sopel_modules/SpiceBot_AI/__init__.py | 2 ++ 3 files changed, 33 insertions(+) create mode 100644 sopel_modules/SpiceBot_AI/AI_Really.py create mode 100644 sopel_modules/SpiceBot_AI/AI_Welcomeback.py diff --git a/sopel_modules/SpiceBot_AI/AI_Really.py b/sopel_modules/SpiceBot_AI/AI_Really.py new file mode 100644 index 0000000..2a36402 --- /dev/null +++ b/sopel_modules/SpiceBot_AI/AI_Really.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +import spicemanip + + +@sopel.module.rule(r'(?i)(really),? $nickname\?') +def bot_command_really(bot, trigger): + really = spicemanip.main(["Yes, really.", "Really really"], "random") + bot.reply(really) + + +@sopel.module.rule('$nickname really\?') +def bot_command_really_b(bot, trigger): + bot_command_really(bot, trigger) diff --git a/sopel_modules/SpiceBot_AI/AI_Welcomeback.py b/sopel_modules/SpiceBot_AI/AI_Welcomeback.py new file mode 100644 index 0000000..334d8cb --- /dev/null +++ b/sopel_modules/SpiceBot_AI/AI_Welcomeback.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +import spicemanip + + +@sopel.module.rule(r'(?i)(welcome back),? $nickname\?') +def bot_command_really(bot, trigger): + reply = spicemanip.main(['Thank you', 'thanks'], "random") + bot.reply(reply) diff --git a/sopel_modules/SpiceBot_AI/__init__.py b/sopel_modules/SpiceBot_AI/__init__.py index 93aecc7..509146e 100644 --- a/sopel_modules/SpiceBot_AI/__init__.py +++ b/sopel_modules/SpiceBot_AI/__init__.py @@ -10,6 +10,8 @@ from .AI_Lazy import * from .AI_InsultHandler import * from .AI_Ping import * from .AI_Love import * +from .AI_Really import * +from .AI_Welcomeback import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' From ef39efd6ace883cd58b17898a5022ecde249dddc Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 09:43:33 -0400 Subject: [PATCH 02/56] Update install file --- Installation Files/requirements-os.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Installation Files/requirements-os.sh b/Installation Files/requirements-os.sh index 0df25d2..0c980a2 100644 --- a/Installation Files/requirements-os.sh +++ b/Installation Files/requirements-os.sh @@ -20,7 +20,8 @@ rm dev-requirements.txt wget https://raw.githubusercontent.com/SpiceBot/SpiceBot/development/Installation%20Files/requirements.txt pip3 install -r requirements.txt rm requirements.txt -pip3 install sopel +# pip3 install sopel +pip3 install --upgrade --force-reinstall git+https://github.com/sopel-irc/sopel@master mkdir /usr/local/lib/python3.6/dist-packages/sopel/modules/stock mv /usr/local/lib/python3.6/dist-packages/sopel/modules/* /usr/local/lib/python3.6/dist-packages/sopel/modules/stock/ From 99b8fa45ed67006496b36d2f12ad7004fed6abd6 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 10:11:20 -0400 Subject: [PATCH 03/56] update database deletion key --- sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py index 26fc511..e6c4e29 100644 --- a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py +++ b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py @@ -38,7 +38,7 @@ class SopelDBCache: .one_or_none() # NickValue exists, delete if result: - session.delete(result.value) + session.delete(result) session.commit() except SQLAlchemyError: session.rollback() @@ -85,7 +85,7 @@ class SopelDBCache: .one_or_none() # ChannelValue exists, update if result: - session.delete(result.value) + session.delete(result) session.commit() except SQLAlchemyError: session.rollback() From d0c95e128ea41f36a97df5b6968926bbd42baa21 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 10:15:22 -0400 Subject: [PATCH 04/56] readd adjusts --- sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py index e6c4e29..bc74932 100644 --- a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py +++ b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py @@ -17,9 +17,9 @@ def setup(bot): # Inject Database Functions bot_logging(bot, 'SpiceBot_Databaseaddons', "Implanting Database functions into bot") SopelDB.delete_nick_value = SopelDBCache.delete_nick_value - # SopelDB.adjust_nick_value = SopelDBCache.adjust_nick_value + SopelDB.adjust_nick_value = SopelDBCache.adjust_nick_value SopelDB.delete_channel_value = SopelDBCache.delete_channel_value - # SopelDB.adjust_channel_value = SopelDBCache.adjust_channel_value + SopelDB.adjust_channel_value = SopelDBCache.adjust_channel_value class SopelDBCache: From 4637220fd5fa3aef44c299f5d4e33f0fdb0e26b8 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 12:04:53 -0400 Subject: [PATCH 05/56] Adjust to dictionanry format --- sopel_modules/SpiceBot_Events/System.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index cd7a874..de5492a 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel from sopel.trigger import PreTrigger +# import functools from sopel_modules.SpiceBot_SBTools import bot_logging @@ -18,12 +19,12 @@ class BotEvents(object): """ def __init__(self): - self.usednumbers = [1000] + self.SpiceBot_Events = {"assigned_IDs": [1000]} def __getattr__(self, name): ''' will only get called for undefined attributes ''' - eventnumber = max(self.usednumbers) + 1 - self.usednumbers.append(eventnumber) + eventnumber = max(self.SpiceBot_Events["assigned_IDs"]) + 1 + self.SpiceBot_Events["assigned_IDs"].append(eventnumber) setattr(self, name, str(eventnumber)) return str(eventnumber) @@ -31,6 +32,18 @@ class BotEvents(object): botevents = BotEvents() +""" +def register_trigger(number, message): + def actual_decorator(function): + @functools.wraps(function) + def _nop(*args, **kwargs): + # Assign trigger and bot for easy access later + bot, trigger = args[0:2] + return function(*args, **kwargs) + return _nop +""" + + def setup(bot): bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") bot_events_setup_check(bot) From 0269ad567da530087d470f78f28da3507d7b52a5 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 12:45:03 -0400 Subject: [PATCH 06/56] update configuration for flood control methods --- sopel_modules/SpiceBot_osd/__init__.py | 78 +++++++++++++++----------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/sopel_modules/SpiceBot_osd/__init__.py b/sopel_modules/SpiceBot_osd/__init__.py index 7bd3142..905fd71 100644 --- a/sopel_modules/SpiceBot_osd/__init__.py +++ b/sopel_modules/SpiceBot_osd/__init__.py @@ -27,9 +27,13 @@ __version__ = '0.1.2' def configure(config): - config.define_section("MAXTARGCONFIG", MAXTARGCONFIG, validate=False) - config.MAXTARGCONFIG.configure_setting('notice', 'MAXTARG limit for NOTICE') - config.MAXTARGCONFIG.configure_setting('privmsg', 'MAXTARG limit for PRIVMSG') + config.define_section("SpiceBot_OSD", SpiceBot_OSD, validate=False) + config.SpiceBot_OSD.configure_setting('notice', 'MAXTARG limit for NOTICE') + config.SpiceBot_OSD.configure_setting('privmsg', 'MAXTARG limit for PRIVMSG') + config.SpiceBot_OSD.configure_setting('flood_burst_lines', 'How many messages can be sent in burst mode.') + config.SpiceBot_OSD.configure_setting('flood_empty_wait', 'How long to wait between sending messages when not in burst mode, in seconds.') + config.SpiceBot_OSD.configure_setting('flood_refill_rate', 'How quickly burst mode recovers, in messages per second.') + config.SpiceBot_OSD.configure_setting('flood_dots', 'Display dots instead of spam.') def setup(bot): @@ -57,7 +61,7 @@ def setup(bot): # verify config settings for server bot_logging(bot, 'SpiceBot_OSD', "Checking for config settings") - bot.config.define_section("MAXTARGCONFIG", MAXTARGCONFIG, validate=False) + bot.config.define_section("SpiceBot_OSD", SpiceBot_OSD, validate=False) @module.event('005') @@ -80,15 +84,29 @@ def parse_event_005(bot, trigger): value = None if value: if settingname.upper() == 'NOTICE': - bot.config.MAXTARGCONFIG.notice = int(value) + bot.config.SpiceBot_OSD.notice = int(value) elif settingname.upper() == 'PRIVMSG': - bot.config.MAXTARGCONFIG.privmsg = int(value) + bot.config.SpiceBot_OSD.privmsg = int(value) -class MAXTARGCONFIG(StaticSection): +class SpiceBot_OSD(StaticSection): + + """MAXTARG""" notice = ValidatedAttribute('notice', default=1) privmsg = ValidatedAttribute('privmsg', default=1) + flood_burst_lines = ValidatedAttribute('flood_burst_lines', int, default=4) + """How many messages can be sent in burst mode.""" + + flood_empty_wait = ValidatedAttribute('flood_empty_wait', float, default=0.7) + """How long to wait between sending messages when not in burst mode, in seconds.""" + + flood_refill_rate = ValidatedAttribute('flood_refill_rate', int, default=1) + """How quickly burst mode recovers, in messages per second.""" + + flood_dots = ValidatedAttribute('flood_dots', default=True) + """Display dots instead of spam.""" + class ToolsOSD: @@ -117,9 +135,9 @@ class ToolsOSD: raise ValueError("Recipients list empty.") if text_method == 'NOTICE': - maxtargets = bot.config.MAXTARGCONFIG.notice + maxtargets = bot.config.SpiceBot_OSD.notice elif text_method in ['PRIVMSG', 'ACTION']: - maxtargets = bot.config.MAXTARGCONFIG.privmsg + maxtargets = bot.config.SpiceBot_OSD.privmsg maxtargets = int(maxtargets) recipientgroups = [] @@ -259,17 +277,12 @@ class SopelOSD: for recipientgroup in recipientgroups: text_method = text_method_orig - # No messages within the last 3 seconds? Go ahead! - # Otherwise, wait so it's been at least 0.8 seconds + penalty - recipient_id = Identifier(recipientgroup) recipient_stack = self.stack.setdefault(recipient_id, { 'messages': [], - 'flood_left': 4, + 'flood_left': self.config.SpiceBot_OSD.flood_burst_lines, 'dots': 0, - # TODO - # 'flood_left': self.config.core.flood_burst_lines, }) recipient_stack['dots'] = 0 @@ -281,32 +294,30 @@ class SopelOSD: if not recipient_stack['flood_left']: elapsed = time.time() - recipient_stack['messages'][-1][0] - # TODO - # recipient_stack['flood_left'] = min( - # self.config.core.flood_burst_lines, - # int(elapsed) * self.config.core.flood_refill_rate) - recipient_stack['flood_left'] = min(4, int(elapsed) * 1) + recipient_stack['flood_left'] = min( + self.config.SpiceBot_OSD.flood_burst_lines, + int(elapsed) * self.config.SpiceBot_OSD.flood_refill_rate) if not recipient_stack['flood_left']: elapsed = time.time() - recipient_stack['messages'][-1][0] penalty = float(max(0, len(text) - 50)) / 70 # Never wait more than 2 seconds - # wait = min(self.config.core.flood_empty_wait + penalty, 2) # TODO - wait = min(0.7 + penalty, 2) + wait = min(self.config.SpiceBot_OSD.flood_empty_wait + penalty, 2) if elapsed < wait: time.sleep(wait - elapsed) # Loop detection messages = [m[1] for m in recipient_stack['messages'][-8:]] - # If what we about to send repeated at least 5 times in the - # last 2 minutes, replace with '...' - if messages.count(text) >= 5 and elapsed < 120: - recipient_stack['dots'] += 1 - else: - recipient_stack['dots'] = 0 + if self.config.SpiceBot_OSD.flood_dots: + # If what we about to send repeated at least 5 times in the + # last 2 minutes, replace with '...' + if messages.count(text) >= 5 and elapsed < 120: + recipient_stack['dots'] += 1 + else: + recipient_stack['dots'] = 0 - if not recipient_stack['dots'] >= 3: + if recipient_stack['dots'] <= 3: recipient_stack['flood_left'] = max(0, recipient_stack['flood_left'] - 1) recipient_stack['messages'].append((time.time(), self.safe(text))) @@ -377,7 +388,10 @@ class SopelOSD: self.osd(text, dest, 'PRIVMSG', max_messages) def msg(self, recipient, text, max_messages=1): - # Deprecated, but way too much of a pain to remove. + """ + .. deprecated:: 6.0 + Use :meth:`say` instead. Will be removed in Sopel 8. + """ self.osd(text, recipient, 'PRIVMSG', max_messages) @@ -392,19 +406,16 @@ class SopelWrapperOSD(object): if destination is None: destination = self._trigger.sender self._bot.osd(self, message, destination, 'PRIVMSG', 1) - # self._bot.say(message, destination, max_messages) def action(self, message, destination=None, max_messages=1): if destination is None: destination = self._trigger.sender self._bot.osd(self, message, destination, 'ACTION', 1) - # self._bot.action(message, destination, max_messages) def notice(self, message, destination=None, max_messages=1): if destination is None: destination = self._trigger.sender self._bot.osd(self, message, destination, 'NOTICE', 1) - # self._bot.notice(message, destination, max_messages) def reply(self, message, destination=None, reply_to=None, notice=False, max_messages=1): if destination is None: @@ -416,4 +427,3 @@ class SopelWrapperOSD(object): self._bot.osd(self, message, destination, 'NOTICE', 1) else: self._bot.osd(self, message, destination, 'PRIVMSG', 1) - # self._bot.reply(message, destination, reply_to, notice, max_messages) From 805e075e6c613cad16bddd6992ffc33bcb8d7589 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 14:44:44 -0400 Subject: [PATCH 07/56] Update KICK, and prepare for another overhault of the event system --- sopel_modules/SpiceBot_Events/System.py | 56 ++++++++++++++++++++++++- sopel_modules/SpiceBot_Kick/__init__.py | 18 ++++---- 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index de5492a..b341965 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -16,10 +16,20 @@ class BotEvents(object): Events will be assigned a 4-digit number above 1000. This allows you to do, ``@module.event(botevents.BOT_WELCOME)```` + + Triggers handled by this module will be processed immediately. + Others will be placed into a queue. + + Triggers will be logged by ID and content """ def __init__(self): - self.SpiceBot_Events = {"assigned_IDs": [1000]} + self.SpiceBot_Events = { + "assigned_IDs": [1000], + "triggers_recieved": {}, + "trigger_queue": [], + "startup_required": [] + } def __getattr__(self, name): ''' will only get called for undefined attributes ''' @@ -28,6 +38,44 @@ class BotEvents(object): setattr(self, name, str(eventnumber)) return str(eventnumber) + def trigger(self, number, message="SpiceBot_Events"): + number = str(number) + if number in [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED]: + pretrigger = PreTrigger( + sopel.bot.nick, + ":SpiceBot_Events " + number + " " + str(sopel.bot.nick) + " :" + message + ) + sopel.bot.dispatch(pretrigger) + else: + pretriggerdict = {"number": number, "message": message} + self.SpiceBot_Events["trigger_queue"].append(pretriggerdict) + + def recieved(self, trigger): + eventnumber = str(trigger.event) + message_payload = trigger.args[1] + if eventnumber not in self.SpiceBot_Events["triggers_recieved"]: + self.SpiceBot_Events["triggers_recieved"][eventnumber] = [] + self.SpiceBot_Events["assigned_IDs"]["triggers_recieved"][eventnumber].append(message_payload) + + def check(self, checklist): + if not isinstance(checklist, list): + checklist = [str(checklist)] + for number in checklist: + if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys(): + return False + return True + + def startup_add(self, startlist): + if not isinstance(startlist, list): + startlist = [str(startlist)] + self.SpiceBot_Events["startup_required"].extend(startlist) + + def startup_check(self): + for number in self.SpiceBot_Events["startup_required"]: + if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys(): + return False + return True + botevents = BotEvents() @@ -41,6 +89,12 @@ def register_trigger(number, message): bot, trigger = args[0:2] return function(*args, **kwargs) return _nop + +ideas: + + while not bot_events_check(bot, [botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + pass + """ diff --git a/sopel_modules/SpiceBot_Kick/__init__.py b/sopel_modules/SpiceBot_Kick/__init__.py index c752bd4..44b8ea5 100644 --- a/sopel_modules/SpiceBot_Kick/__init__.py +++ b/sopel_modules/SpiceBot_Kick/__init__.py @@ -12,7 +12,6 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.bot from sopel import tools, module from sopel.tools import Identifier -from sopel.module import HALFOP from sopel.config.types import StaticSection, ValidatedAttribute from sopel_modules.SpiceBot_SBTools import bot_logging @@ -28,8 +27,8 @@ __version__ = '0.1.2' def configure(config): - config.define_section("MAXTARGCONFIG_KICK", MAXTARGCONFIG_KICK, validate=False) - config.MAXTARGCONFIG_KICK.configure_setting('kick', 'MAXTARG limit for KICK') + config.define_section("SpiceBot_Kick", SpiceBot_Kick, validate=False) + config.SpiceBot_Kick.configure_setting('kick', 'MAXTARG limit for KICK') def setup(bot): @@ -41,7 +40,7 @@ def setup(bot): # verify config settings for server bot_logging(bot, 'SpiceBot_Kick', "Checking for config settings") - bot.config.define_section("MAXTARGCONFIG_KICK", MAXTARGCONFIG_KICK, validate=False) + bot.config.define_section("SpiceBot_Kick", SpiceBot_Kick, validate=False) @module.event('005') @@ -63,10 +62,10 @@ def parse_event_005(bot, trigger): except IndexError: value = None if value: - bot.config.MAXTARGCONFIG_KICK.kick = int(value) + bot.config.SpiceBot_Kick.kick = int(value) -class MAXTARGCONFIG_KICK(StaticSection): +class SpiceBot_Kick(StaticSection): kick = ValidatedAttribute('kick', default=1) @@ -80,8 +79,7 @@ class SopelKICK: The bot must be a channel operator in specified channel for this to work. .. versionadded:: 7.0 """ - if self.channels[channel].privileges[self.nick] < HALFOP: - self.write(['KICK', channel, nick], text) + self.write(['KICK', channel, nick], text) class SopelWrapperKICK(object): @@ -89,9 +87,9 @@ class SopelWrapperKICK(object): def kick(self, nick, channel=None, message=None): if channel is None: if self._trigger.is_privmsg: - return + raise RuntimeError('Error: KICK requires a channel.') else: channel = self._trigger.sender if nick is None: - return + raise RuntimeError('Error: KICK requires a nick.') self._bot.kick(nick, channel, message) From 39a246d9e7956f47f892f1e535d2907d5daa4c75 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 15:37:19 -0400 Subject: [PATCH 08/56] First hardcore test of new class system --- sopel_modules/SpiceBot_AI/AI.py | 4 +- sopel_modules/SpiceBot_Channels/Channels.py | 10 +-- .../SpiceBot_Channels/Channels_Command.py | 4 +- .../SpiceBot_CommandsQuery/CommandsQuery.py | 10 +-- .../NickQueryCommand.py | 4 +- .../SpiceBot_CommandsQuery/QueryCommand.py | 4 +- sopel_modules/SpiceBot_Events/Events.py | 44 +++++------ sopel_modules/SpiceBot_Events/System.py | 79 +------------------ sopel_modules/SpiceBot_GifSearch/gif.py | 4 +- sopel_modules/SpiceBot_GifSearch/gifapi.py | 4 +- sopel_modules/SpiceBot_GifSearch/gifsearch.py | 8 +- .../SpiceBot_InvalidCommand/InvalidCommand.py | 6 +- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 4 +- sopel_modules/SpiceBot_Logs/Logs.py | 10 +-- sopel_modules/SpiceBot_Logs/Logs_Command.py | 4 +- .../StartupMonologue.py | 6 +- .../StartupMonologue_Display.py | 18 ++--- 17 files changed, 71 insertions(+), 152 deletions(-) diff --git a/sopel_modules/SpiceBot_AI/AI.py b/sopel_modules/SpiceBot_AI/AI.py index 7ae029b..6927abb 100644 --- a/sopel_modules/SpiceBot_AI/AI.py +++ b/sopel_modules/SpiceBot_AI/AI.py @@ -7,13 +7,13 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, googlesearch, bot_privs, inlist, inlist_match, similar_list -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents @sopel.module.nickname_commands('(.*)') def bot_command_nick(bot, trigger): - while not bot_events_check(bot, [botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 5bb11d6..69aaa06 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute -from sopel_modules.SpiceBot_Events.System import bot_events_startup_register, bot_events_recieved, bot_events_trigger, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import ( join_all_channels, chanadmin_all_channels, channel_list_current, bot_logging @@ -34,7 +34,7 @@ def configure(config): def setup(bot): bot_logging(bot, 'SpiceBot_Channels', "Starting setup procedure") - bot_events_startup_register(bot, [botevents.BOT_CHANNELS]) + botevents.startup_add([botevents.BOT_CHANNELS]) bot.config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) @@ -50,7 +50,7 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def trigger_channel_list_initial(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) # Unkickable bot.write(('SAMODE', bot.nick, '+q')) @@ -74,7 +74,7 @@ def trigger_channel_list_initial(bot, trigger): channel_list_current(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot_logging(bot, 'SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") - bot_events_trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") + botevents.trigger(botevents.BOT_CHANNELS, "SpiceBot_Channels") join_all_channels(bot) chanadmin_all_channels(bot) @@ -126,4 +126,4 @@ def bot_part_empty(bot): @sopel.module.event(botevents.BOT_CHANNELS) @sopel.module.rule('.*') def bot_events_setup(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index c7e69bc..df4010d 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -6,7 +6,7 @@ import sopel.module import spicemanip -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import ( sopel_triggerargs, inlist, channel_privs, join_all_channels, channel_list_current, @@ -17,7 +17,7 @@ from .Channels import bot_part_empty @sopel.module.nickname_commands('channels', 'channel') def nickname_comand_channels(bot, trigger): - while not bot_events_check(bot, botevents.BOT_LOADED): + while not botevents.check(botevents.BOT_LOADED): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py index 434630e..a9d115d 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py +++ b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py @@ -7,7 +7,7 @@ import sopel.module import os -from sopel_modules.SpiceBot_Events.System import bot_events_startup_register, bot_events_recieved, bot_events_trigger, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import bot_logging import spicemanip @@ -15,7 +15,7 @@ import spicemanip def setup(bot): bot_logging(bot, 'SpiceBot_CommandsQuery', "Starting setup procedure") - bot_events_startup_register(bot, [botevents.BOT_COMMANDSQUERY]) + botevents.startup_add([botevents.BOT_COMMANDSQUERY]) if 'SpiceBot_CommandsQuery' not in bot.memory: bot.memory['SpiceBot_CommandsQuery'] = {"counts": 0, "commands": {}, "nickrules": []} @@ -162,7 +162,7 @@ def setup(bot): if command not in bot.memory['SpiceBot_CommandsQuery']['nickrules']: bot.memory['SpiceBot_CommandsQuery']['nickrules'].append(command) - bot_events_trigger(bot, botevents.BOT_COMMANDSQUERY, "SpiceBot_CommandsQuery") + botevents.trigger(botevents.BOT_COMMANDSQUERY, "SpiceBot_CommandsQuery") def shutdown(bot): @@ -173,7 +173,7 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) for comtype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): if comtype not in ['module', 'nickname', 'rule']: @@ -217,4 +217,4 @@ def commandsquery_register(bot, command_type, validcoms, aliasfor=None): @sopel.module.event(botevents.BOT_COMMANDSQUERY) @sopel.module.rule('.*') def bot_events_setup(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py index 67782f3..c618737 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel import sopel.module -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, letters_in_string @@ -15,7 +15,7 @@ import spicemanip @sopel.module.nickname_commands('(.*)') def query_detection_nick(bot, trigger): - while not bot_events_check(bot, botevents.BOT_COMMANDSQUERY): + while not botevents.check(botevents.BOT_COMMANDSQUERY): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py index 8f8011b..81d60f2 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel import sopel.module -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, letters_in_string @@ -15,7 +15,7 @@ import spicemanip @sopel.module.rule('^\?(.*)') def query_detection(bot, trigger): - while not bot_events_check(bot, botevents.BOT_COMMANDSQUERY): + while not botevents.check(botevents.BOT_COMMANDSQUERY): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'query_command') diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 730cb4f..ebd095e 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.trigger import PreTrigger -from .System import bot_events_trigger, bot_events_recieved, bot_events_startup_check, bot_events_setup_check, botevents +from .System import botevents from sopel_modules.SpiceBot_SBTools import bot_logging import time @@ -14,59 +14,53 @@ import time @sopel.module.event('001') @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): - bot_events_trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") + botevents.trigger(botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") while not len(bot.channels.keys()) > 0: pass time.sleep(1) - bot_events_trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") + botevents.trigger(botevents.BOT_CONNECTED, "Bot Connected to IRC") @sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_start(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) - bot_events_trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") + botevents.trigger(botevents.BOT_READY, "Ready To Process module setup procedures") - while not bot_events_startup_check(bot): + while not botevents.startup_check(): pass - bot_events_trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") + botevents.trigger(botevents.BOT_LOADED, "All registered modules setup procedures have completed") @sopel.module.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_ready(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - bot_events_recieved(bot, trigger.event) - - bot_events_setup_check(bot) - + botevents.recieved(trigger) while True: - try: - if len(bot.memory['SpiceBot_Events']["queue"]): - number = bot.memory['SpiceBot_Events']["queue"][0]["number"] - message = bot.memory['SpiceBot_Events']["queue"][0]["message"] - pretrigger = PreTrigger( - bot.nick, - ":SpiceBot_Events " + str(number) + " " + str(bot.nick) + " :" + message - ) - bot.dispatch(pretrigger) - del bot.memory['SpiceBot_Events']["queue"][0] - except KeyError: - return + if len(botevents.SpiceBot_Events["trigger_queue"]): + number = botevents.SpiceBot_Events["trigger_queue"][0]["number"] + message = botevents.SpiceBot_Events["trigger_queue"][0]["message"] + pretrigger = PreTrigger( + bot.nick, + ":SpiceBot_Events " + str(number) + " " + str(bot.nick) + " :" + message + ) + bot.dispatch(pretrigger) + del botevents.SpiceBot_Events["trigger_queue"][0] @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index b341965..b5b9aed 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -92,7 +92,7 @@ def register_trigger(number, message): ideas: - while not bot_events_check(bot, [botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): pass """ @@ -100,79 +100,4 @@ ideas: def setup(bot): bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") - bot_events_setup_check(bot) - bot_events_startup_register(bot, [botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) - - -def shutdown(bot): - if "SpiceBot_Events" in bot.memory: - del bot.memory["SpiceBot_Events"] - - -def bot_events_trigger(bot, number, message): - - bot_events_setup_check(bot) - - bot.memory["SpiceBot_Events"]["triggers"][str(number)] = message - if str(number) in [botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]: - pretrigger = PreTrigger( - bot.nick, - ":SpiceBot_Events " + str(number) + " " + str(bot.nick) + " :" + message - ) - bot.dispatch(pretrigger) - else: - pretriggerdict = {"number": number, "message": message} - bot.memory['SpiceBot_Events']["queue"].append(pretriggerdict) - - -def bot_events_setup_check(bot): - if "SpiceBot_Events" not in bot.memory: - bot.memory["SpiceBot_Events"] = {"triggers": {}, "startup": [], "loaded": [], "queue": []} - - -def bot_events_check(bot, listreq): - - bot_events_setup_check(bot) - - if not isinstance(listreq, list): - listreq = [str(listreq)] - - for requirement in listreq: - if requirement not in bot.memory["SpiceBot_Events"]["loaded"]: - return False - - return True - - -def bot_events_startup_register(bot, addonreq): - - bot_events_setup_check(bot) - - if not isinstance(addonreq, list): - addonreq = [str(addonreq)] - - bot.memory["SpiceBot_Events"]["startup"].extend(addonreq) - - -def bot_events_recieved(bot, number): - - bot_events_setup_check(bot) - - if str(number) not in bot.memory["SpiceBot_Events"]["loaded"]: - bot.memory["SpiceBot_Events"]["loaded"].append(str(number)) - - -def bot_events_startup_check(bot): - - bot_events_setup_check(bot) - - notcomplete = [] - - for startupitem in bot.memory["SpiceBot_Events"]["startup"]: - if str(startupitem) not in bot.memory["SpiceBot_Events"]["loaded"]: - notcomplete.append(str(startupitem)) - - if len(notcomplete): - return False - else: - return True + botevents.startup_add([botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) diff --git a/sopel_modules/SpiceBot_GifSearch/gif.py b/sopel_modules/SpiceBot_GifSearch/gif.py index 6c344a9..eaa4ac8 100644 --- a/sopel_modules/SpiceBot_GifSearch/gif.py +++ b/sopel_modules/SpiceBot_GifSearch/gif.py @@ -7,7 +7,7 @@ from sopel import module from .gifsearch import getGif from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents import spicemanip @@ -15,7 +15,7 @@ import spicemanip @module.commands('gif') def gif_trigger(bot, trigger): - while not bot_events_check(bot, botevents.BOT_GIFSEARCH): + while not botevents.check(botevents.BOT_GIFSEARCH): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger) diff --git a/sopel_modules/SpiceBot_GifSearch/gifapi.py b/sopel_modules/SpiceBot_GifSearch/gifapi.py index fa500b9..cc7f9e3 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifapi.py +++ b/sopel_modules/SpiceBot_GifSearch/gifapi.py @@ -9,13 +9,13 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents @sopel.module.commands('(.*)') def gifapi_triggers(bot, trigger): - while not bot_events_check(bot, botevents.BOT_GIFSEARCH): + while not botevents.check(botevents.BOT_GIFSEARCH): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') diff --git a/sopel_modules/SpiceBot_GifSearch/gifsearch.py b/sopel_modules/SpiceBot_GifSearch/gifsearch.py index 884bd11..4050664 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifsearch.py +++ b/sopel_modules/SpiceBot_GifSearch/gifsearch.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_Events.System import bot_events_startup_register, bot_events_recieved, bot_events_trigger, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_CommandsQuery.CommandsQuery import commandsquery_register @@ -47,7 +47,7 @@ def configure(config): def setup(bot): bot_logging(bot, 'SpiceBot_GifSearch', "Starting Setup Procedure") - bot_events_startup_register(bot, [botevents.BOT_GIFSEARCH]) + botevents.startup_add([botevents.BOT_GIFSEARCH]) if 'SpiceBot_GifSearch' not in bot.memory: bot.memory["SpiceBot_GifSearch"] = {"cache": {}, "badgiflinks": [], 'valid_gif_api_dict': {}} @@ -79,7 +79,7 @@ def setup(bot): if validgifapi not in bot.memory["SpiceBot_GifSearch"]['cache'].keys(): bot.memory["SpiceBot_GifSearch"]['cache'][validgifapi] = dict() - bot_events_trigger(bot, botevents.BOT_GIFSEARCH, "SpiceBot_GifSearch") + botevents.trigger(botevents.BOT_GIFSEARCH, "SpiceBot_GifSearch") def shutdown(bot): @@ -254,4 +254,4 @@ def getGif(bot, searchdict): @sopel.module.event(botevents.BOT_GIFSEARCH) @sopel.module.rule('.*') def bot_events_setup(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py index 73250cb..abda513 100644 --- a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py +++ b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import bot_events_check, bot_events_recieved, botevents +from sopel_modules.SpiceBot_Events.System import botevents def setup(bot): @@ -21,7 +21,7 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) for comtype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): bot.memory["SpiceBot_InvalidCommand"]["valid"].extend(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys()) @@ -31,7 +31,7 @@ def bot_events_complete(bot, trigger): def InvalidCommand_triggers(bot, trigger): return - while not bot_events_check(bot, [botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 1a18456..1deb454 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Events.System import bot_events_recieved, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import bot_logging from .Logs import stdio_logs_fetch @@ -12,7 +12,7 @@ from .Logs import stdio_logs_fetch @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) debuglines = stdio_logs_fetch(bot) diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index e764855..ed38629 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -6,7 +6,7 @@ import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute from sopel_modules.SpiceBot_SBTools import bot_logging -from sopel_modules.SpiceBot_Events.System import bot_events_startup_register, bot_events_recieved, bot_events_trigger, botevents +from sopel_modules.SpiceBot_Events.System import botevents import os @@ -26,11 +26,11 @@ def setup(bot): bot_logging(bot, 'SpiceBot_Logs', "Starting Setup Procedure") bot.config.define_section("SpiceBot_Logs", SpiceBot_Logs_MainSection, validate=False) - bot_events_startup_register(bot, [botevents.BOT_LOGS]) + botevents.startup_add([botevents.BOT_LOGS]) bot_logs_setup_check(bot) - bot_events_trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") + botevents.trigger(botevents.BOT_LOGS, "SpiceBot_Logs") def bot_logs_setup_check(bot): @@ -46,7 +46,7 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def join_log_channel(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) if bot.config.SpiceBot_Logs.logging_channel: channel = bot.config.SpiceBot_Logs.logging_channel @@ -134,4 +134,4 @@ def get_running_pid(bot): @sopel.module.event(botevents.BOT_LOGS) @sopel.module.rule('.*') def bot_events_setup(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index a095e39..63b3b36 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -7,14 +7,14 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, inlist, inlist_match, similar_list -from sopel_modules.SpiceBot_Events.System import bot_events_check, botevents +from sopel_modules.SpiceBot_Events.System import botevents from .Logs import systemd_logs_fetch, stdio_logs_fetch @sopel.module.nickname_commands('logs', 'debug') def bot_command_logs(bot, trigger): - while not bot_events_check(bot, botevents.BOT_LOGS): + while not botevents.check(botevents.BOT_LOGS): pass if not command_permissions_check(bot, trigger, ['admins', 'owner', 'OP', 'ADMIN', 'OWNER']): diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py index fd5b640..032162a 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py @@ -4,13 +4,13 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Events.System import bot_events_recieved, bot_events_startup_register, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import bot_logging def setup(bot): bot_logging(bot, 'SpiceBot_StartupMonologue', "Starting setup procedure") - bot_events_startup_register(bot, [botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED]) + botevents.startup_add([botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED]) if 'SpiceBot_StartupMonologue' not in bot.memory: bot.memory['SpiceBot_StartupMonologue'] = [] @@ -19,4 +19,4 @@ def setup(bot): @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED) @sopel.module.rule('.*') def bot_events_setup(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 77e15f5..d47dc76 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Events.System import bot_events_recieved, bot_events_trigger, botevents +from sopel_modules.SpiceBot_Events.System import botevents from sopel_modules.SpiceBot_SBTools import humanized_time, bot_logging import time @@ -13,19 +13,19 @@ import time @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) # Startup bot_logging(bot, 'SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') - bot_events_trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") + botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_COMMANDSQUERY) @sopel.module.rule('.*') def bot_startup_monologue_commands(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) availablecomsnum, availablecomsfiles = 0, 0 for commandstype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): @@ -35,25 +35,25 @@ def bot_startup_monologue_commands(bot, trigger): bot.memory['SpiceBot_StartupMonologue'].append("There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") bot_logging(bot, 'SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") - bot_events_trigger(bot, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") + botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_CHANNELS) @sopel.module.rule('.*') def bot_startup_monologue_channels(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) botcount = len(bot.channels.keys()) servercount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") - bot_events_trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") + botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_startup_monologue_display(bot, trigger): - bot_events_recieved(bot, trigger.event) + botevents.recieved(trigger) timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) @@ -64,5 +64,5 @@ def bot_startup_monologue_display(bot, trigger): bot.osd(bot.memory['SpiceBot_StartupMonologue'], bot.channels.keys(), 'ACTION') - bot_events_trigger(bot, botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") + botevents.trigger(botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") bot_logging(bot, 'SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) From 2d08f3befddecd044ea346c343c9cb530bb4321e Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 15:41:44 -0400 Subject: [PATCH 09/56] bot --- sopel_modules/SpiceBot_Channels/Channels.py | 2 +- sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py | 2 +- sopel_modules/SpiceBot_Events/Events.py | 8 ++++---- sopel_modules/SpiceBot_Events/System.py | 8 ++++---- sopel_modules/SpiceBot_GifSearch/gifsearch.py | 2 +- sopel_modules/SpiceBot_Logs/Logs.py | 2 +- .../SpiceBot_StartupMonologue/StartupMonologue_Display.py | 8 ++++---- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 69aaa06..8e53d6c 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -74,7 +74,7 @@ def trigger_channel_list_initial(bot, trigger): channel_list_current(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot_logging(bot, 'SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") - botevents.trigger(botevents.BOT_CHANNELS, "SpiceBot_Channels") + botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") join_all_channels(bot) chanadmin_all_channels(bot) diff --git a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py index a9d115d..dac3030 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py +++ b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py @@ -162,7 +162,7 @@ def setup(bot): if command not in bot.memory['SpiceBot_CommandsQuery']['nickrules']: bot.memory['SpiceBot_CommandsQuery']['nickrules'].append(command) - botevents.trigger(botevents.BOT_COMMANDSQUERY, "SpiceBot_CommandsQuery") + botevents.trigger(bot, botevents.BOT_COMMANDSQUERY, "SpiceBot_CommandsQuery") def shutdown(bot): diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index ebd095e..5933e42 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -14,12 +14,12 @@ import time @sopel.module.event('001') @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): - botevents.trigger(botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") + botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") while not len(bot.channels.keys()) > 0: pass time.sleep(1) - botevents.trigger(botevents.BOT_CONNECTED, "Bot Connected to IRC") + botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") @sopel.module.event(botevents.BOT_WELCOME) @@ -28,11 +28,11 @@ def bot_events_start(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) botevents.recieved(trigger) - botevents.trigger(botevents.BOT_READY, "Ready To Process module setup procedures") + botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") while not botevents.startup_check(): pass - botevents.trigger(botevents.BOT_LOADED, "All registered modules setup procedures have completed") + botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") @sopel.module.event(botevents.BOT_READY) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index b5b9aed..2569ea5 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -38,14 +38,14 @@ class BotEvents(object): setattr(self, name, str(eventnumber)) return str(eventnumber) - def trigger(self, number, message="SpiceBot_Events"): + def trigger(self, bot, number, message="SpiceBot_Events"): number = str(number) if number in [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED]: pretrigger = PreTrigger( - sopel.bot.nick, - ":SpiceBot_Events " + number + " " + str(sopel.bot.nick) + " :" + message + bot.nick, + ":SpiceBot_Events " + number + " " + str(bot.nick) + " :" + message ) - sopel.bot.dispatch(pretrigger) + bot.dispatch(pretrigger) else: pretriggerdict = {"number": number, "message": message} self.SpiceBot_Events["trigger_queue"].append(pretriggerdict) diff --git a/sopel_modules/SpiceBot_GifSearch/gifsearch.py b/sopel_modules/SpiceBot_GifSearch/gifsearch.py index 4050664..0ef935e 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifsearch.py +++ b/sopel_modules/SpiceBot_GifSearch/gifsearch.py @@ -79,7 +79,7 @@ def setup(bot): if validgifapi not in bot.memory["SpiceBot_GifSearch"]['cache'].keys(): bot.memory["SpiceBot_GifSearch"]['cache'][validgifapi] = dict() - botevents.trigger(botevents.BOT_GIFSEARCH, "SpiceBot_GifSearch") + botevents.trigger(bot, botevents.BOT_GIFSEARCH, "SpiceBot_GifSearch") def shutdown(bot): diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index ed38629..69cfc15 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -30,7 +30,7 @@ def setup(bot): bot_logs_setup_check(bot) - botevents.trigger(botevents.BOT_LOGS, "SpiceBot_Logs") + botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") def bot_logs_setup_check(bot): diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index d47dc76..43c687e 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -19,7 +19,7 @@ def bot_startup_monologue_start(bot, trigger): bot_logging(bot, 'SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') - botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_COMMANDSQUERY) @@ -35,7 +35,7 @@ def bot_startup_monologue_commands(bot, trigger): bot.memory['SpiceBot_StartupMonologue'].append("There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") bot_logging(bot, 'SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") - botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_CHANNELS) @@ -47,7 +47,7 @@ def bot_startup_monologue_channels(bot, trigger): servercount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") - botevents.trigger(botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") @sopel.module.event(botevents.BOT_LOADED) @@ -64,5 +64,5 @@ def bot_startup_monologue_display(bot, trigger): bot.osd(bot.memory['SpiceBot_StartupMonologue'], bot.channels.keys(), 'ACTION') - botevents.trigger(botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") bot_logging(bot, 'SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) From 33b086ac59214827bf576a45172b06d230e56336 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 15:45:16 -0400 Subject: [PATCH 10/56] oops --- sopel_modules/SpiceBot_Events/System.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 2569ea5..b37bc3c 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -55,7 +55,7 @@ class BotEvents(object): message_payload = trigger.args[1] if eventnumber not in self.SpiceBot_Events["triggers_recieved"]: self.SpiceBot_Events["triggers_recieved"][eventnumber] = [] - self.SpiceBot_Events["assigned_IDs"]["triggers_recieved"][eventnumber].append(message_payload) + self.SpiceBot_Events["triggers_recieved"][eventnumber].append(message_payload) def check(self, checklist): if not isinstance(checklist, list): From f5464a8b8be72d46b27bb885729be60d3b750879 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 16:11:17 -0400 Subject: [PATCH 11/56] attempt first usage of decorator --- sopel_modules/SpiceBot_AI/AI.py | 5 ++-- .../SpiceBot_Channels/Channels_Command.py | 5 ++-- .../NickQueryCommand.py | 5 ++-- .../SpiceBot_CommandsQuery/QueryCommand.py | 5 ++-- sopel_modules/SpiceBot_Events/System.py | 24 ++++++++++++++----- sopel_modules/SpiceBot_GifSearch/gif.py | 5 ++-- sopel_modules/SpiceBot_GifSearch/gifapi.py | 5 ++-- .../SpiceBot_InvalidCommand/InvalidCommand.py | 5 ++-- sopel_modules/SpiceBot_Logs/Logs_Command.py | 5 ++-- 9 files changed, 42 insertions(+), 22 deletions(-) diff --git a/sopel_modules/SpiceBot_AI/AI.py b/sopel_modules/SpiceBot_AI/AI.py index 6927abb..b28ed08 100644 --- a/sopel_modules/SpiceBot_AI/AI.py +++ b/sopel_modules/SpiceBot_AI/AI.py @@ -10,11 +10,12 @@ from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, googlesearch, bot_ from sopel_modules.SpiceBot_Events.System import botevents +@botevents.check_ready([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]) @sopel.module.nickname_commands('(.*)') def bot_command_nick(bot, trigger): - while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): - pass + # while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index df4010d..92ae05c 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -14,11 +14,12 @@ from sopel_modules.SpiceBot_SBTools import ( from .Channels import bot_part_empty +@botevents.check_ready([botevents.BOT_LOADED]) @sopel.module.nickname_commands('channels', 'channel') def nickname_comand_channels(bot, trigger): - while not botevents.check(botevents.BOT_LOADED): - pass + # while not botevents.check(botevents.BOT_LOADED): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py index c618737..2e81930 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py @@ -12,11 +12,12 @@ from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, lett import spicemanip +@botevents.check_ready([botevents.BOT_COMMANDSQUERY]) @sopel.module.nickname_commands('(.*)') def query_detection_nick(bot, trigger): - while not botevents.check(botevents.BOT_COMMANDSQUERY): - pass + # while not botevents.check(botevents.BOT_COMMANDSQUERY): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') diff --git a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py index 81d60f2..a4aec45 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py @@ -12,11 +12,12 @@ from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, lett import spicemanip +@botevents.check_ready([botevents.BOT_COMMANDSQUERY]) @sopel.module.rule('^\?(.*)') def query_detection(bot, trigger): - while not botevents.check(botevents.BOT_COMMANDSQUERY): - pass + # while not botevents.check(botevents.BOT_COMMANDSQUERY): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'query_command') diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index b37bc3c..88bc79e 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel from sopel.trigger import PreTrigger -# import functools +import functools from sopel_modules.SpiceBot_SBTools import bot_logging @@ -76,10 +76,27 @@ class BotEvents(object): return False return True + def check_ready(self, checklist): + def actual_decorator(function): + @functools.wraps(function) + def _nop(*args, **kwargs): + # Assign trigger and bot for easy access later + bot, trigger = args[0:2] + while not self.check(checklist): + pass + return function(*args, **kwargs) + return _nop + return actual_decorator + botevents = BotEvents() +def setup(bot): + bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") + botevents.startup_add([botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) + + """ def register_trigger(number, message): def actual_decorator(function): @@ -96,8 +113,3 @@ ideas: pass """ - - -def setup(bot): - bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") - botevents.startup_add([botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) diff --git a/sopel_modules/SpiceBot_GifSearch/gif.py b/sopel_modules/SpiceBot_GifSearch/gif.py index eaa4ac8..a33f6f6 100644 --- a/sopel_modules/SpiceBot_GifSearch/gif.py +++ b/sopel_modules/SpiceBot_GifSearch/gif.py @@ -12,11 +12,12 @@ from sopel_modules.SpiceBot_Events.System import botevents import spicemanip +@botevents.check_ready([botevents.BOT_GIFSEARCH]) @module.commands('gif') def gif_trigger(bot, trigger): - while not botevents.check(botevents.BOT_GIFSEARCH): - pass + # while not botevents.check(botevents.BOT_GIFSEARCH): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger) if not len(triggerargs): diff --git a/sopel_modules/SpiceBot_GifSearch/gifapi.py b/sopel_modules/SpiceBot_GifSearch/gifapi.py index cc7f9e3..c47d7b8 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifapi.py +++ b/sopel_modules/SpiceBot_GifSearch/gifapi.py @@ -12,11 +12,12 @@ from sopel_modules.SpiceBot_SBTools import sopel_triggerargs from sopel_modules.SpiceBot_Events.System import botevents +@botevents.check_ready([botevents.BOT_GIFSEARCH]) @sopel.module.commands('(.*)') def gifapi_triggers(bot, trigger): - while not botevents.check(botevents.BOT_GIFSEARCH): - pass + # while not botevents.check(botevents.BOT_GIFSEARCH): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') diff --git a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py index abda513..e694bcc 100644 --- a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py +++ b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py @@ -27,12 +27,13 @@ def bot_events_complete(bot, trigger): bot.memory["SpiceBot_InvalidCommand"]["valid"].extend(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys()) +@botevents.check_ready([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]) @sopel.module.commands('(.*)') def InvalidCommand_triggers(bot, trigger): return - while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): - pass + # while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): + # pass triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index 63b3b36..fcf83a6 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -11,11 +11,12 @@ from sopel_modules.SpiceBot_Events.System import botevents from .Logs import systemd_logs_fetch, stdio_logs_fetch +@botevents.check_ready([botevents.BOT_LOGS]) @sopel.module.nickname_commands('logs', 'debug') def bot_command_logs(bot, trigger): - while not botevents.check(botevents.BOT_LOGS): - pass + # while not botevents.check(botevents.BOT_LOGS): + # pass if not command_permissions_check(bot, trigger, ['admins', 'owner', 'OP', 'ADMIN', 'OWNER']): bot.say("I was unable to process this Bot Nick command due to privilege issues.") From fbe22143fc5f9d7ca72ef2c6c30ae4d459b3e71e Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 16:17:54 -0400 Subject: [PATCH 12/56] success is nice --- sopel_modules/SpiceBot_Events/System.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 88bc79e..98b73ac 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -95,21 +95,3 @@ botevents = BotEvents() def setup(bot): bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") botevents.startup_add([botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) - - -""" -def register_trigger(number, message): - def actual_decorator(function): - @functools.wraps(function) - def _nop(*args, **kwargs): - # Assign trigger and bot for easy access later - bot, trigger = args[0:2] - return function(*args, **kwargs) - return _nop - -ideas: - - while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): - pass - -""" From 758345bea89a4f6cbc07f608562bad73378e00fa Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Wed, 15 May 2019 21:48:46 -0400 Subject: [PATCH 13/56] pep fix --- sopel_modules/SpiceBot_Events/System.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 98b73ac..5ba2d67 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -#coding=utf-8 +# coding=utf-8 from __future__ import unicode_literals, absolute_import, print_function, division # sopel imports From 9dfbfd3634b0164899298d0017e205bf20d9fb40 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 16 May 2019 13:52:19 -0400 Subject: [PATCH 14/56] events tweaking --- sopel_modules/SpiceBot_AI/AI.py | 3 --- sopel_modules/SpiceBot_Channels/Channels_Command.py | 3 --- .../SpiceBot_CommandsQuery/NickQueryCommand.py | 3 --- sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py | 3 --- sopel_modules/SpiceBot_Events/Events.py | 9 +++++---- sopel_modules/SpiceBot_Events/System.py | 12 ++++++++++-- sopel_modules/SpiceBot_GifSearch/gif.py | 3 --- sopel_modules/SpiceBot_GifSearch/gifapi.py | 3 --- .../SpiceBot_InvalidCommand/InvalidCommand.py | 3 --- sopel_modules/SpiceBot_Logs/Logs_Command.py | 3 --- 10 files changed, 15 insertions(+), 30 deletions(-) diff --git a/sopel_modules/SpiceBot_AI/AI.py b/sopel_modules/SpiceBot_AI/AI.py index b28ed08..c476bcb 100644 --- a/sopel_modules/SpiceBot_AI/AI.py +++ b/sopel_modules/SpiceBot_AI/AI.py @@ -14,9 +14,6 @@ from sopel_modules.SpiceBot_Events.System import botevents @sopel.module.nickname_commands('(.*)') def bot_command_nick(bot, trigger): - # while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') if not triggercommand: diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index 92ae05c..0dd6045 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -18,9 +18,6 @@ from .Channels import bot_part_empty @sopel.module.nickname_commands('channels', 'channel') def nickname_comand_channels(bot, trigger): - # while not botevents.check(botevents.BOT_LOADED): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') if not len(triggerargs): diff --git a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py index 2e81930..23d4ca5 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py @@ -16,9 +16,6 @@ import spicemanip @sopel.module.nickname_commands('(.*)') def query_detection_nick(bot, trigger): - # while not botevents.check(botevents.BOT_COMMANDSQUERY): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'nickname_command') # command issued, check if valid diff --git a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py index a4aec45..7adb427 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py @@ -16,9 +16,6 @@ import spicemanip @sopel.module.rule('^\?(.*)') def query_detection(bot, trigger): - # while not botevents.check(botevents.BOT_COMMANDSQUERY): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'query_command') # command issued, check if valid diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 5933e42..d8a2d60 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -15,7 +15,6 @@ import time @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") - while not len(bot.channels.keys()) > 0: pass time.sleep(1) @@ -27,11 +26,13 @@ def bot_startup_connection(bot, trigger): def bot_events_start(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) botevents.recieved(trigger) - botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") - while not botevents.startup_check(): - pass + +@botevents.startup_check_ready() +@sopel.module.event(botevents.BOT_READY) +@sopel.module.rule('.*') +def bot_events_startup_complete(bot, trigger): botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 98b73ac..570499e 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -80,14 +80,22 @@ class BotEvents(object): def actual_decorator(function): @functools.wraps(function) def _nop(*args, **kwargs): - # Assign trigger and bot for easy access later - bot, trigger = args[0:2] while not self.check(checklist): pass return function(*args, **kwargs) return _nop return actual_decorator + def startup_check_ready(self): + def actual_decorator(function): + @functools.wraps(function) + def _nop(*args, **kwargs): + while not self.startup_check(): + pass + return function(*args, **kwargs) + return _nop + return actual_decorator + botevents = BotEvents() diff --git a/sopel_modules/SpiceBot_GifSearch/gif.py b/sopel_modules/SpiceBot_GifSearch/gif.py index a33f6f6..e517965 100644 --- a/sopel_modules/SpiceBot_GifSearch/gif.py +++ b/sopel_modules/SpiceBot_GifSearch/gif.py @@ -16,9 +16,6 @@ import spicemanip @module.commands('gif') def gif_trigger(bot, trigger): - # while not botevents.check(botevents.BOT_GIFSEARCH): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger) if not len(triggerargs): return bot.osd("Please present a query to search.") diff --git a/sopel_modules/SpiceBot_GifSearch/gifapi.py b/sopel_modules/SpiceBot_GifSearch/gifapi.py index c47d7b8..2f6cc7b 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifapi.py +++ b/sopel_modules/SpiceBot_GifSearch/gifapi.py @@ -16,9 +16,6 @@ from sopel_modules.SpiceBot_Events.System import botevents @sopel.module.commands('(.*)') def gifapi_triggers(bot, trigger): - # while not botevents.check(botevents.BOT_GIFSEARCH): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') if triggercommand not in bot.memory["SpiceBot_GifSearch"]['valid_gif_api_dict'].keys(): diff --git a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py index e694bcc..559058a 100644 --- a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py +++ b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py @@ -32,9 +32,6 @@ def bot_events_complete(bot, trigger): def InvalidCommand_triggers(bot, trigger): return - # while not botevents.check([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]): - # pass - triggerargs, triggercommand = sopel_triggerargs(bot, trigger, 'prefix_command') # patch for people typing "...", maybe other stuff, but this verifies that there is still a command here diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index fcf83a6..dd4d78e 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -15,9 +15,6 @@ from .Logs import systemd_logs_fetch, stdio_logs_fetch @sopel.module.nickname_commands('logs', 'debug') def bot_command_logs(bot, trigger): - # while not botevents.check(botevents.BOT_LOGS): - # pass - if not command_permissions_check(bot, trigger, ['admins', 'owner', 'OP', 'ADMIN', 'OWNER']): bot.say("I was unable to process this Bot Nick command due to privilege issues.") return From 94dd65136f56f11adf93834786a62bf697c29d1b Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 16 May 2019 14:37:45 -0400 Subject: [PATCH 15/56] test own event decorator --- sopel_modules/SpiceBot_Channels/Channels.py | 11 +++++++++++ sopel_modules/SpiceBot_Events/Events.py | 12 ++++++------ sopel_modules/SpiceBot_Events/System.py | 12 ++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 8e53d6c..b10fb57 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -32,6 +32,17 @@ def configure(config): config.SpiceBot_Channels.configure_setting('chanignore', 'SpiceBot_Channels Ignore JOIN for channels') +class BotChannels(): + """This Logs all channels known to the server""" + def __init__(self): + self.SpiceBot_Channels = { + "list": {} + } + + +botchannels = BotChannels() + + def setup(bot): bot_logging(bot, 'SpiceBot_Channels', "Starting setup procedure") botevents.startup_add([botevents.BOT_CHANNELS]) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index d8a2d60..2fa3706 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -11,7 +11,7 @@ from sopel_modules.SpiceBot_SBTools import bot_logging import time -@sopel.module.event('001') +@botevents.event('001') @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") @@ -21,7 +21,7 @@ def bot_startup_connection(bot, trigger): botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") -@sopel.module.event(botevents.BOT_WELCOME) +@botevents.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_start(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) @@ -30,20 +30,20 @@ def bot_events_start(bot, trigger): @botevents.startup_check_ready() -@sopel.module.event(botevents.BOT_READY) +@botevents.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_startup_complete(bot, trigger): botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") -@sopel.module.event(botevents.BOT_READY) +@botevents.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_ready(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) botevents.recieved(trigger) -@sopel.module.event(botevents.BOT_CONNECTED) +@botevents.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) @@ -60,7 +60,7 @@ def bot_events_connected(bot, trigger): del botevents.SpiceBot_Events["trigger_queue"][0] -@sopel.module.event(botevents.BOT_LOADED) +@botevents.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index d992fac..68a3347 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -96,6 +96,18 @@ class BotEvents(object): return _nop return actual_decorator + def event(self, *event_list): + def actual_decorator(function): + @functools.wraps(function) + def add_attribute(function): + if not hasattr(function, "event"): + function.event = [] + function.event.extend(event_list) + self.recieved(function) + return function + return add_attribute + return actual_decorator + botevents = BotEvents() From 8f7a82a5d5066530ca022c306b14205ad5da6a16 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 16 May 2019 15:12:19 -0400 Subject: [PATCH 16/56] triggers are self recieved --- sopel_modules/SpiceBot_Channels/Channels.py | 7 ------ .../SpiceBot_CommandsQuery/CommandsQuery.py | 7 ------ sopel_modules/SpiceBot_Events/Events.py | 18 +++++++-------- sopel_modules/SpiceBot_Events/System.py | 23 +++++++------------ sopel_modules/SpiceBot_GifSearch/gifsearch.py | 6 ----- .../SpiceBot_InvalidCommand/InvalidCommand.py | 2 -- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 1 - sopel_modules/SpiceBot_Logs/Logs.py | 7 ------ .../StartupMonologue.py | 6 ----- .../StartupMonologue_Display.py | 4 ---- 10 files changed, 16 insertions(+), 65 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index b10fb57..928850f 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -61,7 +61,6 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def trigger_channel_list_initial(bot, trigger): - botevents.recieved(trigger) # Unkickable bot.write(('SAMODE', bot.nick, '+q')) @@ -132,9 +131,3 @@ def bot_part_empty(bot): bot.part(channel, "Leaving Empty Channel") if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] - - -@sopel.module.event(botevents.BOT_CHANNELS) -@sopel.module.rule('.*') -def bot_events_setup(bot, trigger): - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py index dac3030..5de2458 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py +++ b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py @@ -173,7 +173,6 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): - botevents.recieved(trigger) for comtype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): if comtype not in ['module', 'nickname', 'rule']: @@ -212,9 +211,3 @@ def commandsquery_register(bot, command_type, validcoms, aliasfor=None): for comalias in comaliases: if comalias not in bot.memory['SpiceBot_CommandsQuery']['commands'][command_type].keys(): bot.memory['SpiceBot_CommandsQuery']['commands'][command_type][comalias] = {"aliasfor": aliasfor} - - -@sopel.module.event(botevents.BOT_COMMANDSQUERY) -@sopel.module.rule('.*') -def bot_events_setup(bot, trigger): - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 2fa3706..a6e161d 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -11,7 +11,7 @@ from sopel_modules.SpiceBot_SBTools import bot_logging import time -@botevents.event('001') +@sopel.module.event('001') @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") @@ -21,33 +21,31 @@ def bot_startup_connection(bot, trigger): botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") -@botevents.event(botevents.BOT_WELCOME) +@sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_start(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - botevents.recieved(trigger) botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") @botevents.startup_check_ready() -@botevents.event(botevents.BOT_READY) +@sopel.module.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_startup_complete(bot, trigger): botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") -@botevents.event(botevents.BOT_READY) +@sopel.module.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_ready(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - botevents.recieved(trigger) -@botevents.event(botevents.BOT_CONNECTED) +@sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - botevents.recieved(trigger) + while True: if len(botevents.SpiceBot_Events["trigger_queue"]): number = botevents.SpiceBot_Events["trigger_queue"][0]["number"] @@ -58,10 +56,10 @@ def bot_events_connected(bot, trigger): ) bot.dispatch(pretrigger) del botevents.SpiceBot_Events["trigger_queue"][0] + botevents.recieved({"number": number, "message": message}) -@botevents.event(botevents.BOT_LOADED) +@sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 68a3347..5777e1a 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -46,16 +46,21 @@ class BotEvents(object): ":SpiceBot_Events " + number + " " + str(bot.nick) + " :" + message ) bot.dispatch(pretrigger) + self.recieved({"number": number, "message": message}) else: pretriggerdict = {"number": number, "message": message} self.SpiceBot_Events["trigger_queue"].append(pretriggerdict) def recieved(self, trigger): - eventnumber = str(trigger.event) - message_payload = trigger.args[1] + if isinstance(trigger, dict): + eventnumber = str(trigger["number"]) + message = str(trigger["message"]) + else: + eventnumber = str(trigger.event) + message = trigger.args[1] if eventnumber not in self.SpiceBot_Events["triggers_recieved"]: self.SpiceBot_Events["triggers_recieved"][eventnumber] = [] - self.SpiceBot_Events["triggers_recieved"][eventnumber].append(message_payload) + self.SpiceBot_Events["triggers_recieved"][eventnumber].append(message) def check(self, checklist): if not isinstance(checklist, list): @@ -96,18 +101,6 @@ class BotEvents(object): return _nop return actual_decorator - def event(self, *event_list): - def actual_decorator(function): - @functools.wraps(function) - def add_attribute(function): - if not hasattr(function, "event"): - function.event = [] - function.event.extend(event_list) - self.recieved(function) - return function - return add_attribute - return actual_decorator - botevents = BotEvents() diff --git a/sopel_modules/SpiceBot_GifSearch/gifsearch.py b/sopel_modules/SpiceBot_GifSearch/gifsearch.py index 0ef935e..2984d10 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifsearch.py +++ b/sopel_modules/SpiceBot_GifSearch/gifsearch.py @@ -249,9 +249,3 @@ def getGif(bot, searchdict): # return dict gifdict['error'] = None return gifdict - - -@sopel.module.event(botevents.BOT_GIFSEARCH) -@sopel.module.rule('.*') -def bot_events_setup(bot, trigger): - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py index 559058a..17cbe0a 100644 --- a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py +++ b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py @@ -21,8 +21,6 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): - botevents.recieved(trigger) - for comtype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): bot.memory["SpiceBot_InvalidCommand"]["valid"].extend(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys()) diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 1deb454..4b9762e 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -12,7 +12,6 @@ from .Logs import stdio_logs_fetch @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - botevents.recieved(trigger) debuglines = stdio_logs_fetch(bot) diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index 69cfc15..b3fd17d 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -46,7 +46,6 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def join_log_channel(bot, trigger): - botevents.recieved(trigger) if bot.config.SpiceBot_Logs.logging_channel: channel = bot.config.SpiceBot_Logs.logging_channel @@ -129,9 +128,3 @@ def get_running_pid(bot): pidnum = e pidnum = str(os.popen("systemctl show " + str(bot.nick) + " --property=MainPID").read()).split("=")[-1] return pidnum - - -@sopel.module.event(botevents.BOT_LOGS) -@sopel.module.rule('.*') -def bot_events_setup(bot, trigger): - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py index 032162a..4070864 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py @@ -14,9 +14,3 @@ def setup(bot): if 'SpiceBot_StartupMonologue' not in bot.memory: bot.memory['SpiceBot_StartupMonologue'] = [] - - -@sopel.module.event(botevents.BOT_STARTUPMONOLOGUE, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED) -@sopel.module.rule('.*') -def bot_events_setup(bot, trigger): - botevents.recieved(trigger) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 43c687e..e626b16 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -13,7 +13,6 @@ import time @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - botevents.recieved(trigger) # Startup bot_logging(bot, 'SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") @@ -25,7 +24,6 @@ def bot_startup_monologue_start(bot, trigger): @sopel.module.event(botevents.BOT_COMMANDSQUERY) @sopel.module.rule('.*') def bot_startup_monologue_commands(bot, trigger): - botevents.recieved(trigger) availablecomsnum, availablecomsfiles = 0, 0 for commandstype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): @@ -41,7 +39,6 @@ def bot_startup_monologue_commands(bot, trigger): @sopel.module.event(botevents.BOT_CHANNELS) @sopel.module.rule('.*') def bot_startup_monologue_channels(bot, trigger): - botevents.recieved(trigger) botcount = len(bot.channels.keys()) servercount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) @@ -53,7 +50,6 @@ def bot_startup_monologue_channels(bot, trigger): @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_startup_monologue_display(bot, trigger): - botevents.recieved(trigger) timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) From 4311d69520ddacaa26a20dbb5742a07ed6423068 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 16 May 2019 15:53:01 -0400 Subject: [PATCH 17/56] enhance events system --- sopel_modules/SpiceBot_Events/Events.py | 34 ++++++++++++++++--------- sopel_modules/SpiceBot_Events/System.py | 13 +++++++--- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index a6e161d..80f2a2f 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -11,39 +11,45 @@ from sopel_modules.SpiceBot_SBTools import bot_logging import time -@sopel.module.event('001') +@sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') -def bot_startup_connection(bot, trigger): +def bot_startup_welcome(bot, trigger): + """The Bot events system does not start until RPL_WELCOME 001 is recieved + from the server""" botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") - while not len(bot.channels.keys()) > 0: - pass - time.sleep(1) - botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") @sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_start(bot, trigger): + """This stage is redundant, but shows the system is working.""" bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") +@sopel.module.event(botevents.BOT_WELCOME) +@sopel.module.rule('.*') +def bot_startup_connection(bot, trigger): + """Here, we wait until we are in at least one channel""" + while not len(bot.channels.keys()): + pass + time.sleep(1) + botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") + + @botevents.startup_check_ready() @sopel.module.event(botevents.BOT_READY) @sopel.module.rule('.*') def bot_events_startup_complete(bot, trigger): - botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") - - -@sopel.module.event(botevents.BOT_READY) -@sopel.module.rule('.*') -def bot_events_ready(bot, trigger): + """All events registered as required for startup have completed""" bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) + botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): + """For items tossed in a queue, this will trigger then accordingly""" bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) while True: @@ -57,9 +63,13 @@ def bot_events_connected(bot, trigger): bot.dispatch(pretrigger) del botevents.SpiceBot_Events["trigger_queue"][0] botevents.recieved({"number": number, "message": message}) + else: + if botevents.startup_check(): + return @sopel.module.event(botevents.BOT_LOADED) @sopel.module.rule('.*') def bot_events_complete(bot, trigger): + """This is here simply to log to stderr that this was recieved.""" bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 5777e1a..22ac1c4 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -24,11 +24,17 @@ class BotEvents(object): """ def __init__(self): + self.RPL_WELCOME = '001' # This is a defined IRC event + self.BOT_WELCOME = '1001' + self.BOT_READY = '1002' + self.BOT_CONNECTED = '1003' + self.BOT_LOADED = '1004' + self.defaultevents = [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED] self.SpiceBot_Events = { - "assigned_IDs": [1000], + "assigned_IDs": [1000, 1001, 1002, 1003, 1004], "triggers_recieved": {}, "trigger_queue": [], - "startup_required": [] + "startup_required": [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED] } def __getattr__(self, name): @@ -40,7 +46,7 @@ class BotEvents(object): def trigger(self, bot, number, message="SpiceBot_Events"): number = str(number) - if number in [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED]: + if number in self.defaultevents or self.check(self.BOT_CONNECTED): pretrigger = PreTrigger( bot.nick, ":SpiceBot_Events " + number + " " + str(bot.nick) + " :" + message @@ -107,4 +113,3 @@ botevents = BotEvents() def setup(bot): bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") - botevents.startup_add([botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED]) From c6fb848998923aa2fe9a1662cad2a67d9b306681 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Thu, 16 May 2019 16:20:09 -0400 Subject: [PATCH 18/56] don't stay in empty channels --- sopel_modules/SpiceBot_Channels/Channels.py | 29 +++++++++++-------- .../SpiceBot_Channels/Channels_Command.py | 5 ++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 928850f..0305aaa 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -65,8 +65,6 @@ def trigger_channel_list_initial(bot, trigger): # Unkickable bot.write(('SAMODE', bot.nick, '+q')) - bot_part_empty(bot) - bot.write(['LIST']) bot.memory['SpiceBot_Channels']['ProcessLock'] = True @@ -84,7 +82,6 @@ def trigger_channel_list_initial(bot, trigger): channel_list_current(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot_logging(bot, 'SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") - botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") join_all_channels(bot) chanadmin_all_channels(bot) @@ -92,12 +89,16 @@ def trigger_channel_list_initial(bot, trigger): if "*" in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels']["*"] - bot_part_empty(bot) + botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") + +@sopel.module.event(botevents.BOT_CHANNELS) +@sopel.module.rule('.*') +def trigger_channel_list_recurring(bot, trigger): while True: try: time.sleep(1800) - bot_part_empty(bot) + oldlist = list(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.write(['LIST']) bot.memory['SpiceBot_Channels']['ProcessLock'] = True @@ -117,17 +118,21 @@ def trigger_channel_list_initial(bot, trigger): if "*" in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels']["*"] - bot_part_empty(bot) + except KeyError: return -def bot_part_empty(bot): +@sopel.module.event(botevents.BOT_CHANNELS) +@sopel.module.rule('.*') +def bot_part_empty(bot, trigger): + """Don't stay in empty channels""" ignorepartlist = [] if bot.config.SpiceBot_Logs.logging_channel: ignorepartlist.append(bot.config.SpiceBot_Logs.logging_channel) - for channel in bot.channels.keys(): - if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: - bot.part(channel, "Leaving Empty Channel") - if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: - del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] + while True: + for channel in bot.channels.keys(): + if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: + bot.part(channel, "Leaving Empty Channel") + if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: + del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index 0dd6045..14e6b70 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -11,7 +11,6 @@ from sopel_modules.SpiceBot_SBTools import ( sopel_triggerargs, inlist, channel_privs, join_all_channels, channel_list_current, ) -from .Channels import bot_part_empty @botevents.check_ready([botevents.BOT_LOADED]) @@ -55,7 +54,7 @@ def nickname_comand_channels(bot, trigger): if not trigger.admin: bot.osd("You do not have permission to update the channel listing.") return - bot_part_empty(bot) + bot.write(['LIST']) bot.osd(["[SpiceBot_Channels]", "I am now updating the channel listing for this server."]) bot.memory['SpiceBot_Channels']['ProcessLock'] = True @@ -64,7 +63,7 @@ def nickname_comand_channels(bot, trigger): join_all_channels(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.osd("[SpiceBot_Channels]", "Channel listing finished!", str(foundchannelcount) + " channel(s) found.") - bot_part_empty(bot) + return elif commandused == 'topic': From 48e9228b2a969650616408dd22374f11eaa724d9 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Fri, 17 May 2019 16:11:14 -0400 Subject: [PATCH 19/56] part logic --- sopel_modules/SpiceBot_Channels/Channels.py | 9 +- .../SpiceBot_Channels/Channels_Command.py | 4 +- sopel_modules/SpiceBot_Logs/Logs.py | 156 ++++++++++++++---- sopel_modules/SpiceBot_SBTools/__init__.py | 19 +-- 4 files changed, 133 insertions(+), 55 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 0305aaa..15a0ed4 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -65,6 +65,8 @@ def trigger_channel_list_initial(bot, trigger): # Unkickable bot.write(('SAMODE', bot.nick, '+q')) + bot_part_empty(bot) + bot.write(['LIST']) bot.memory['SpiceBot_Channels']['ProcessLock'] = True @@ -89,6 +91,7 @@ def trigger_channel_list_initial(bot, trigger): if "*" in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels']["*"] + bot_part_empty(bot) botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") @@ -98,6 +101,7 @@ def trigger_channel_list_recurring(bot, trigger): while True: try: time.sleep(1800) + bot_part_empty(bot) oldlist = list(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.write(['LIST']) @@ -118,14 +122,13 @@ def trigger_channel_list_recurring(bot, trigger): if "*" in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels']["*"] + bot_part_empty(bot) except KeyError: return -@sopel.module.event(botevents.BOT_CHANNELS) -@sopel.module.rule('.*') -def bot_part_empty(bot, trigger): +def bot_part_empty(bot): """Don't stay in empty channels""" ignorepartlist = [] if bot.config.SpiceBot_Logs.logging_channel: diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index 14e6b70..5648f2f 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -11,6 +11,7 @@ from sopel_modules.SpiceBot_SBTools import ( sopel_triggerargs, inlist, channel_privs, join_all_channels, channel_list_current, ) +from .Channels import bot_part_empty @botevents.check_ready([botevents.BOT_LOADED]) @@ -54,6 +55,7 @@ def nickname_comand_channels(bot, trigger): if not trigger.admin: bot.osd("You do not have permission to update the channel listing.") return + bot_part_empty(bot) bot.write(['LIST']) bot.osd(["[SpiceBot_Channels]", "I am now updating the channel listing for this server."]) @@ -63,7 +65,7 @@ def nickname_comand_channels(bot, trigger): join_all_channels(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) bot.osd("[SpiceBot_Channels]", "Channel listing finished!", str(foundchannelcount) + " channel(s) found.") - + bot_part_empty(bot) return elif commandused == 'topic': diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index b3fd17d..62311b5 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -13,56 +13,144 @@ import os import spicemanip -def configure(config): - config.define_section("SpiceBot_Logs", SpiceBot_Logs_MainSection, validate=False) - config.SpiceBot_Logs.configure_setting('logging_channel', 'SpiceBot_Logs channels') +# coding=utf8 +from __future__ import unicode_literals, absolute_import, division, print_function + +__author__ = 'Sam Zick' +__email__ = 'sam@deathbybandaid.net' +__version__ = '0.1.1' + +import sopel.module +import sopel.tools +import sopel.config + +import os + +import spicemanip -class SpiceBot_Logs_MainSection(StaticSection): - logging_channel = ValidatedAttribute('logging_channel', default=False) +class BotLogs(): + """This Is a contained source of log information""" + def __init__(self): + self.SpiceBot_Logs = { + "list": {"Sopel_systemd": [], "Sopel_stdio": []}, + "queue": [] + } + self.sopel_config = { + "logging_channel": True + } + + def log(self, logtype, logentry, stdio=False): + logtitle = "[" + logtype + "]" + logmessage = logtitle + " " + logentry + + if self.sopel_config["logging_channel"]: + self.SpiceBot_Logs["queue"].append(logmessage) + + if stdio: + sopel.tools.stderr(logmessage) + + if logtype not in self.SpiceBot_Logs["list"].keys(): + self.SpiceBot_Logs["list"][logtype] = [] + self.SpiceBot_Logs["list"][logtype].append(logentry) + + def get_logs(self): + return [] + + def stdio_logs_fetch(self, bot): + + stdio_ignore = [] + for logtype in botlogs.SpiceBot_Logs["list"].keys(): + stdio_ignore.append("[" + logtype + "]") + + logfile = os.path.os.path.join(bot.config.core.logdir, 'stdio.log') + + try: + log_file_lines = [] + log_file = open(logfile, 'r') + lines = log_file.readlines() + for line in lines: + log_file_lines.append(line) + log_file.close() + + currentline, linenumindex = 0, [] + for line in log_file_lines: + if line.startswith("Welcome to Sopel. Loading modules..."): + linenumindex.append(currentline) + currentline += 1 + last_start = max(linenumindex) + filelines = log_file_lines[last_start:] + except Exception as e: + debuglines = e + filelines = [] + + debuglines = [] + loadedmodules = [] + for line in filelines: + if line.startswith("Loaded:"): + loadedmodules.append(str(line).split("Loaded:")[-1]) + else: + if not line.startswith(tuple(stdio_ignore)) and not line.isspace(): + debuglines.append(str(line)) + loadedmodules = "Loaded: " + spicemanip.main(loadedmodules, 'andlist') + debuglines.insert(1, loadedmodules) + + return debuglines + + def systemd_logs_fetch(self, bot): + servicepid = self.get_running_pid(bot) + debuglines = [] + for line in os.popen(str("sudo journalctl _PID=" + str(servicepid))).read().split('\n'): + line = str(line).split(str(os.uname()[1] + " "))[-1] + lineparts = str(line).split(": ") + del lineparts[0] + line = spicemanip.main(lineparts, 0) + if not line.isspace(): + debuglines.append(str(line)) + return debuglines + + def get_running_pid(self, bot): + try: + filename = "/run/sopel/sopel-" + str(bot.nick) + ".pid" + with open(filename, 'r') as pid_file: + pidnum = int(pid_file.read()) + except Exception as e: + pidnum = e + pidnum = str(os.popen("systemctl show " + str(bot.nick) + " --property=MainPID").read()).split("=")[-1] + return pidnum + + +botlogs = BotLogs() def setup(bot): - bot_logging(bot, 'SpiceBot_Logs', "Starting Setup Procedure") - bot.config.define_section("SpiceBot_Logs", SpiceBot_Logs_MainSection, validate=False) - - botevents.startup_add([botevents.BOT_LOGS]) - - bot_logs_setup_check(bot) - - botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") + botlogs.log('SpiceBot_Logs', "Starting Setup Procedure") -def bot_logs_setup_check(bot): - if 'SpiceBot_Logs' not in bot.memory: - bot.memory['SpiceBot_Logs'] = {"logs": {"Sopel_systemd": [], "Sopel_stdio": []}, "queue": []} - - -def shutdown(bot): - if "SpiceBot_Logs" in bot.memory: - del bot.memory["SpiceBot_Logs"] - - -@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.event('001') @sopel.module.rule('.*') def join_log_channel(bot, trigger): - if bot.config.SpiceBot_Logs.logging_channel: - channel = bot.config.SpiceBot_Logs.logging_channel + if bot.config.core.logging_channel: + channel = bot.config.core.logging_channel if channel not in bot.channels.keys(): bot.write(('JOIN', bot.nick, channel)) if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: bot.write(('SAJOIN', bot.nick, channel)) - bot_logs_setup_check(bot) - while True: - try: - if len(bot.memory['SpiceBot_Logs']["queue"]): - bot.say(str(bot.memory['SpiceBot_Logs']["queue"][0]), channel) - del bot.memory['SpiceBot_Logs']["queue"][0] - except KeyError: - return + if len(botlogs.SpiceBot_Logs["queue"]): + bot.say(str(botlogs.SpiceBot_Logs["queue"][0]), channel) + del botlogs.SpiceBot_Logs["queue"][0] + else: + botlogs.sopel_config["logging_channel"] = False + botlogs.SpiceBot_Logs["queue"] = [] + + +def setup(bot): + bot_logging(bot, 'SpiceBot_Logs', "Starting Setup Procedure") + botevents.startup_add([botevents.BOT_LOGS]) + botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") def stdio_logs_fetch(bot): diff --git a/sopel_modules/SpiceBot_SBTools/__init__.py b/sopel_modules/SpiceBot_SBTools/__init__.py index 1bb1bed..961b762 100644 --- a/sopel_modules/SpiceBot_SBTools/__init__.py +++ b/sopel_modules/SpiceBot_SBTools/__init__.py @@ -97,23 +97,8 @@ def command_permissions_check(bot, trigger, privslist): def bot_logging(bot, logtype, logentry, stdio=False): - - if 'SpiceBot_Logs' not in bot.memory: - bot.memory['SpiceBot_Logs'] = {"logs": {"Sopel_systemd": [], "Sopel_stdio": []}, "queue": []} - - logmessage = "[" + logtype + "] " + logentry + "" - - bot.memory['SpiceBot_Logs']["queue"].append(logmessage) - - if stdio: - sopel.tools.stderr(logmessage) - - if logtype not in bot.memory['SpiceBot_Logs']["logs"].keys(): - bot.memory['SpiceBot_Logs']["logs"][logtype] = [] - - bot.memory['SpiceBot_Logs']["logs"][logtype].append(logentry) - if len(bot.memory['SpiceBot_Logs']["logs"][logtype]) > 10: - del bot.memory['SpiceBot_Logs']["logs"][logtype][0] + from sopel_modules.SpiceBot_Logs.Logs import botlogs + botlogs.log(logtype, logentry, stdio=False) """ From f81e3560dd3bde341fb533ccf8c68f3ee643605d Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Fri, 17 May 2019 16:19:41 -0400 Subject: [PATCH 20/56] tweak --- sopel_modules/SpiceBot_Channels/Channels.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 15a0ed4..711db9b 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -110,7 +110,7 @@ def trigger_channel_list_recurring(bot, trigger): while bot.memory['SpiceBot_Channels']['ProcessLock']: pass - newlist = [item.lower() for item in oldlist if item.lower() not in bot.memory['SpiceBot_Channels']['channels']] + newlist = [item.lower() for item in oldlist if item.lower() not in list(bot.memory['SpiceBot_Channels']['channels'.keys()])] if "*" in newlist: newlist.remove("*") if len(newlist) and bot.config.SpiceBot_Channels.announcenew: @@ -133,9 +133,9 @@ def bot_part_empty(bot): ignorepartlist = [] if bot.config.SpiceBot_Logs.logging_channel: ignorepartlist.append(bot.config.SpiceBot_Logs.logging_channel) - while True: - for channel in bot.channels.keys(): - if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: - bot.part(channel, "Leaving Empty Channel") - if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: - del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] + + for channel in bot.channels.keys(): + if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: + bot.part(channel, "Leaving Empty Channel") + if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: + del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] From 947776e19ea135df61ddd95b53e66e0d06486c1a Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 08:28:43 -0400 Subject: [PATCH 21/56] try this method --- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 1 - sopel_modules/SpiceBot_Logs/Logs.py | 29 --------------------- sopel_modules/SpiceBot_Logs/Logs_Command.py | 1 - 3 files changed, 31 deletions(-) diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 4b9762e..95a5d40 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -1,5 +1,4 @@ # coding=utf-8 - from __future__ import unicode_literals, absolute_import, division, print_function import sopel.module diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index 62311b5..e6a3dc3 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -1,25 +1,6 @@ # coding=utf-8 - from __future__ import unicode_literals, absolute_import, division, print_function -import sopel.module -from sopel.config.types import StaticSection, ValidatedAttribute - -from sopel_modules.SpiceBot_SBTools import bot_logging -from sopel_modules.SpiceBot_Events.System import botevents - -import os - -import spicemanip - - -# coding=utf8 -from __future__ import unicode_literals, absolute_import, division, print_function - -__author__ = 'Sam Zick' -__email__ = 'sam@deathbybandaid.net' -__version__ = '0.1.1' - import sopel.module import sopel.tools import sopel.config @@ -123,10 +104,6 @@ class BotLogs(): botlogs = BotLogs() -def setup(bot): - botlogs.log('SpiceBot_Logs', "Starting Setup Procedure") - - @sopel.module.event('001') @sopel.module.rule('.*') def join_log_channel(bot, trigger): @@ -147,12 +124,6 @@ def join_log_channel(bot, trigger): botlogs.SpiceBot_Logs["queue"] = [] -def setup(bot): - bot_logging(bot, 'SpiceBot_Logs', "Starting Setup Procedure") - botevents.startup_add([botevents.BOT_LOGS]) - botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") - - def stdio_logs_fetch(bot): stdio_ignore = [] diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index dd4d78e..443b08c 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -1,5 +1,4 @@ # coding=utf-8 - from __future__ import unicode_literals, absolute_import, division, print_function import sopel.module From 49feace919a57b61fa660b64e3c0824ca2961249 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 08:43:54 -0400 Subject: [PATCH 22/56] logging --- sopel_modules/SpiceBot_Channels/Channels.py | 18 +++++------ .../SpiceBot_CommandsQuery/CommandsQuery.py | 10 +++---- .../Databaseaddons.py | 7 +++-- .../SpiceBot_Database_Cache/DatabaseCache.py | 5 ++-- sopel_modules/SpiceBot_Events/Events.py | 10 +++---- sopel_modules/SpiceBot_Events/System.py | 6 ---- sopel_modules/SpiceBot_GifSearch/gifsearch.py | 7 ++--- sopel_modules/SpiceBot_Kick/__init__.py | 7 +++-- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 8 ++--- sopel_modules/SpiceBot_Logs/Logs.py | 4 +-- sopel_modules/SpiceBot_Restart/Restart.py | 5 ++-- sopel_modules/SpiceBot_SBTools/__init__.py | 30 ++++++++----------- .../SpiceBot_SopelPatches/Patches.py | 9 +++--- .../StartupMonologue.py | 4 +-- .../StartupMonologue_Display.py | 11 +++---- sopel_modules/SpiceBot_Update/Update.py | 7 +++-- sopel_modules/SpiceBot_Uptime/Uptime.py | 5 ++-- sopel_modules/SpiceBot_osd/__init__.py | 8 ++--- 18 files changed, 75 insertions(+), 86 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 711db9b..cf96a83 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -6,11 +6,9 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import ( - join_all_channels, chanadmin_all_channels, channel_list_current, - bot_logging - ) +from sopel_modules.SpiceBot_SBTools import join_all_channels, chanadmin_all_channels, channel_list_current, import spicemanip @@ -44,7 +42,7 @@ botchannels = BotChannels() def setup(bot): - bot_logging(bot, 'SpiceBot_Channels', "Starting setup procedure") + botlogs.log('SpiceBot_Channels', "Starting setup procedure") botevents.startup_add([botevents.BOT_CHANNELS]) bot.config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) @@ -70,7 +68,7 @@ def trigger_channel_list_initial(bot, trigger): bot.write(['LIST']) bot.memory['SpiceBot_Channels']['ProcessLock'] = True - bot_logging(bot, 'SpiceBot_Channels', "Initial Channel list populating") + botlogs.log('SpiceBot_Channels', "Initial Channel list populating") starttime = time.time() while not bot.memory['SpiceBot_Channels']['InitialProcess']: @@ -78,12 +76,12 @@ def trigger_channel_list_initial(bot, trigger): if timesince < 60: pass else: - bot_logging(bot, 'SpiceBot_Channels', "Initial Channel list populating Timed Out") + botlogs.log('SpiceBot_Channels', "Initial Channel list populating Timed Out") bot.memory['SpiceBot_Channels']['InitialProcess'] = True channel_list_current(bot) foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) - bot_logging(bot, 'SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") + botlogs.log('SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") join_all_channels(bot) chanadmin_all_channels(bot) @@ -131,8 +129,8 @@ def trigger_channel_list_recurring(bot, trigger): def bot_part_empty(bot): """Don't stay in empty channels""" ignorepartlist = [] - if bot.config.SpiceBot_Logs.logging_channel: - ignorepartlist.append(bot.config.SpiceBot_Logs.logging_channel) + if bot.config.core.logging_channel: + ignorepartlist.append(bot.config.core.logging_channel) for channel in bot.channels.keys(): if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: diff --git a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py index 5de2458..af7f7ab 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py +++ b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py @@ -7,14 +7,14 @@ import sopel.module import os +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import bot_logging import spicemanip def setup(bot): - bot_logging(bot, 'SpiceBot_CommandsQuery', "Starting setup procedure") + botlogs.log('SpiceBot_CommandsQuery', "Starting setup procedure") botevents.startup_add([botevents.BOT_COMMANDSQUERY]) if 'SpiceBot_CommandsQuery' not in bot.memory: @@ -44,7 +44,7 @@ def setup(bot): pypi_modules_dir = os.path.join(plugin_dir, pathname) filepathlisting.append(pypi_modules_dir) except Exception as e: - bot_logging(bot, 'SpiceBot_CommandsQuery', "sopel_modules not loaded :" + str(e)) + botlogs.log('SpiceBot_CommandsQuery', "sopel_modules not loaded :" + str(e)) # Extra directories filepathlist = [] @@ -154,7 +154,7 @@ def setup(bot): bot.memory['SpiceBot_CommandsQuery']['commands'][comtype][comalias] = {"aliasfor": maincom} for comtype in ['module', 'nickname', 'rule']: - bot_logging(bot, 'SpiceBot_CommandsQuery', "Found " + str(len(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys())) + " " + comtype + " commands.", True) + botlogs.log('SpiceBot_CommandsQuery', "Found " + str(len(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys())) + " " + comtype + " commands.", True) for command in bot.memory['SpiceBot_CommandsQuery']['commands']['rule'].keys(): if command.startswith("$nickname"): @@ -176,7 +176,7 @@ def bot_events_complete(bot, trigger): for comtype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): if comtype not in ['module', 'nickname', 'rule']: - bot_logging(bot, 'SpiceBot_CommandsQuery', "Found " + str(len(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys())) + " " + comtype + " commands.", True) + botlogs.log('SpiceBot_CommandsQuery', "Found " + str(len(bot.memory['SpiceBot_CommandsQuery']['commands'][comtype].keys())) + " " + comtype + " commands.", True) def commandsquery_register(bot, command_type, validcoms, aliasfor=None): diff --git a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py index bc74932..bb80e8d 100644 --- a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py +++ b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py @@ -5,17 +5,18 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel.module from sopel.tools import Identifier -from sopel_modules.SpiceBot_SBTools import bot_logging from sopel.db import SopelDB, NickValues, ChannelValues -from sqlalchemy.exc import SQLAlchemyError +from sqlalchemy.exc import SQLAlchemyError import json +from sopel_modules.SpiceBot_Logs.Logs import botlogs + def setup(bot): pass # Inject Database Functions - bot_logging(bot, 'SpiceBot_Databaseaddons', "Implanting Database functions into bot") + botlogs.log('SpiceBot_Databaseaddons', "Implanting Database functions into bot") SopelDB.delete_nick_value = SopelDBCache.delete_nick_value SopelDB.adjust_nick_value = SopelDBCache.adjust_nick_value SopelDB.delete_channel_value = SopelDBCache.delete_channel_value diff --git a/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py b/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py index 1811877..8f474ef 100644 --- a/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py +++ b/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py @@ -4,11 +4,12 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel.module -from sopel_modules.SpiceBot_SBTools import bot_logging + +from sopel_modules.SpiceBot_Logs.Logs import botlogs def setup(bot): - bot_logging(bot, 'SpiceBot_DatabaseCache', "Setting up Database Cache") + botlogs.log('SpiceBot_DatabaseCache', "Setting up Database Cache") if 'SpiceBot_DatabaseCache' not in bot.memory: bot.memory['SpiceBot_DatabaseCache'] = dict() diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 80f2a2f..0eedcbd 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -5,8 +5,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.trigger import PreTrigger +from sopel_modules.SpiceBot_Logs.Logs import botlogs from .System import botevents -from sopel_modules.SpiceBot_SBTools import bot_logging import time @@ -23,7 +23,7 @@ def bot_startup_welcome(bot, trigger): @sopel.module.rule('.*') def bot_events_start(bot, trigger): """This stage is redundant, but shows the system is working.""" - bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) + botlogs.log('SpiceBot_Events', trigger.args[1], True) botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") @@ -42,7 +42,7 @@ def bot_startup_connection(bot, trigger): @sopel.module.rule('.*') def bot_events_startup_complete(bot, trigger): """All events registered as required for startup have completed""" - bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) + botlogs.log('SpiceBot_Events', trigger.args[1], True) botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") @@ -50,7 +50,7 @@ def bot_events_startup_complete(bot, trigger): @sopel.module.rule('.*') def bot_events_connected(bot, trigger): """For items tossed in a queue, this will trigger then accordingly""" - bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) + botlogs.log('SpiceBot_Events', trigger.args[1], True) while True: if len(botevents.SpiceBot_Events["trigger_queue"]): @@ -72,4 +72,4 @@ def bot_events_connected(bot, trigger): @sopel.module.rule('.*') def bot_events_complete(bot, trigger): """This is here simply to log to stderr that this was recieved.""" - bot_logging(bot, 'SpiceBot_Events', trigger.args[1], True) + botlogs.log('SpiceBot_Events', trigger.args[1], True) diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot_Events/System.py index 22ac1c4..e2d27f8 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot_Events/System.py @@ -7,8 +7,6 @@ import sopel from sopel.trigger import PreTrigger import functools -from sopel_modules.SpiceBot_SBTools import bot_logging - class BotEvents(object): """A dynamic listing of all the notable Bot numeric events. @@ -109,7 +107,3 @@ class BotEvents(object): botevents = BotEvents() - - -def setup(bot): - bot_logging(bot, 'SpiceBot_Events', "Starting setup procedure") diff --git a/sopel_modules/SpiceBot_GifSearch/gifsearch.py b/sopel_modules/SpiceBot_GifSearch/gifsearch.py index 2984d10..029c29c 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifsearch.py +++ b/sopel_modules/SpiceBot_GifSearch/gifsearch.py @@ -5,11 +5,10 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents - from sopel_modules.SpiceBot_CommandsQuery.CommandsQuery import commandsquery_register - -from sopel_modules.SpiceBot_SBTools import read_directory_json_to_dict, bot_logging +from sopel_modules.SpiceBot_SBTools import read_directory_json_to_dict import spicemanip @@ -46,7 +45,7 @@ def configure(config): def setup(bot): - bot_logging(bot, 'SpiceBot_GifSearch', "Starting Setup Procedure") + botlogs.log('SpiceBot_GifSearch', "Starting Setup Procedure") botevents.startup_add([botevents.BOT_GIFSEARCH]) if 'SpiceBot_GifSearch' not in bot.memory: diff --git a/sopel_modules/SpiceBot_Kick/__init__.py b/sopel_modules/SpiceBot_Kick/__init__.py index 44b8ea5..06ad646 100644 --- a/sopel_modules/SpiceBot_Kick/__init__.py +++ b/sopel_modules/SpiceBot_Kick/__init__.py @@ -14,7 +14,8 @@ from sopel import tools, module from sopel.tools import Identifier from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_SBTools import bot_logging +from sopel_modules.SpiceBot_Logs.Logs import botlogs + import time from collections import abc @@ -34,12 +35,12 @@ def configure(config): def setup(bot): # Inject KICK - bot_logging(bot, 'SpiceBot_Kick', "Implanting Kick function into bot") + botlogs.log('SpiceBot_Kick', "Implanting Kick function into bot") bot.kick = SopelKICK.kick sopel.bot.SopelWrapper.kick = SopelWrapperKICK.kick # verify config settings for server - bot_logging(bot, 'SpiceBot_Kick', "Checking for config settings") + botlogs.log('SpiceBot_Kick', "Checking for config settings") bot.config.define_section("SpiceBot_Kick", SpiceBot_Kick, validate=False) diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 95a5d40..7218672 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -4,8 +4,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import bot_logging -from .Logs import stdio_logs_fetch + +from .Logs import botlogs, stdio_logs_fetch @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE) @@ -21,9 +21,9 @@ def bot_startup_monologue_start(bot, trigger): if len(searchphrasefound): for foundphase in searchphrasefound: - bot_logging(bot, 'SpiceBot_Logs', str(foundphase)) + botlogs.log('SpiceBot_Logs', str(foundphase)) searchphrasefound.insert(0, "Notice to Bot Admins: ") searchphrasefound.append("Run the debug command for more information.") bot.osd(searchphrasefound, bot.channels.keys()) else: - bot_logging(bot, 'SpiceBot_Logs', "No issues found at bot startup!", True) + botlogs.log('SpiceBot_Logs', "No issues found at bot startup!", True) diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index e6a3dc3..74a1ae5 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -10,7 +10,7 @@ import os import spicemanip -class BotLogs(): +class botlogs(): """This Is a contained source of log information""" def __init__(self): self.SpiceBot_Logs = { @@ -101,7 +101,7 @@ class BotLogs(): return pidnum -botlogs = BotLogs() +botlogs = botlogs.log() @sopel.module.event('001') diff --git a/sopel_modules/SpiceBot_Restart/Restart.py b/sopel_modules/SpiceBot_Restart/Restart.py index b6870ee..421b990 100644 --- a/sopel_modules/SpiceBot_Restart/Restart.py +++ b/sopel_modules/SpiceBot_Restart/Restart.py @@ -5,7 +5,8 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel.module -from sopel_modules.SpiceBot_SBTools import bot_logging, spicebot_reload +from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot_SBTools import spicebot_reload @sopel.module.nickname_commands('restart') @@ -15,7 +16,7 @@ def nickname_comand_restart(bot, trigger): bot.say("You are not authorized to perform this function.") quitmessage = "Received command from " + trigger.nick + " to restart. Be Back Soon!" - bot_logging(bot, 'SpiceBot_Restart', quitmessage) + botlogs.log('SpiceBot_Restart', quitmessage) bot.osd(quitmessage, bot.channels.keys()) # service_manip(bot, bot.nick, 'restart', 'SpiceBot_Restart') diff --git a/sopel_modules/SpiceBot_SBTools/__init__.py b/sopel_modules/SpiceBot_SBTools/__init__.py index 961b762..e31439b 100644 --- a/sopel_modules/SpiceBot_SBTools/__init__.py +++ b/sopel_modules/SpiceBot_SBTools/__init__.py @@ -20,6 +20,8 @@ from pygit2 import clone_repository import spicemanip +from sopel_modules.SpiceBot_Logs.Logs import botlogs + """Variable References""" @@ -93,14 +95,6 @@ def command_permissions_check(bot, trigger, privslist): return True -"""Logging""" - - -def bot_logging(bot, logtype, logentry, stdio=False): - from sopel_modules.SpiceBot_Logs.Logs import botlogs - botlogs.log(logtype, logentry, stdio=False) - - """ Time """ @@ -343,7 +337,7 @@ def spicebot_update(bot, deps=False): if not os.path.exists(clonepath) or not os.path.isdir(clonepath): os.system(clonepath) - bot_logging(bot, 'SpiceBot_Update', "Cloning to " + clonepath, True) + botlogs.log('SpiceBot_Update', "Cloning to " + clonepath, True) clone_repository(str(bot.config.SpiceBot_Update.gitrepo + ".git"), clonepath, checkout_branch=bot.config.SpiceBot_Update.gitbranch) @@ -354,12 +348,12 @@ def spicebot_update(bot, deps=False): # pipcommand += " git+" + str(bot.config.SpiceBot_Update.gitrepo) + "@" + str(bot.config.SpiceBot_Update.gitbranch) pipcommand += " /tmp/SpiceBot/" - bot_logging(bot, 'SpiceBot_Update', "Running `" + pipcommand + "`", True) + botlogs.log('SpiceBot_Update', "Running `" + pipcommand + "`", True) # for line in os.popen(pipcommand).read().split('\n'): - # bot_logging(bot, 'SpiceBot_Update', " " + line) + # botlogs.log('SpiceBot_Update', " " + line) os.system(pipcommand) - bot_logging(bot, 'SpiceBot_Update', "Deleting " + clonepath, True) + botlogs.log('SpiceBot_Update', "Deleting " + clonepath, True) os.system("sudo rm -r /tmp/SpiceBot") @@ -375,10 +369,10 @@ def service_manip(bot, servicename, dowhat, log_from='service_manip'): if str(dowhat) not in ["start", "stop", "restart"]: return try: - bot_logging(bot, log_from, str(dowhat).title() + "ing " + str(servicename) + ".service.") + botlogs.log(log_from, str(dowhat).title() + "ing " + str(servicename) + ".service.") os.system("sudo service " + str(servicename) + " " + str(dowhat)) except Exception as e: - bot_logging(bot, log_from, str(dowhat).title() + "ing " + str(servicename) + ".service Failed: " + str(e)) + botlogs.log(log_from, str(dowhat).title() + "ing " + str(servicename) + ".service Failed: " + str(e)) """Config Reading Functions""" @@ -410,7 +404,7 @@ def read_directory_json_to_dict(bot, directories, configtypename="Config File", except Exception as e: filereadgood = False if bot: - bot_logging(bot, log_from, "Error loading %s: %s (%s)" % (configtypename, e, filepath)) + botlogs.log(log_from, "Error loading %s: %s (%s)" % (configtypename, e, filepath)) dict_from_file = dict() # Close File inf.close() @@ -425,10 +419,10 @@ def read_directory_json_to_dict(bot, directories, configtypename="Config File", if filecount: if bot: - bot_logging(bot, log_from, 'Registered %d %s dict files,' % (filecount, configtypename)) - bot_logging(bot, log_from, '%d %s dict files failed to load' % (fileopenfail, configtypename), True) + botlogs.log(log_from, 'Registered %d %s dict files,' % (filecount, configtypename)) + botlogs.log(log_from, '%d %s dict files failed to load' % (fileopenfail, configtypename), True) else: if bot: - bot_logging(bot, log_from, "Warning: Couldn't load any %s dict files" % (configtypename)) + botlogs.log(log_from, "Warning: Couldn't load any %s dict files" % (configtypename)) return configs_dict diff --git a/sopel_modules/SpiceBot_SopelPatches/Patches.py b/sopel_modules/SpiceBot_SopelPatches/Patches.py index ee7fc20..c6a4bdf 100644 --- a/sopel_modules/SpiceBot_SopelPatches/Patches.py +++ b/sopel_modules/SpiceBot_SopelPatches/Patches.py @@ -6,16 +6,15 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi import sopel import sopel.module -from sopel_modules.SpiceBot_SBTools import bot_logging, stock_modules_begone - -import os +from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot_SBTools import stock_modules_begone def setup(bot): - bot_logging(bot, 'Sopel_Patch', "Patching Sopels built-in url_callbacks") + botlogs.log('Sopel_Patch', "Patching Sopels built-in url_callbacks") if 'url_callbacks' not in bot.memory: bot.memory['url_callbacks'] = sopel.tools.SopelMemory() - bot_logging(bot, 'Sopel_Patch', "Removing Stock Modules and verifying Dummy Command is present.") + botlogs.log('Sopel_Patch', "Removing Stock Modules and verifying Dummy Command is present.") stock_modules_begone(bot) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py index 4070864..24ccb3b 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py @@ -4,12 +4,12 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import bot_logging def setup(bot): - bot_logging(bot, 'SpiceBot_StartupMonologue', "Starting setup procedure") + botlogs.log('SpiceBot_StartupMonologue', "Starting setup procedure") botevents.startup_add([botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED]) if 'SpiceBot_StartupMonologue' not in bot.memory: diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index e626b16..5bd857d 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -4,8 +4,9 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import humanized_time, bot_logging +from sopel_modules.SpiceBot_SBTools import humanized_time import time @@ -15,7 +16,7 @@ import time def bot_startup_monologue_start(bot, trigger): # Startup - bot_logging(bot, 'SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") @@ -31,7 +32,7 @@ def bot_startup_monologue_commands(bot, trigger): availablecomsfiles += bot.memory['SpiceBot_CommandsQuery']['counts'] bot.memory['SpiceBot_StartupMonologue'].append("There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") - bot_logging(bot, 'SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") + botlogs.log('SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") @@ -55,10 +56,10 @@ def bot_startup_monologue_display(bot, trigger): bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) # Announce to chan, then handle some closing stuff - bot_logging(bot, 'SpiceBot_StartupMonologue', bot.nick + " startup complete") + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " startup complete") bot.memory['SpiceBot_StartupMonologue'].insert(0, " startup complete") bot.osd(bot.memory['SpiceBot_StartupMonologue'], bot.channels.keys(), 'ACTION') botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") - bot_logging(bot, 'SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) + botlogs.log('SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) diff --git a/sopel_modules/SpiceBot_Update/Update.py b/sopel_modules/SpiceBot_Update/Update.py index 6d58141..111172d 100644 --- a/sopel_modules/SpiceBot_Update/Update.py +++ b/sopel_modules/SpiceBot_Update/Update.py @@ -8,7 +8,8 @@ from sopel.config.types import StaticSection, ValidatedAttribute import spicemanip -from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, bot_logging, spicebot_reload, spicebot_update +from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, spicebot_reload, spicebot_update class SpiceBot_Update_MainSection(StaticSection): @@ -23,7 +24,7 @@ def configure(config): def setup(bot): - bot_logging(bot, 'SpiceBot_Update', "Initial Setup processing") + botlogs.log('SpiceBot_Update', "Initial Setup processing") bot.config.define_section("SpiceBot_Update", SpiceBot_Update_MainSection, validate=False) @@ -48,7 +49,7 @@ def nickname_comand_update(bot, trigger): triggerargs = spicemanip.main(triggerargs, '2+', 'list') quitmessage = "Received command from " + trigger.nick + " to update from Github and restart" - bot_logging(bot, 'SpiceBot_Update', quitmessage) + botlogs.log('SpiceBot_Update', quitmessage) bot.osd(quitmessage, bot.channels.keys()) if commandused == 'nodeps': diff --git a/sopel_modules/SpiceBot_Uptime/Uptime.py b/sopel_modules/SpiceBot_Uptime/Uptime.py index 2dbaf32..4c127b9 100644 --- a/sopel_modules/SpiceBot_Uptime/Uptime.py +++ b/sopel_modules/SpiceBot_Uptime/Uptime.py @@ -6,15 +6,14 @@ import sopel.module import time +from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_SBTools import humanized_time -from sopel_modules.SpiceBot_SBTools import bot_logging - def setup(bot): if 'SpiceBot_Uptime' not in bot.memory: now = time.time() - bot_logging(bot, 'SpiceBot_Uptime', "Start time set to " + str(time.time())) + botlogs.log('SpiceBot_Uptime', "Start time set to " + str(time.time())) bot.memory["SpiceBot_Uptime"] = now diff --git a/sopel_modules/SpiceBot_osd/__init__.py b/sopel_modules/SpiceBot_osd/__init__.py index 905fd71..a097396 100644 --- a/sopel_modules/SpiceBot_osd/__init__.py +++ b/sopel_modules/SpiceBot_osd/__init__.py @@ -14,7 +14,7 @@ from sopel import tools, module from sopel.tools import Identifier from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_SBTools import bot_logging +from sopel_modules.SpiceBot_Logs.Logs import botlogs import time from collections import abc @@ -39,7 +39,7 @@ def configure(config): def setup(bot): # Inject OSD - bot_logging(bot, 'SpiceBot_OSD', "Implanting OSD function into bot") + botlogs.log('SpiceBot_OSD', "Implanting OSD function into bot") bot.osd = SopelOSD.osd sopel.bot.SopelWrapper.osd = SopelWrapperOSD.osd tools.get_available_message_bytes = ToolsOSD.get_available_message_bytes @@ -47,7 +47,7 @@ def setup(bot): tools.get_message_recipientgroups = ToolsOSD.get_message_recipientgroups # overwrite default bot messaging - bot_logging(bot, 'SpiceBot_OSD', "Overwrite Default Sopel messaging commands") + botlogs.log('SpiceBot_OSD', "Overwrite Default Sopel messaging commands") bot.osd = SopelOSD.osd bot.say = SopelOSD.say bot.action = SopelOSD.action @@ -60,7 +60,7 @@ def setup(bot): sopel.bot.SopelWrapper.reply = SopelWrapperOSD.reply # verify config settings for server - bot_logging(bot, 'SpiceBot_OSD', "Checking for config settings") + botlogs.log('SpiceBot_OSD', "Checking for config settings") bot.config.define_section("SpiceBot_OSD", SpiceBot_OSD, validate=False) From f2071f423748f23b5410327473abdb2b050bfb51 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 08:48:42 -0400 Subject: [PATCH 23/56] oops --- sopel_modules/SpiceBot_Logs/Logs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index 74a1ae5..0c5c043 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -101,7 +101,7 @@ class botlogs(): return pidnum -botlogs = botlogs.log() +botlogs = botlogs() @sopel.module.event('001') From f72f7671df0daefc33b0ade85a95c2661673b241 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 08:52:12 -0400 Subject: [PATCH 24/56] trailing comma --- sopel_modules/SpiceBot_Channels/Channels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index cf96a83..33c1b8d 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -8,7 +8,7 @@ from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute from sopel_modules.SpiceBot_Logs.Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from sopel_modules.SpiceBot_SBTools import join_all_channels, chanadmin_all_channels, channel_list_current, +from sopel_modules.SpiceBot_SBTools import join_all_channels, chanadmin_all_channels, channel_list_current import spicemanip From cc0bc2676b8a2e25ecf5f30275850d405af49efc Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 09:07:36 -0400 Subject: [PATCH 25/56] update logging --- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 4 +- sopel_modules/SpiceBot_Logs/Logs.py | 65 --------------------- sopel_modules/SpiceBot_Logs/Logs_Command.py | 18 +++--- 3 files changed, 11 insertions(+), 76 deletions(-) diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 7218672..543973e 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -5,14 +5,14 @@ import sopel.module from sopel_modules.SpiceBot_Events.System import botevents -from .Logs import botlogs, stdio_logs_fetch +from .Logs import botlogs @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - debuglines = stdio_logs_fetch(bot) + debuglines = botlogs.stdio_logs_fetch(bot) searchphrasefound = [] for line in debuglines: diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot_Logs/Logs.py index 0c5c043..76627cd 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot_Logs/Logs.py @@ -122,68 +122,3 @@ def join_log_channel(bot, trigger): else: botlogs.sopel_config["logging_channel"] = False botlogs.SpiceBot_Logs["queue"] = [] - - -def stdio_logs_fetch(bot): - - stdio_ignore = [] - for logtype in bot.memory['SpiceBot_Logs']["logs"].keys(): - stdio_ignore.append("[" + logtype + "]") - - logfile = os.path.os.path.join(bot.config.core.logdir, 'stdio.log') - - try: - log_file_lines = [] - log_file = open(logfile, 'r') - lines = log_file.readlines() - for line in lines: - log_file_lines.append(line) - log_file.close() - - currentline, linenumindex = 0, [] - for line in log_file_lines: - if line.startswith("Welcome to Sopel. Loading modules..."): - linenumindex.append(currentline) - currentline += 1 - last_start = max(linenumindex) - filelines = log_file_lines[last_start:] - except Exception as e: - debuglines = e - filelines = [] - - debuglines = [] - loadedmodules = [] - for line in filelines: - if line.startswith("Loaded:"): - loadedmodules.append(str(line).split("Loaded:")[-1]) - else: - if not line.startswith(tuple(stdio_ignore)) and not line.isspace(): - debuglines.append(str(line)) - loadedmodules = "Loaded: " + spicemanip.main(loadedmodules, 'andlist') - debuglines.insert(1, loadedmodules) - - return debuglines - - -def systemd_logs_fetch(bot): - servicepid = get_running_pid(bot) - debuglines = [] - for line in os.popen(str("sudo journalctl _PID=" + str(servicepid))).read().split('\n'): - line = str(line).split(str(os.uname()[1] + " "))[-1] - lineparts = str(line).split(": ") - del lineparts[0] - line = spicemanip.main(lineparts, 0) - if not line.isspace(): - debuglines.append(str(line)) - return debuglines - - -def get_running_pid(bot): - try: - filename = "/run/sopel/" + str(bot.nick) + ".pid" - with open(filename, 'r') as pid_file: - pidnum = int(pid_file.read()) - except Exception as e: - pidnum = e - pidnum = str(os.popen("systemctl show " + str(bot.nick) + " --property=MainPID").read()).split("=")[-1] - return pidnum diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index 443b08c..2f78af7 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -5,9 +5,9 @@ import sopel.module import spicemanip -from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, inlist, inlist_match, similar_list +from .Logs import botlogs from sopel_modules.SpiceBot_Events.System import botevents -from .Logs import systemd_logs_fetch, stdio_logs_fetch +from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, inlist, inlist_match, similar_list @botevents.check_ready([botevents.BOT_LOGS]) @@ -22,11 +22,11 @@ def bot_command_logs(bot, trigger): logtype = spicemanip.main(triggerargs, 1) or None if not logtype: - bot.osd("Current valid log(s) include: " + spicemanip.main(bot.memory['SpiceBot_Logs']["logs"].keys(), 'andlist'), trigger.sender, 'action') + bot.osd("Current valid log(s) include: " + spicemanip.main(botlogs.SpiceBot_Logs["list"].keys(), 'andlist'), trigger.sender, 'action') return - if not inlist(bot, logtype, bot.memory['SpiceBot_Logs']["logs"].keys()): - closestmatches = similar_list(bot, logtype, bot.memory['SpiceBot_Logs']["logs"].keys(), 10, 'reverse') + if not inlist(bot, logtype, botlogs.SpiceBot_Logs["list"].keys()): + closestmatches = similar_list(bot, logtype, botlogs.SpiceBot_Logs["list"].keys(), 10, 'reverse') if not len(closestmatches): bot.notice("No valid logs match " + str(logtype) + ".", trigger.nick) else: @@ -34,14 +34,14 @@ def bot_command_logs(bot, trigger): return - logtype = inlist_match(bot, logtype, bot.memory['SpiceBot_Logs']["logs"].keys()) + logtype = inlist_match(bot, logtype, botlogs.SpiceBot_Logs["list"].keys()) if logtype == "Sopel_systemd": - logindex = systemd_logs_fetch(bot) + logindex = botlogs.systemd_logs_fetch(bot) elif logtype == "Sopel_stdio": - logindex = stdio_logs_fetch(bot) + logindex = botlogs.stdio_logs_fetch(bot) else: - logindex = bot.memory['SpiceBot_Logs']["logs"][logtype] + logindex = botlogs.SpiceBot_Logs["list"][logtype] if not len(logindex): bot.osd("No logs found for " + str(logtype) + ".") From 79e9b39961dd666deddbf2ea83c34905226a8c29 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 09:26:11 -0400 Subject: [PATCH 26/56] channels --- sopel_modules/SpiceBot_Channels/Channels.py | 2 +- sopel_modules/SpiceBot_SBTools/__init__.py | 22 +++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 33c1b8d..6424166 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -133,7 +133,7 @@ def bot_part_empty(bot): ignorepartlist.append(bot.config.core.logging_channel) for channel in bot.channels.keys(): - if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist: + if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist and channel.startswith("#"): bot.part(channel, "Leaving Empty Channel") if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] diff --git a/sopel_modules/SpiceBot_SBTools/__init__.py b/sopel_modules/SpiceBot_SBTools/__init__.py index e31439b..5fb5f94 100644 --- a/sopel_modules/SpiceBot_SBTools/__init__.py +++ b/sopel_modules/SpiceBot_SBTools/__init__.py @@ -273,21 +273,23 @@ def channel_privs(bot, channel, privtype): def join_all_channels(bot): if bot.config.SpiceBot_Channels.joinall: for channel in bot.memory['SpiceBot_Channels']['channels'].keys(): - if channel not in bot.channels.keys() and channel not in bot.config.SpiceBot_Channels.chanignore: - bot.write(('JOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) - if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: - bot.write(('SAJOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) + if channel.startswith("#"): + if channel not in bot.channels.keys() and channel not in bot.config.SpiceBot_Channels.chanignore: + bot.write(('JOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) + if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: + bot.write(('SAJOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) def chanadmin_all_channels(bot): # Chan ADMIN +a for channel in bot.channels.keys(): - if channel not in bot.config.SpiceBot_Channels.chanignore: - if bot.config.SpiceBot_Channels.operadmin: - if not bot.channels[channel].privileges[bot.nick] < sopel.module.ADMIN: - bot.write(('SAMODE', channel, "+a", bot.nick)) - else: - bot.part(channel) + if channel.startswith("#"): + if channel not in bot.config.SpiceBot_Channels.chanignore: + if bot.config.SpiceBot_Channels.operadmin: + if not bot.channels[channel].privileges[bot.nick] < sopel.module.ADMIN: + bot.write(('SAMODE', channel, "+a", bot.nick)) + else: + bot.part(channel) def channel_list_current(bot): From 4f3909948f76212ccb170e3e504419c204c94005 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 14:25:32 -0400 Subject: [PATCH 27/56] Attempt SpiceBot import start --- .../System.py => SpiceBot/Events.py} | 16 ++++++---- .../{SpiceBot_Logs => SpiceBot}/Logs.py | 32 ++++--------------- sopel_modules/SpiceBot/__init__.py | 14 ++++++++ sopel_modules/SpiceBot_AI/AI.py | 2 +- sopel_modules/SpiceBot_Channels/Channels.py | 4 +-- .../SpiceBot_Channels/Channels_Command.py | 2 +- .../SpiceBot_CommandsQuery/CommandsQuery.py | 4 +-- .../NickQueryCommand.py | 2 +- .../SpiceBot_CommandsQuery/QueryCommand.py | 2 +- .../Databaseaddons.py | 2 +- .../SpiceBot_Database_Cache/DatabaseCache.py | 2 +- sopel_modules/SpiceBot_Events/Events.py | 4 +-- sopel_modules/SpiceBot_Events/__init__.py | 1 - sopel_modules/SpiceBot_GifSearch/gif.py | 2 +- sopel_modules/SpiceBot_GifSearch/gifapi.py | 2 +- sopel_modules/SpiceBot_GifSearch/gifsearch.py | 4 +-- .../SpiceBot_InvalidCommand/InvalidCommand.py | 2 +- sopel_modules/SpiceBot_Kick/__init__.py | 2 +- sopel_modules/SpiceBot_Logs/ErrorDisplay.py | 5 ++- sopel_modules/SpiceBot_Logs/Logs_Command.py | 4 +-- sopel_modules/SpiceBot_Logs/Queue.py | 28 ++++++++++++++++ sopel_modules/SpiceBot_Logs/__init__.py | 2 +- sopel_modules/SpiceBot_Restart/Restart.py | 2 +- sopel_modules/SpiceBot_SBTools/__init__.py | 2 +- .../SpiceBot_SopelPatches/Patches.py | 2 +- .../StartupMonologue.py | 4 +-- .../StartupMonologue_Display.py | 4 +-- sopel_modules/SpiceBot_Update/Update.py | 2 +- sopel_modules/SpiceBot_Uptime/Uptime.py | 2 +- sopel_modules/SpiceBot_osd/__init__.py | 2 +- 30 files changed, 92 insertions(+), 66 deletions(-) rename sopel_modules/{SpiceBot_Events/System.py => SpiceBot/Events.py} (93%) rename sopel_modules/{SpiceBot_Logs => SpiceBot}/Logs.py (80%) create mode 100644 sopel_modules/SpiceBot/__init__.py create mode 100644 sopel_modules/SpiceBot_Logs/Queue.py diff --git a/sopel_modules/SpiceBot_Events/System.py b/sopel_modules/SpiceBot/Events.py similarity index 93% rename from sopel_modules/SpiceBot_Events/System.py rename to sopel_modules/SpiceBot/Events.py index e2d27f8..d01b9a3 100644 --- a/sopel_modules/SpiceBot_Events/System.py +++ b/sopel_modules/SpiceBot/Events.py @@ -1,10 +1,14 @@ -#!/usr/bin/env python -# coding=utf-8 -from __future__ import unicode_literals, absolute_import, print_function, division +# coding=utf8 +from __future__ import unicode_literals, absolute_import, division, print_function +""" +This is the SpiceBot events system. + +We utilize the Sopel code for event numbers and +self-trigger the bot into performing actions +""" + -# sopel imports import sopel -from sopel.trigger import PreTrigger import functools @@ -45,7 +49,7 @@ class BotEvents(object): def trigger(self, bot, number, message="SpiceBot_Events"): number = str(number) if number in self.defaultevents or self.check(self.BOT_CONNECTED): - pretrigger = PreTrigger( + pretrigger = sopel.trigger.PreTrigger( bot.nick, ":SpiceBot_Events " + number + " " + str(bot.nick) + " :" + message ) diff --git a/sopel_modules/SpiceBot_Logs/Logs.py b/sopel_modules/SpiceBot/Logs.py similarity index 80% rename from sopel_modules/SpiceBot_Logs/Logs.py rename to sopel_modules/SpiceBot/Logs.py index 76627cd..da458ae 100644 --- a/sopel_modules/SpiceBot_Logs/Logs.py +++ b/sopel_modules/SpiceBot/Logs.py @@ -1,12 +1,14 @@ -# coding=utf-8 +# coding=utf8 from __future__ import unicode_literals, absolute_import, division, print_function +""" +This is the SpiceBot Logs system. -import sopel.module -import sopel.tools -import sopel.config +This Class stores logs in an easy to access manner +""" + +import sopel import os - import spicemanip @@ -102,23 +104,3 @@ class botlogs(): botlogs = botlogs() - - -@sopel.module.event('001') -@sopel.module.rule('.*') -def join_log_channel(bot, trigger): - - if bot.config.core.logging_channel: - channel = bot.config.core.logging_channel - if channel not in bot.channels.keys(): - bot.write(('JOIN', bot.nick, channel)) - if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: - bot.write(('SAJOIN', bot.nick, channel)) - - while True: - if len(botlogs.SpiceBot_Logs["queue"]): - bot.say(str(botlogs.SpiceBot_Logs["queue"][0]), channel) - del botlogs.SpiceBot_Logs["queue"][0] - else: - botlogs.sopel_config["logging_channel"] = False - botlogs.SpiceBot_Logs["queue"] = [] diff --git a/sopel_modules/SpiceBot/__init__.py b/sopel_modules/SpiceBot/__init__.py new file mode 100644 index 0000000..aeefd66 --- /dev/null +++ b/sopel_modules/SpiceBot/__init__.py @@ -0,0 +1,14 @@ +# coding=utf8 +from __future__ import unicode_literals, absolute_import, division, print_function +""" +These are the core SpiceBot Classes + +This module contains references only for other modules to utilize. +""" + +from .Logs import * +from .Events import * + +__author__ = 'Sam Zick' +__email__ = 'sam@deathbybandaid.net' +__version__ = '0.1.1' diff --git a/sopel_modules/SpiceBot_AI/AI.py b/sopel_modules/SpiceBot_AI/AI.py index c476bcb..0a3f8f1 100644 --- a/sopel_modules/SpiceBot_AI/AI.py +++ b/sopel_modules/SpiceBot_AI/AI.py @@ -7,7 +7,7 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, googlesearch, bot_privs, inlist, inlist_match, similar_list -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents @botevents.check_ready([botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 6424166..7a54d60 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -6,8 +6,8 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import join_all_channels, chanadmin_all_channels, channel_list_current import spicemanip diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels/Channels_Command.py index 5648f2f..259132b 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels/Channels_Command.py @@ -6,7 +6,7 @@ import sopel.module import spicemanip -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import ( sopel_triggerargs, inlist, channel_privs, join_all_channels, channel_list_current, diff --git a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py index af7f7ab..9677108 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py +++ b/sopel_modules/SpiceBot_CommandsQuery/CommandsQuery.py @@ -7,8 +7,8 @@ import sopel.module import os -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents import spicemanip diff --git a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py index 23d4ca5..a04866f 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/NickQueryCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel import sopel.module -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, letters_in_string diff --git a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py index 7adb427..f2e6de1 100644 --- a/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py +++ b/sopel_modules/SpiceBot_CommandsQuery/QueryCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel import sopel.module -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, similar_list, letters_in_string diff --git a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py index bb80e8d..9e8343d 100644 --- a/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py +++ b/sopel_modules/SpiceBot_Database_Addons/Databaseaddons.py @@ -10,7 +10,7 @@ from sopel.db import SopelDB, NickValues, ChannelValues from sqlalchemy.exc import SQLAlchemyError import json -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs def setup(bot): diff --git a/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py b/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py index 8f474ef..f31ea22 100644 --- a/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py +++ b/sopel_modules/SpiceBot_Database_Cache/DatabaseCache.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel.module -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs def setup(bot): diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 0eedcbd..2a92e6c 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -5,8 +5,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.trigger import PreTrigger -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from .System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents import time diff --git a/sopel_modules/SpiceBot_Events/__init__.py b/sopel_modules/SpiceBot_Events/__init__.py index 532880f..2e6b7d5 100644 --- a/sopel_modules/SpiceBot_Events/__init__.py +++ b/sopel_modules/SpiceBot_Events/__init__.py @@ -1,7 +1,6 @@ # coding=utf8 from __future__ import unicode_literals, absolute_import, division, print_function -from .System import * from .Events import * __author__ = 'Sam Zick' diff --git a/sopel_modules/SpiceBot_GifSearch/gif.py b/sopel_modules/SpiceBot_GifSearch/gif.py index e517965..88c5566 100644 --- a/sopel_modules/SpiceBot_GifSearch/gif.py +++ b/sopel_modules/SpiceBot_GifSearch/gif.py @@ -7,7 +7,7 @@ from sopel import module from .gifsearch import getGif from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents import spicemanip diff --git a/sopel_modules/SpiceBot_GifSearch/gifapi.py b/sopel_modules/SpiceBot_GifSearch/gifapi.py index 2f6cc7b..5fcd73e 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifapi.py +++ b/sopel_modules/SpiceBot_GifSearch/gifapi.py @@ -9,7 +9,7 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents @botevents.check_ready([botevents.BOT_GIFSEARCH]) diff --git a/sopel_modules/SpiceBot_GifSearch/gifsearch.py b/sopel_modules/SpiceBot_GifSearch/gifsearch.py index 029c29c..1eb2ce4 100644 --- a/sopel_modules/SpiceBot_GifSearch/gifsearch.py +++ b/sopel_modules/SpiceBot_GifSearch/gifsearch.py @@ -5,8 +5,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_CommandsQuery.CommandsQuery import commandsquery_register from sopel_modules.SpiceBot_SBTools import read_directory_json_to_dict diff --git a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py index 17cbe0a..3bff3a2 100644 --- a/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py +++ b/sopel_modules/SpiceBot_InvalidCommand/InvalidCommand.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module from sopel_modules.SpiceBot_SBTools import sopel_triggerargs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Events import botevents def setup(bot): diff --git a/sopel_modules/SpiceBot_Kick/__init__.py b/sopel_modules/SpiceBot_Kick/__init__.py index 06ad646..2d1c429 100644 --- a/sopel_modules/SpiceBot_Kick/__init__.py +++ b/sopel_modules/SpiceBot_Kick/__init__.py @@ -14,7 +14,7 @@ from sopel import tools, module from sopel.tools import Identifier from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs import time diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py index 543973e..d075cff 100644 --- a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py +++ b/sopel_modules/SpiceBot_Logs/ErrorDisplay.py @@ -3,9 +3,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Events.System import botevents - -from .Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents @sopel.module.event(botevents.BOT_STARTUPMONOLOGUE) diff --git a/sopel_modules/SpiceBot_Logs/Logs_Command.py b/sopel_modules/SpiceBot_Logs/Logs_Command.py index 2f78af7..7c6bf5f 100644 --- a/sopel_modules/SpiceBot_Logs/Logs_Command.py +++ b/sopel_modules/SpiceBot_Logs/Logs_Command.py @@ -5,8 +5,8 @@ import sopel.module import spicemanip -from .Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, inlist, inlist_match, similar_list diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py new file mode 100644 index 0000000..7ddb744 --- /dev/null +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -0,0 +1,28 @@ +# coding=utf-8 +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module +import sopel.tools +import sopel.config + +from sopel_modules.SpiceBot.Logs import botlogs + + +@sopel.module.event('001') +@sopel.module.rule('.*') +def join_log_channel(bot, trigger): + + if bot.config.core.logging_channel: + channel = bot.config.core.logging_channel + if channel not in bot.channels.keys(): + bot.write(('JOIN', bot.nick, channel)) + if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: + bot.write(('SAJOIN', bot.nick, channel)) + + while True: + if len(botlogs.SpiceBot_Logs["queue"]): + bot.say(str(botlogs.SpiceBot_Logs["queue"][0]), channel) + del botlogs.SpiceBot_Logs["queue"][0] + else: + botlogs.sopel_config["logging_channel"] = False + botlogs.SpiceBot_Logs["queue"] = [] diff --git a/sopel_modules/SpiceBot_Logs/__init__.py b/sopel_modules/SpiceBot_Logs/__init__.py index 091f24f..b0be6c0 100644 --- a/sopel_modules/SpiceBot_Logs/__init__.py +++ b/sopel_modules/SpiceBot_Logs/__init__.py @@ -1,7 +1,7 @@ # coding=utf8 from __future__ import unicode_literals, absolute_import, division, print_function -from .Logs import * +from .Queue import * from .Logs_Command import * from .ErrorDisplay import * diff --git a/sopel_modules/SpiceBot_Restart/Restart.py b/sopel_modules/SpiceBot_Restart/Restart.py index 421b990..89e083c 100644 --- a/sopel_modules/SpiceBot_Restart/Restart.py +++ b/sopel_modules/SpiceBot_Restart/Restart.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi # sopel imports import sopel.module -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot_SBTools import spicebot_reload diff --git a/sopel_modules/SpiceBot_SBTools/__init__.py b/sopel_modules/SpiceBot_SBTools/__init__.py index 5fb5f94..65da964 100644 --- a/sopel_modules/SpiceBot_SBTools/__init__.py +++ b/sopel_modules/SpiceBot_SBTools/__init__.py @@ -20,7 +20,7 @@ from pygit2 import clone_repository import spicemanip -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs """Variable References""" diff --git a/sopel_modules/SpiceBot_SopelPatches/Patches.py b/sopel_modules/SpiceBot_SopelPatches/Patches.py index c6a4bdf..0aa3cc8 100644 --- a/sopel_modules/SpiceBot_SopelPatches/Patches.py +++ b/sopel_modules/SpiceBot_SopelPatches/Patches.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals, absolute_import, print_function, divisi import sopel import sopel.module -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot_SBTools import stock_modules_begone diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py index 24ccb3b..2671bcc 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py @@ -4,8 +4,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents def setup(bot): diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 5bd857d..47a2fa9 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -4,8 +4,8 @@ from __future__ import unicode_literals, absolute_import, division, print_functi import sopel.module -from sopel_modules.SpiceBot_Logs.Logs import botlogs -from sopel_modules.SpiceBot_Events.System import botevents +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents from sopel_modules.SpiceBot_SBTools import humanized_time import time diff --git a/sopel_modules/SpiceBot_Update/Update.py b/sopel_modules/SpiceBot_Update/Update.py index 111172d..d00464d 100644 --- a/sopel_modules/SpiceBot_Update/Update.py +++ b/sopel_modules/SpiceBot_Update/Update.py @@ -8,7 +8,7 @@ from sopel.config.types import StaticSection, ValidatedAttribute import spicemanip -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, spicebot_reload, spicebot_update diff --git a/sopel_modules/SpiceBot_Uptime/Uptime.py b/sopel_modules/SpiceBot_Uptime/Uptime.py index 4c127b9..3af0b71 100644 --- a/sopel_modules/SpiceBot_Uptime/Uptime.py +++ b/sopel_modules/SpiceBot_Uptime/Uptime.py @@ -6,7 +6,7 @@ import sopel.module import time -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot_SBTools import humanized_time diff --git a/sopel_modules/SpiceBot_osd/__init__.py b/sopel_modules/SpiceBot_osd/__init__.py index a097396..91fa5a3 100644 --- a/sopel_modules/SpiceBot_osd/__init__.py +++ b/sopel_modules/SpiceBot_osd/__init__.py @@ -14,7 +14,7 @@ from sopel import tools, module from sopel.tools import Identifier from sopel.config.types import StaticSection, ValidatedAttribute -from sopel_modules.SpiceBot_Logs.Logs import botlogs +from sopel_modules.SpiceBot.Logs import botlogs import time from collections import abc From 29031582b07031ade1c7ec96600a287f4ec0635a Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 14:33:02 -0400 Subject: [PATCH 28/56] really classy now --- sopel_modules/SpiceBot_Events/Events.py | 4 ++++ sopel_modules/SpiceBot_Logs/Queue.py | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 2a92e6c..c36d800 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -11,6 +11,10 @@ from sopel_modules.SpiceBot.Events import botevents import time +def setup(bot): + botlogs.log('SpiceBot_Events', "Starting setup procedure") + + @sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') def bot_startup_welcome(bot, trigger): diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py index 7ddb744..2772525 100644 --- a/sopel_modules/SpiceBot_Logs/Queue.py +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -6,6 +6,13 @@ import sopel.tools import sopel.config from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents + + +def setup(bot): + botlogs.log('SpiceBot_Logs', "Starting Setup Procedure") + botevents.startup_add([botevents.BOT_LOGS]) + botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") @sopel.module.event('001') From 5e9b410ece202727a62d6e4751c447a1f175eba1 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 14:45:19 -0400 Subject: [PATCH 29/56] IRC Events Log --- sopel_modules/SpiceBot/Channels.py | 18 + sopel_modules/SpiceBot/__init__.py | 1 + sopel_modules/SpiceBot_Channels/Channels.py | 11 - sopel_modules/SpiceBot_Logs/IRC_Events | 1266 +++++++++++++++++++ 4 files changed, 1285 insertions(+), 11 deletions(-) create mode 100644 sopel_modules/SpiceBot/Channels.py create mode 100644 sopel_modules/SpiceBot_Logs/IRC_Events diff --git a/sopel_modules/SpiceBot/Channels.py b/sopel_modules/SpiceBot/Channels.py new file mode 100644 index 0000000..6e33157 --- /dev/null +++ b/sopel_modules/SpiceBot/Channels.py @@ -0,0 +1,18 @@ +# coding=utf8 +from __future__ import unicode_literals, absolute_import, division, print_function +""" +This is the SpiceBot Logs system. + +This Class stores logs in an easy to access manner +""" + + +class BotChannels(): + """This Logs all channels known to the server""" + def __init__(self): + self.SpiceBot_Channels = { + "list": {} + } + + +botchannels = BotChannels() diff --git a/sopel_modules/SpiceBot/__init__.py b/sopel_modules/SpiceBot/__init__.py index aeefd66..e934cff 100644 --- a/sopel_modules/SpiceBot/__init__.py +++ b/sopel_modules/SpiceBot/__init__.py @@ -8,6 +8,7 @@ This module contains references only for other modules to utilize. from .Logs import * from .Events import * +from .Channels import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 7a54d60..ead0757 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -30,17 +30,6 @@ def configure(config): config.SpiceBot_Channels.configure_setting('chanignore', 'SpiceBot_Channels Ignore JOIN for channels') -class BotChannels(): - """This Logs all channels known to the server""" - def __init__(self): - self.SpiceBot_Channels = { - "list": {} - } - - -botchannels = BotChannels() - - def setup(bot): botlogs.log('SpiceBot_Channels', "Starting setup procedure") botevents.startup_add([botevents.BOT_CHANNELS]) diff --git a/sopel_modules/SpiceBot_Logs/IRC_Events b/sopel_modules/SpiceBot_Logs/IRC_Events new file mode 100644 index 0000000..84ccc84 --- /dev/null +++ b/sopel_modules/SpiceBot_Logs/IRC_Events @@ -0,0 +1,1266 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals, absolute_import, print_function, division + +# sopel imports +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs + + +@sopel.moduleevent('NICK') +@sopel.modulerule('.*') +def parse_event_NICK(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('QUIT') +@sopel.modulerule('.*') +def parse_event_QUIT(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('PART') +def parse_event_PART(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('MODE') +@sopel.modulerule('.*') +def parse_event_MODE(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('KICK') +@sopel.modulerule('.*') +def parse_event_KICK(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('JOIN') +@sopel.modulerule('.*') +def parse_event_JOIN(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('INVITE') +@sopel.modulerule('.*') +def parse_event_INVITE(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +@sopel.moduleevent('TOPIC') +@sopel.modulerule('.*') +def parse_event_TOPIC(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WELCOME = '001' +@sopel.moduleevent('001') +@sopel.modulerule('.*') +def parse_event_001(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_YOURHOST = '002' +@sopel.moduleevent('002') +@sopel.modulerule('.*') +def parse_event_002(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_CREATED = '003' +@sopel.moduleevent('003') +@sopel.modulerule('.*') +def parse_event_003(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MYINFO = '004' +@sopel.moduleevent('004') +@sopel.modulerule('.*') +def parse_event_004(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_BOUNCE = '005' +@sopel.moduleevent('005') +@sopel.modulerule('.*') +def parse_event_005(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ISUPPORT = '005' +@sopel.moduleevent('005') +@sopel.modulerule('.*') +def parse_event_005b(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACELINK = '200' +@sopel.moduleevent('200') +@sopel.modulerule('.*') +def parse_event_200(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACECONNECTING = '201' +@sopel.moduleevent('201') +@sopel.modulerule('.*') +def parse_event_201(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACEHANDSHAKE = '202' +@sopel.moduleevent('202') +@sopel.modulerule('.*') +def parse_event_202(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACEUNKNOWN = '203' +@sopel.moduleevent('203') +@sopel.modulerule('.*') +def parse_event_203(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACEOPERATOR = '204' +@sopel.moduleevent('204') +@sopel.modulerule('.*') +def parse_event_204(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACEUSER = '205' +@sopel.moduleevent('205') +@sopel.modulerule('.*') +def parse_event_205(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACESERVER = '206' +@sopel.moduleevent('206') +@sopel.modulerule('.*') +def parse_event_206(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACESERVICE = '207' +@sopel.moduleevent('207') +@sopel.modulerule('.*') +def parse_event_207(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACENEWTYPE = '208' +@sopel.moduleevent('208') +@sopel.modulerule('.*') +def parse_event_208(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACECLASS = '209' +@sopel.moduleevent('209') +@sopel.modulerule('.*') +def parse_event_209(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACERECONNECT = '210' +@sopel.moduleevent('210') +@sopel.modulerule('.*') +def parse_event_210(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSLINKINFO = '211' +@sopel.moduleevent('211') +@sopel.modulerule('.*') +def parse_event_211(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSCOMMANDS = '212' +@sopel.moduleevent('212') +@sopel.modulerule('.*') +def parse_event_212(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSCLINE = '213' +@sopel.moduleevent('213') +@sopel.modulerule('.*') +def parse_event_213(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSNLINE = '214' +@sopel.moduleevent('214') +@sopel.modulerule('.*') +def parse_event_214(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSILINE = '215' +@sopel.moduleevent('215') +@sopel.modulerule('.*') +def parse_event_215(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSKLINE = '216' +@sopel.moduleevent('216') +@sopel.modulerule('.*') +def parse_event_216(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSYLINE = '218' +@sopel.moduleevent('218') +@sopel.modulerule('.*') +def parse_event_218(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFSTATS = '219' +@sopel.moduleevent('219') +@sopel.modulerule('.*') +def parse_event_219(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_UMODEIS = '221' +@sopel.moduleevent('221') +@sopel.modulerule('.*') +def parse_event_221(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_SERVLIST = '234' +@sopel.moduleevent('234') +@sopel.modulerule('.*') +def parse_event_234(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_SERVLISTEND = '235' +@sopel.moduleevent('235') +@sopel.modulerule('.*') +def parse_event_235(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSLLINE = '241' +@sopel.moduleevent('241') +@sopel.modulerule('.*') +def parse_event_241(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSUPTIME = '242' +@sopel.moduleevent('242') +@sopel.modulerule('.*') +def parse_event_242(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSOLINE = '243' +@sopel.moduleevent('243') +@sopel.modulerule('.*') +def parse_event_243(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STATSHLINE = '244' +@sopel.moduleevent('244') +@sopel.modulerule('.*') +def parse_event_244(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LUSERCLIENT = '251' +@sopel.moduleevent('251') +@sopel.modulerule('.*') +def parse_event_251(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LUSEROP = '252' +@sopel.moduleevent('252') +@sopel.modulerule('.*') +def parse_event_252(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LUSERUNKNOWN = '253' +@sopel.moduleevent('253') +@sopel.modulerule('.*') +def parse_event_253(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LUSERCHANNELS = '254' +@sopel.moduleevent('254') +@sopel.modulerule('.*') +def parse_event_254(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LUSERME = '255' +@sopel.moduleevent('255') +@sopel.modulerule('.*') +def parse_event_255(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ADMINME = '256' +@sopel.moduleevent('256') +@sopel.modulerule('.*') +def parse_event_256(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ADMINLOC1 = '257' +@sopel.moduleevent('257') +@sopel.modulerule('.*') +def parse_event_257(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ADMINLOC2 = '258' +@sopel.moduleevent('258') +@sopel.modulerule('.*') +def parse_event_258(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ADMINEMAIL = '259' +@sopel.moduleevent('259') +@sopel.modulerule('.*') +def parse_event_259(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACELOG = '261' +@sopel.moduleevent('261') +@sopel.modulerule('.*') +def parse_event_261(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRACEEND = '262' +@sopel.moduleevent('262') +@sopel.modulerule('.*') +def parse_event_262(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TRYAGAIN = '263' +@sopel.moduleevent('263') +@sopel.modulerule('.*') +def parse_event_263(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_NONE = '300' +@sopel.moduleevent('300') +@sopel.modulerule('.*') +def parse_event_300(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_AWAY = '301' +@sopel.moduleevent('301') +@sopel.modulerule('.*') +def parse_event_301(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_USERHOST = '302' +@sopel.moduleevent('302') +@sopel.modulerule('.*') +def parse_event_302(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ISON = '303' +@sopel.moduleevent('303') +@sopel.modulerule('.*') +def parse_event_303(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_UNAWAY = '305' +@sopel.moduleevent('305') +@sopel.modulerule('.*') +def parse_event_305(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_NOWAWAY = '306' +@sopel.moduleevent('306') +@sopel.modulerule('.*') +def parse_event_306(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISUSER = '311' +@sopel.moduleevent('311') +@sopel.modulerule('.*') +def parse_event_311(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISSERVER = '312' +@sopel.moduleevent('312') +@sopel.modulerule('.*') +def parse_event_312(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISOPERATOR = '313' +@sopel.moduleevent('313') +@sopel.modulerule('.*') +def parse_event_313(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOWASUSER = '314' +@sopel.moduleevent('314') +@sopel.modulerule('.*') +def parse_event_314(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFWHO = '315' +@sopel.moduleevent('315') +@sopel.modulerule('.*') +def parse_event_315(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISIDLE = '317' +@sopel.moduleevent('317') +@sopel.modulerule('.*') +def parse_event_317(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFWHOIS = '318' +@sopel.moduleevent('318') +@sopel.modulerule('.*') +def parse_event_318(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISCHANNELS = '319' +@sopel.moduleevent('319') +@sopel.modulerule('.*') +def parse_event_319(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LISTSTART = '321' +@sopel.moduleevent('321') +@sopel.modulerule('.*') +def parse_event_321(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LIST = '322' +@sopel.moduleevent('322') +@sopel.modulerule('.*') +def parse_event_322(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LISTEND = '323' +@sopel.moduleevent('323') +@sopel.modulerule('.*') +def parse_event_323(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_CHANNELMODEIS = '324' +@sopel.moduleevent('324') +@sopel.modulerule('.*') +def parse_event_324(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_UNIQOPIS = '325' +@sopel.moduleevent('325') +@sopel.modulerule('.*') +def parse_event_325(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_NOTOPIC = '331' +@sopel.moduleevent('331') +@sopel.modulerule('.*') +def parse_event_331(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TOPIC = '332' +@sopel.moduleevent('332') +@sopel.modulerule('.*') +def parse_event_332(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_INVITING = '341' +@sopel.moduleevent('341') +@sopel.modulerule('.*') +def parse_event_341(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_SUMMONING = '342' +@sopel.moduleevent('342') +@sopel.modulerule('.*') +def parse_event_342(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_INVITELIST = '346' +@sopel.moduleevent('346') +@sopel.modulerule('.*') +def parse_event_346(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFINVITELIST = '347' +@sopel.moduleevent('347') +@sopel.modulerule('.*') +def parse_event_347(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_EXCEPTLIST = '348' +@sopel.moduleevent('348') +@sopel.modulerule('.*') +def parse_event_348(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFEXCEPTLIST = '349' +@sopel.moduleevent('349') +@sopel.modulerule('.*') +def parse_event_349(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_VERSION = '351' +@sopel.moduleevent('351') +@sopel.modulerule('.*') +def parse_event_351(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOREPLY = '352' +@sopel.moduleevent('352') +@sopel.modulerule('.*') +def parse_event_352(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_NAMREPLY = '353' +@sopel.moduleevent('353') +@sopel.modulerule('.*') +def parse_event_353(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOSPCRPL = '354' +@sopel.moduleevent('354') +@sopel.modulerule('.*') +def parse_event_354(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LINKS = '364' +@sopel.moduleevent('364') +@sopel.modulerule('.*') +def parse_event_364(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFLINKS = '365' +@sopel.moduleevent('365') +@sopel.modulerule('.*') +def parse_event_365(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFNAMES = '366' +@sopel.moduleevent('366') +@sopel.modulerule('.*') +def parse_event_366(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_BANLIST = '367' +@sopel.moduleevent('367') +@sopel.modulerule('.*') +def parse_event_367(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFBANLIST = '368' +@sopel.moduleevent('368') +@sopel.modulerule('.*') +def parse_event_368(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFWHOWAS = '369' +@sopel.moduleevent('369') +@sopel.modulerule('.*') +def parse_event_369(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_INFO = '371' +@sopel.moduleevent('371') +@sopel.modulerule('.*') +def parse_event_371(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MOTD = '372' +@sopel.moduleevent('372') +@sopel.modulerule('.*') +def parse_event_372(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFINFO = '374' +@sopel.moduleevent('374') +@sopel.modulerule('.*') +def parse_event_374(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MOTDSTART = '375' +@sopel.moduleevent('375') +@sopel.modulerule('.*') +def parse_event_375(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFMOTD = '376' +@sopel.moduleevent('376') +@sopel.modulerule('.*') +def parse_event_376(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_YOUREOPER = '381' +@sopel.moduleevent('381') +@sopel.modulerule('.*') +def parse_event_381(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_REHASHING = '382' +@sopel.moduleevent('382') +@sopel.modulerule('.*') +def parse_event_382(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_YOURESERVICE = '383' +@sopel.moduleevent('383') +@sopel.modulerule('.*') +def parse_event_383(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_TIME = '391' +@sopel.moduleevent('391') +@sopel.modulerule('.*') +def parse_event_391(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_USERSSTART = '392' +@sopel.moduleevent('392') +@sopel.modulerule('.*') +def parse_event_392(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_USERS = '393' +@sopel.moduleevent('393') +@sopel.modulerule('.*') +def parse_event_393(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFUSERS = '394' +@sopel.moduleevent('394') +@sopel.modulerule('.*') +def parse_event_394(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_NOUSERS = '395' +@sopel.moduleevent('395') +@sopel.modulerule('.*') +def parse_event_395(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOSUCHNICK = '401' +@sopel.moduleevent('401') +@sopel.modulerule('.*') +def parse_event_401(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOSUCHSERVER = '402' +@sopel.moduleevent('402') +@sopel.modulerule('.*') +def parse_event_402(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOSUCHCHANNEL = '403' +@sopel.moduleevent('403') +@sopel.modulerule('.*') +def parse_event_403(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_CANNOTSENDTOCHAN = '404' +@sopel.moduleevent('404') +@sopel.modulerule('.*') +def parse_event_404(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_TOOMANYCHANNELS = '405' +@sopel.moduleevent('405') +@sopel.modulerule('.*') +def parse_event_405(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_WASNOSUCHNICK = '406' +@sopel.moduleevent('406') +@sopel.modulerule('.*') +def parse_event_406(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_TOOMANYTARGETS = '407' +@sopel.moduleevent('407') +@sopel.modulerule('.*') +def parse_event_407(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOSUCHSERVICE = '408' +@sopel.moduleevent('408') +@sopel.modulerule('.*') +def parse_event_408(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOORIGIN = '409' +@sopel.moduleevent('409') +@sopel.modulerule('.*') +def parse_event_409(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_INVALIDCAPCMD = '410' +@sopel.moduleevent('410') +@sopel.modulerule('.*') +def parse_event_410(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NORECIPIENT = '411' +@sopel.moduleevent('411') +@sopel.modulerule('.*') +def parse_event_411(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOTEXTTOSEND = '412' +@sopel.moduleevent('412') +@sopel.modulerule('.*') +def parse_event_412(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOTOPLEVEL = '413' +@sopel.moduleevent('413') +@sopel.modulerule('.*') +def parse_event_413(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_WILDTOPLEVEL = '414' +@sopel.moduleevent('414') +@sopel.modulerule('.*') +def parse_event_414(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_BADMASK = '415' +@sopel.moduleevent('415') +@sopel.modulerule('.*') +def parse_event_415(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_UNKNOWNCOMMAND = '421' +@sopel.moduleevent('421') +@sopel.modulerule('.*') +def parse_event_421(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOMOTD = '422' +@sopel.moduleevent('422') +@sopel.modulerule('.*') +def parse_event_422(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOADMININFO = '423' +@sopel.moduleevent('423') +@sopel.modulerule('.*') +def parse_event_423(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_FILEERROR = '424' +@sopel.moduleevent('424') +@sopel.modulerule('.*') +def parse_event_424(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NONICKNAMEGIVEN = '431' +@sopel.moduleevent('431') +@sopel.modulerule('.*') +def parse_event_431(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_ERRONEUSNICKNAME = '432' +@sopel.moduleevent('432') +@sopel.modulerule('.*') +def parse_event_432(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NICKNAMEINUSE = '433' +@sopel.moduleevent('433') +@sopel.modulerule('.*') +def parse_event_433(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NICKCOLLISION = '436' +@sopel.moduleevent('436') +@sopel.modulerule('.*') +def parse_event_436(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_UNAVAILRESOURCE = '437' +@sopel.moduleevent('437') +@sopel.modulerule('.*') +def parse_event_437(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_USERNOTINCHANNEL = '441' +@sopel.moduleevent('441') +@sopel.modulerule('.*') +def parse_event_441(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOTONCHANNEL = '442' +@sopel.moduleevent('442') +@sopel.modulerule('.*') +def parse_event_442(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_USERONCHANNEL = '443' +@sopel.moduleevent('443') +@sopel.modulerule('.*') +def parse_event_443(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOLOGIN = '444' +@sopel.moduleevent('444') +@sopel.modulerule('.*') +def parse_event_444(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_SUMMONDISABLED = '445' +@sopel.moduleevent('445') +@sopel.modulerule('.*') +def parse_event_445(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_USERSDISABLED = '446' +@sopel.moduleevent('446') +@sopel.modulerule('.*') +def parse_event_446(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOTREGISTERED = '451' +@sopel.moduleevent('451') +@sopel.modulerule('.*') +def parse_event_451(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NEEDMOREPARAMS = '461' +@sopel.moduleevent('461') +@sopel.modulerule('.*') +def parse_event_461(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_ALREADYREGISTRED = '462' +@sopel.moduleevent('462') +@sopel.modulerule('.*') +def parse_event_462(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOPERMFORHOST = '463' +@sopel.moduleevent('463') +@sopel.modulerule('.*') +def parse_event_463(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_PASSWDMISMATCH = '464' +@sopel.moduleevent('464') +@sopel.modulerule('.*') +def parse_event_464(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_YOUREBANNEDCREEP = '465' +@sopel.moduleevent('465') +@sopel.modulerule('.*') +def parse_event_465(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_YOUWILLBEBANNED = '466' +@sopel.moduleevent('466') +@sopel.modulerule('.*') +def parse_event_466(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_KEYSET = '467' +@sopel.moduleevent('467') +@sopel.modulerule('.*') +def parse_event_467(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_CHANNELISFULL = '471' +@sopel.moduleevent('471') +@sopel.modulerule('.*') +def parse_event_471(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_UNKNOWNMODE = '472' +@sopel.moduleevent('472') +@sopel.modulerule('.*') +def parse_event_472(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_INVITEONLYCHAN = '473' +@sopel.moduleevent('473') +@sopel.modulerule('.*') +def parse_event_473(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_BANNEDFROMCHAN = '474' +@sopel.moduleevent('474') +@sopel.modulerule('.*') +def parse_event_474(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_BADCHANNELKEY = '475' +@sopel.moduleevent('475') +@sopel.modulerule('.*') +def parse_event_475(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_BADCHANMASK = '476' +@sopel.moduleevent('476') +@sopel.modulerule('.*') +def parse_event_476(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOCHANMODES = '477' +@sopel.moduleevent('477') +@sopel.modulerule('.*') +def parse_event_477(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_BANLISTFULL = '478' +@sopel.moduleevent('478') +@sopel.modulerule('.*') +def parse_event_478(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOPRIVILEGES = '481' +@sopel.moduleevent('481') +@sopel.modulerule('.*') +def parse_event_481(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_CHANOPRIVSNEEDED = '482' +@sopel.moduleevent('482') +@sopel.modulerule('.*') +def parse_event_482(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_CANTKILLSERVER = '483' +@sopel.moduleevent('483') +@sopel.modulerule('.*') +def parse_event_483(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_RESTRICTED = '484' +@sopel.moduleevent('484') +@sopel.modulerule('.*') +def parse_event_484(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_UNIQOPPRIVSNEEDED = '485' +@sopel.moduleevent('485') +@sopel.modulerule('.*') +def parse_event_485(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOOPERHOST = '491' +@sopel.moduleevent('491') +@sopel.modulerule('.*') +def parse_event_491(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_UMODEUNKNOWNFLAG = '501' +@sopel.moduleevent('501') +@sopel.modulerule('.*') +def parse_event_501(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_USERSDONTMATCH = '502' +@sopel.moduleevent('502') +@sopel.modulerule('.*') +def parse_event_502(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_STARTTLS = '670' +@sopel.moduleevent('670') +@sopel.modulerule('.*') +def parse_event_670(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_STARTTLS = '691' +@sopel.moduleevent('691') +@sopel.modulerule('.*') +def parse_event_691(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MONONLINE = '730' +@sopel.moduleevent('730') +@sopel.modulerule('.*') +def parse_event_730(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MONOFFLINE = '731' +@sopel.moduleevent('731') +@sopel.modulerule('.*') +def parse_event_731(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_MONLIST = '732' +@sopel.moduleevent('732') +@sopel.modulerule('.*') +def parse_event_732(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_ENDOFMONLIST = '733' +@sopel.moduleevent('733') +@sopel.modulerule('.*') +def parse_event_733(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_MONLISTFULL = '734' +@sopel.moduleevent('734') +@sopel.modulerule('.*') +def parse_event_734(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_WHOISKEYVALUE = '760' +@sopel.moduleevent('760') +@sopel.modulerule('.*') +def parse_event_760(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_KEYVALUE = '761' +@sopel.moduleevent('761') +@sopel.modulerule('.*') +def parse_event_761(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_METADATAEND = '762' +@sopel.moduleevent('762') +@sopel.modulerule('.*') +def parse_event_762(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_METADATALIMIT = '764' +@sopel.moduleevent('764') +@sopel.modulerule('.*') +def parse_event_764(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_TARGETINVALID = '765' +@sopel.moduleevent('765') +@sopel.modulerule('.*') +def parse_event_765(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NOMATCHINGKEY = '766' +@sopel.moduleevent('766') +@sopel.modulerule('.*') +def parse_event_766(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_KEYINVALID = '767' +@sopel.moduleevent('767') +@sopel.modulerule('.*') +def parse_event_767(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_KEYNOTSET = '768' +@sopel.moduleevent('768') +@sopel.modulerule('.*') +def parse_event_768(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_KEYNOPERMISSION = '769' +@sopel.moduleevent('769') +@sopel.modulerule('.*') +def parse_event_769(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LOGGEDIN = '900' +@sopel.moduleevent('900') +@sopel.modulerule('.*') +def parse_event_900(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_LOGGEDOUT = '901' +@sopel.moduleevent('901') +@sopel.modulerule('.*') +def parse_event_901(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_NICKLOCKED = '902' +@sopel.moduleevent('902') +@sopel.modulerule('.*') +def parse_event_902(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_SASLSUCCESS = '903' +@sopel.moduleevent('903') +@sopel.modulerule('.*') +def parse_event_903(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_SASLFAIL = '904' +@sopel.moduleevent('904') +@sopel.modulerule('.*') +def parse_event_904(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_SASLTOOLONG = '905' +@sopel.moduleevent('905') +@sopel.modulerule('.*') +def parse_event_905(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_SASLABORTED = '906' +@sopel.moduleevent('906') +@sopel.modulerule('.*') +def parse_event_906(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# ERR_SASLALREADY = '907' +@sopel.moduleevent('907') +@sopel.modulerule('.*') +def parse_event_907(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) + + +# RPL_SASLMECHS = '908' +@sopel.moduleevent('908') +@sopel.modulerule('.*') +def parse_event_908(bot, trigger): + botlogs.log('SpiceBot_Logs_IRC', str(trigger.event) + " " + str(trigger.args)) From 0e11b5a588ab3fd7ccf19b8bd406f2ab1653ae99 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 14:49:28 -0400 Subject: [PATCH 30/56] .py and import --- sopel_modules/SpiceBot_Logs/{IRC_Events => IRC_Events.py} | 0 sopel_modules/SpiceBot_Logs/__init__.py | 2 +- .../ErrorDisplay.py | 0 sopel_modules/SpiceBot_StartupMonologue/__init__.py | 1 + 4 files changed, 2 insertions(+), 1 deletion(-) rename sopel_modules/SpiceBot_Logs/{IRC_Events => IRC_Events.py} (100%) rename sopel_modules/{SpiceBot_Logs => SpiceBot_StartupMonologue}/ErrorDisplay.py (100%) diff --git a/sopel_modules/SpiceBot_Logs/IRC_Events b/sopel_modules/SpiceBot_Logs/IRC_Events.py similarity index 100% rename from sopel_modules/SpiceBot_Logs/IRC_Events rename to sopel_modules/SpiceBot_Logs/IRC_Events.py diff --git a/sopel_modules/SpiceBot_Logs/__init__.py b/sopel_modules/SpiceBot_Logs/__init__.py index b0be6c0..eace833 100644 --- a/sopel_modules/SpiceBot_Logs/__init__.py +++ b/sopel_modules/SpiceBot_Logs/__init__.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi from .Queue import * from .Logs_Command import * -from .ErrorDisplay import * +from .IRC_Events import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' diff --git a/sopel_modules/SpiceBot_Logs/ErrorDisplay.py b/sopel_modules/SpiceBot_StartupMonologue/ErrorDisplay.py similarity index 100% rename from sopel_modules/SpiceBot_Logs/ErrorDisplay.py rename to sopel_modules/SpiceBot_StartupMonologue/ErrorDisplay.py diff --git a/sopel_modules/SpiceBot_StartupMonologue/__init__.py b/sopel_modules/SpiceBot_StartupMonologue/__init__.py index abf0a53..c656a51 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/__init__.py +++ b/sopel_modules/SpiceBot_StartupMonologue/__init__.py @@ -7,6 +7,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi from .StartupMonologue import * from .StartupMonologue_Display import * +from .ErrorDisplay import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' From 1a9f9646128e075e7b1de6eb4428f8672aca64f5 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 14:57:56 -0400 Subject: [PATCH 31/56] abandon code for now --- sopel_modules/SpiceBot_Channels/Channels.py | 11 +++++++++-- .../SpiceBot_Logs/{IRC_Events.py => IRC_Events} | 0 sopel_modules/SpiceBot_Logs/__init__.py | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) rename sopel_modules/SpiceBot_Logs/{IRC_Events.py => IRC_Events} (100%) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index ead0757..9de80e4 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -25,8 +25,8 @@ class SpiceBot_Channels_MainSection(StaticSection): def configure(config): config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) config.SpiceBot_Channels.configure_setting('announcenew', 'SpiceBot_Channels Announce New Channels') - config.SpiceBot_Channels.configure_setting('announcenew', 'SpiceBot_Channels JOIN New Channels') - config.SpiceBot_Channels.configure_setting('announcenew', 'SpiceBot_Channels OPER ADMIN MODE') + config.SpiceBot_Channels.configure_setting('joinall', 'SpiceBot_Channels JOIN New Channels') + config.SpiceBot_Channels.configure_setting('operadmin', 'SpiceBot_Channels OPER ADMIN MODE') config.SpiceBot_Channels.configure_setting('chanignore', 'SpiceBot_Channels Ignore JOIN for channels') @@ -45,6 +45,13 @@ def shutdown(bot): del bot.memory["SpiceBot_Channels"] +@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.rule('.*') +def unkickable_bot(bot, trigger): + if bot.config.SpiceBot_Channels.operadmin: + bot.write(('SAMODE', bot.nick, '+q')) + + @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def trigger_channel_list_initial(bot, trigger): diff --git a/sopel_modules/SpiceBot_Logs/IRC_Events.py b/sopel_modules/SpiceBot_Logs/IRC_Events similarity index 100% rename from sopel_modules/SpiceBot_Logs/IRC_Events.py rename to sopel_modules/SpiceBot_Logs/IRC_Events diff --git a/sopel_modules/SpiceBot_Logs/__init__.py b/sopel_modules/SpiceBot_Logs/__init__.py index eace833..f6ef4d1 100644 --- a/sopel_modules/SpiceBot_Logs/__init__.py +++ b/sopel_modules/SpiceBot_Logs/__init__.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals, absolute_import, division, print_functi from .Queue import * from .Logs_Command import * -from .IRC_Events import * +# from .IRC_Events import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' From ac82a2ffabb4411613a73aa8f2b1b75a9a3e2f47 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 15:04:36 -0400 Subject: [PATCH 32/56] string --- sopel_modules/SpiceBot_Channels/Channels.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 9de80e4..487b30d 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -56,9 +56,6 @@ def unkickable_bot(bot, trigger): @sopel.module.rule('.*') def trigger_channel_list_initial(bot, trigger): - # Unkickable - bot.write(('SAMODE', bot.nick, '+q')) - bot_part_empty(bot) bot.write(['LIST']) @@ -104,7 +101,7 @@ def trigger_channel_list_recurring(bot, trigger): while bot.memory['SpiceBot_Channels']['ProcessLock']: pass - newlist = [item.lower() for item in oldlist if item.lower() not in list(bot.memory['SpiceBot_Channels']['channels'.keys()])] + newlist = [item.lower() for item in oldlist if item.lower() not in list(bot.memory['SpiceBot_Channels']['channels'].keys())] if "*" in newlist: newlist.remove("*") if len(newlist) and bot.config.SpiceBot_Channels.announcenew: From d3bf42451267fcc06bfd5432ca4229ac907bdd13 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 15:09:46 -0400 Subject: [PATCH 33/56] d4ebug logg --- sopel_modules/SpiceBot_Logs/Queue.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py index 2772525..a02dfca 100644 --- a/sopel_modules/SpiceBot_Logs/Queue.py +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -33,3 +33,14 @@ def join_log_channel(bot, trigger): else: botlogs.sopel_config["logging_channel"] = False botlogs.SpiceBot_Logs["queue"] = [] + + +@sopel.module.event('001') +@sopel.module.rule('.*') +def join_log_channel(bot, trigger): + notdonelist = [] + while True: + for number in botevents.SpiceBot_Events["startup_required"]: + if str(number) not in botevents.SpiceBot_Events["triggers_recieved"].keys(): + notdonelist.append(str(number)) + bot.osd(notdonelist, "#deathbybandaid") From bb3c447e2099c0aec1e3424daed9ea19b86e6f8b Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 15:22:07 -0400 Subject: [PATCH 34/56] debug test --- sopel_modules/SpiceBot/Events.py | 6 +++--- sopel_modules/SpiceBot_Logs/Queue.py | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index d01b9a3..f515b44 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -36,13 +36,13 @@ class BotEvents(object): "assigned_IDs": [1000, 1001, 1002, 1003, 1004], "triggers_recieved": {}, "trigger_queue": [], - "startup_required": [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED] + "startup_required": [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED], } def __getattr__(self, name): ''' will only get called for undefined attributes ''' - eventnumber = max(self.SpiceBot_Events["assigned_IDs"]) + 1 - self.SpiceBot_Events["assigned_IDs"].append(eventnumber) + eventnumber = max(list(self.SpiceBot_Events["assigned_IDs"].keys())) + 1 + self.SpiceBot_Events["assigned_IDs"][eventnumber] = str(name) setattr(self, name, str(eventnumber)) return str(eventnumber) diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py index a02dfca..6b5f009 100644 --- a/sopel_modules/SpiceBot_Logs/Queue.py +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -42,5 +42,9 @@ def join_log_channel(bot, trigger): while True: for number in botevents.SpiceBot_Events["startup_required"]: if str(number) not in botevents.SpiceBot_Events["triggers_recieved"].keys(): - notdonelist.append(str(number)) - bot.osd(notdonelist, "#deathbybandaid") + notdonelist.append(number) + events_not_done = [] + for number in notdonelist: + if number in botevents.SpiceBot_Events["assigned_IDs"].keys(): + events_not_done.append(str(eval(botevents.SpiceBot_Events["assigned_IDs"][number]))) + bot.osd(events_not_done, "#deathbybandaid") From ae3f71af4d87b6abbd447363fd574b2688b50918 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 15:27:01 -0400 Subject: [PATCH 35/56] keys --- sopel_modules/SpiceBot/Events.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index f515b44..48c6c5c 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -33,7 +33,7 @@ class BotEvents(object): self.BOT_LOADED = '1004' self.defaultevents = [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED] self.SpiceBot_Events = { - "assigned_IDs": [1000, 1001, 1002, 1003, 1004], + "assigned_IDs": {1000: "Default", 1001: "BOT_WELCOME", 1002: "BOT_READY", 1003: "BOT_CONNECTED", 1004: "BOT_LOADED"}, "triggers_recieved": {}, "trigger_queue": [], "startup_required": [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED], From fb815496c4e76e9bebff38a57c8e6ef184dc6786 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 15:30:39 -0400 Subject: [PATCH 36/56] remove debug --- sopel_modules/SpiceBot_Logs/Queue.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py index 6b5f009..2772525 100644 --- a/sopel_modules/SpiceBot_Logs/Queue.py +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -33,18 +33,3 @@ def join_log_channel(bot, trigger): else: botlogs.sopel_config["logging_channel"] = False botlogs.SpiceBot_Logs["queue"] = [] - - -@sopel.module.event('001') -@sopel.module.rule('.*') -def join_log_channel(bot, trigger): - notdonelist = [] - while True: - for number in botevents.SpiceBot_Events["startup_required"]: - if str(number) not in botevents.SpiceBot_Events["triggers_recieved"].keys(): - notdonelist.append(number) - events_not_done = [] - for number in notdonelist: - if number in botevents.SpiceBot_Events["assigned_IDs"].keys(): - events_not_done.append(str(eval(botevents.SpiceBot_Events["assigned_IDs"][number]))) - bot.osd(events_not_done, "#deathbybandaid") From 76e52c1ae5325b4742711adf1c48ddc6c1d47a49 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 18:18:12 -0400 Subject: [PATCH 37/56] test --- sopel_modules/SpiceBot_Channels/Channels.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py index 487b30d..4f89785 100644 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ b/sopel_modules/SpiceBot_Channels/Channels.py @@ -47,15 +47,11 @@ def shutdown(bot): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') -def unkickable_bot(bot, trigger): +def trigger_channel_list_initial(bot, trigger): + if bot.config.SpiceBot_Channels.operadmin: bot.write(('SAMODE', bot.nick, '+q')) - -@sopel.module.event(botevents.BOT_CONNECTED) -@sopel.module.rule('.*') -def trigger_channel_list_initial(bot, trigger): - bot_part_empty(bot) bot.write(['LIST']) From 590888ba33159ecfed73e03d6f181b09856a3ba5 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:17:04 -0400 Subject: [PATCH 38/56] first test of channels class --- sopel_modules/SpiceBot/Channels.py | 62 ++++++++- sopel_modules/SpiceBot_Channels/Channels.py | 128 ------------------ .../SpiceBot_Channels/Channels_Parsing.py | 32 ----- .../Channels_Command.py | 41 +++--- .../__init__.py | 2 - .../Channels_Parsing.py | 121 +++++++++++++++++ .../SpiceBot_Channels_Parsing/__init__.py | 6 + sopel_modules/SpiceBot_Messaging/Messaging.py | 3 +- sopel_modules/SpiceBot_SBTools/__init__.py | 34 ----- .../StartupMonologue_Display.py | 3 +- 10 files changed, 209 insertions(+), 223 deletions(-) delete mode 100644 sopel_modules/SpiceBot_Channels/Channels.py delete mode 100644 sopel_modules/SpiceBot_Channels/Channels_Parsing.py rename sopel_modules/{SpiceBot_Channels => SpiceBot_Channels_Command}/Channels_Command.py (72%) rename sopel_modules/{SpiceBot_Channels => SpiceBot_Channels_Command}/__init__.py (74%) create mode 100644 sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py create mode 100644 sopel_modules/SpiceBot_Channels_Parsing/__init__.py diff --git a/sopel_modules/SpiceBot/Channels.py b/sopel_modules/SpiceBot/Channels.py index 6e33157..87f5949 100644 --- a/sopel_modules/SpiceBot/Channels.py +++ b/sopel_modules/SpiceBot/Channels.py @@ -5,14 +5,74 @@ This is the SpiceBot Logs system. This Class stores logs in an easy to access manner """ +import sopel +import re class BotChannels(): """This Logs all channels known to the server""" def __init__(self): + self.channel_lock = False self.SpiceBot_Channels = { - "list": {} + "list": {}, + "InitialProcess": False } + def channel_list_request(bot): + bot.write(['LIST']) + + def channel_list_recieve_start(self): + self.channel_lock = True + + def channel_list_recieve_input(self, trigger): + channel, _, topic = trigger.args[1:] + if channel.lower() not in self.SpiceBot_Channels['list'].keys(): + self.SpiceBot_Channels['list'][channel.lower()] = dict() + self.SpiceBot_Channels['list'][channel.lower()]['name'] = channel + self.SpiceBot_Channels['list'][channel.lower()]['topic'] = self.topic_compile(topic) + self.channel_lock = True + + def channel_list_recieve_finish(self): + self.channel_lock.release() + if not self.SpiceBot_Channels['InitialProcess']: + self.SpiceBot_Channels['InitialProcess'] = True + self.channel_lock = False + + def topic_compile(self, topic): + actual_topic = re.compile(r'^\[\+[a-zA-Z]+\] (.*)') + topic = re.sub(actual_topic, r'\1', topic) + return topic + + def bot_part_empty(bot): + """Don't stay in empty channels""" + ignorepartlist = [] + if bot.config.core.logging_channel: + ignorepartlist.append(bot.config.core.logging_channel) + for channel in bot.channels.keys(): + if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist and channel.startswith("#"): + bot.part(channel, "Leaving Empty Channel") + if channel.lower() in botchannels.SpiceBot_Channels['list']: + del botchannels.SpiceBot_Channels['list'][channel.lower()] + + def join_all_channels(bot): + if bot.config.SpiceBot_Channels.joinall: + for channel in botchannels.SpiceBot_Channels['list'].keys(): + if channel.startswith("#"): + if channel not in bot.channels.keys() and channel not in bot.config.SpiceBot_Channels.chanignore: + bot.write(('JOIN', bot.nick, botchannels.SpiceBot_Channels['list'][channel]['name'])) + if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: + bot.write(('SAJOIN', bot.nick, botchannels.SpiceBot_Channels['list'][channel]['name'])) + + def chanadmin_all_channels(bot): + # Chan ADMIN +a + for channel in bot.channels.keys(): + if channel.startswith("#"): + if channel not in bot.config.SpiceBot_Channels.chanignore: + if bot.config.SpiceBot_Channels.operadmin: + if not bot.channels[channel].privileges[bot.nick] < sopel.module.ADMIN: + bot.write(('SAMODE', channel, "+a", bot.nick)) + else: + bot.part(channel) + botchannels = BotChannels() diff --git a/sopel_modules/SpiceBot_Channels/Channels.py b/sopel_modules/SpiceBot_Channels/Channels.py deleted file mode 100644 index 4f89785..0000000 --- a/sopel_modules/SpiceBot_Channels/Channels.py +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env python -# coding=utf-8 -from __future__ import unicode_literals, absolute_import, print_function, division - -# sopel imports -import sopel.module -from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute - -from sopel_modules.SpiceBot.Logs import botlogs -from sopel_modules.SpiceBot.Events import botevents -from sopel_modules.SpiceBot_SBTools import join_all_channels, chanadmin_all_channels, channel_list_current - -import spicemanip - -import time - - -class SpiceBot_Channels_MainSection(StaticSection): - announcenew = ValidatedAttribute('announcenew', default=False) - joinall = ValidatedAttribute('joinall', default=False) - operadmin = ValidatedAttribute('operadmin', default=False) - chanignore = ListAttribute('chanignore') - - -def configure(config): - config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) - config.SpiceBot_Channels.configure_setting('announcenew', 'SpiceBot_Channels Announce New Channels') - config.SpiceBot_Channels.configure_setting('joinall', 'SpiceBot_Channels JOIN New Channels') - config.SpiceBot_Channels.configure_setting('operadmin', 'SpiceBot_Channels OPER ADMIN MODE') - config.SpiceBot_Channels.configure_setting('chanignore', 'SpiceBot_Channels Ignore JOIN for channels') - - -def setup(bot): - botlogs.log('SpiceBot_Channels', "Starting setup procedure") - botevents.startup_add([botevents.BOT_CHANNELS]) - - bot.config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) - - if "SpiceBot_Channels" not in bot.memory: - bot.memory["SpiceBot_Channels"] = {"channels": {}, "InitialProcess": False, "ProcessLock": False} - - -def shutdown(bot): - if "SpiceBot_Channels" in bot.memory: - del bot.memory["SpiceBot_Channels"] - - -@sopel.module.event(botevents.BOT_CONNECTED) -@sopel.module.rule('.*') -def trigger_channel_list_initial(bot, trigger): - - if bot.config.SpiceBot_Channels.operadmin: - bot.write(('SAMODE', bot.nick, '+q')) - - bot_part_empty(bot) - - bot.write(['LIST']) - bot.memory['SpiceBot_Channels']['ProcessLock'] = True - - botlogs.log('SpiceBot_Channels', "Initial Channel list populating") - starttime = time.time() - - while not bot.memory['SpiceBot_Channels']['InitialProcess']: - timesince = time.time() - starttime - if timesince < 60: - pass - else: - botlogs.log('SpiceBot_Channels', "Initial Channel list populating Timed Out") - bot.memory['SpiceBot_Channels']['InitialProcess'] = True - - channel_list_current(bot) - foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) - botlogs.log('SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") - - join_all_channels(bot) - chanadmin_all_channels(bot) - - if "*" in bot.memory['SpiceBot_Channels']['channels']: - del bot.memory['SpiceBot_Channels']['channels']["*"] - - bot_part_empty(bot) - botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") - - -@sopel.module.event(botevents.BOT_CHANNELS) -@sopel.module.rule('.*') -def trigger_channel_list_recurring(bot, trigger): - while True: - try: - time.sleep(1800) - bot_part_empty(bot) - - oldlist = list(bot.memory['SpiceBot_Channels']['channels'].keys()) - bot.write(['LIST']) - bot.memory['SpiceBot_Channels']['ProcessLock'] = True - - while bot.memory['SpiceBot_Channels']['ProcessLock']: - pass - - newlist = [item.lower() for item in oldlist if item.lower() not in list(bot.memory['SpiceBot_Channels']['channels'].keys())] - if "*" in newlist: - newlist.remove("*") - if len(newlist) and bot.config.SpiceBot_Channels.announcenew: - bot.osd(["The Following channel(s) are new:", spicemanip.main(newlist, 'andlist')], bot.channels.keys()) - - join_all_channels(bot) - - chanadmin_all_channels(bot) - - if "*" in bot.memory['SpiceBot_Channels']['channels']: - del bot.memory['SpiceBot_Channels']['channels']["*"] - bot_part_empty(bot) - - except KeyError: - return - - -def bot_part_empty(bot): - """Don't stay in empty channels""" - ignorepartlist = [] - if bot.config.core.logging_channel: - ignorepartlist.append(bot.config.core.logging_channel) - - for channel in bot.channels.keys(): - if len(bot.channels[channel].privileges.keys()) == 1 and channel not in ignorepartlist and channel.startswith("#"): - bot.part(channel, "Leaving Empty Channel") - if channel.lower() in bot.memory['SpiceBot_Channels']['channels']: - del bot.memory['SpiceBot_Channels']['channels'][channel.lower()] diff --git a/sopel_modules/SpiceBot_Channels/Channels_Parsing.py b/sopel_modules/SpiceBot_Channels/Channels_Parsing.py deleted file mode 100644 index 6998524..0000000 --- a/sopel_modules/SpiceBot_Channels/Channels_Parsing.py +++ /dev/null @@ -1,32 +0,0 @@ -# coding=utf-8 - -from __future__ import unicode_literals, absolute_import, division, print_function - -import sopel.module - -from sopel_modules.SpiceBot_SBTools import topic_compile - - -@sopel.module.event('321') -@sopel.module.rule('.*') -def watch_chanlist_start(bot, trigger): - bot.memory['SpiceBot_Channels']['ProcessLock'] = True - - -@sopel.module.event('322') -@sopel.module.rule('.*') -def watch_chanlist_populate(bot, trigger): - channel, _, topic = trigger.args[1:] - if channel.lower() not in bot.memory['SpiceBot_Channels']['channels']: - bot.memory['SpiceBot_Channels']['channels'][channel.lower()] = dict() - bot.memory['SpiceBot_Channels']['channels'][channel.lower()]['name'] = channel - bot.memory['SpiceBot_Channels']['channels'][channel.lower()]['topic'] = topic_compile(topic) - bot.memory['SpiceBot_Channels']['ProcessLock'] = True - - -@sopel.module.event('323') -@sopel.module.rule('.*') -def watch_chanlist_complete(bot, trigger): - bot.memory['SpiceBot_Channels']['ProcessLock'] = False - if not bot.memory['SpiceBot_Channels']['InitialProcess']: - bot.memory['SpiceBot_Channels']['InitialProcess'] = True diff --git a/sopel_modules/SpiceBot_Channels/Channels_Command.py b/sopel_modules/SpiceBot_Channels_Command/Channels_Command.py similarity index 72% rename from sopel_modules/SpiceBot_Channels/Channels_Command.py rename to sopel_modules/SpiceBot_Channels_Command/Channels_Command.py index 259132b..24825c8 100644 --- a/sopel_modules/SpiceBot_Channels/Channels_Command.py +++ b/sopel_modules/SpiceBot_Channels_Command/Channels_Command.py @@ -7,11 +7,8 @@ import sopel.module import spicemanip from sopel_modules.SpiceBot.Events import botevents -from sopel_modules.SpiceBot_SBTools import ( - sopel_triggerargs, inlist, channel_privs, - join_all_channels, channel_list_current, - ) -from .Channels import bot_part_empty +from sopel_modules.SpiceBot.Channels import botchannels +from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, inlist, channel_privs @botevents.check_ready([botevents.BOT_LOADED]) @@ -27,8 +24,6 @@ def nickname_comand_channels(bot, trigger): triggerargs = spicemanip.main(triggerargs, '2+', 'list') - channel_list_current(bot) - if commandused == 'list': chanlist = spicemanip.main(bot.channels.keys(), 'andlist') bot.osd("You can find me in " + chanlist) @@ -36,14 +31,14 @@ def nickname_comand_channels(bot, trigger): elif commandused == 'total': botcount = len(bot.channels.keys()) - servercount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) + servercount = len(botchannels.SpiceBot_Channels['list'].keys()) bot.osd("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") return elif commandused == 'random': - channel = spicemanip.main(bot.memory['SpiceBot_Channels']['channels'], 'random') - topic = bot.memory['SpiceBot_Channels']['channels'][channel]['topic'] - msg = ["Random channel for you: {}.".format(bot.memory['SpiceBot_Channels']['channels'][channel]['name'])] + channel = spicemanip.main(botchannels.SpiceBot_Channels['list'], 'random') + topic = botchannels.SpiceBot_Channels['list'][channel]['topic'] + msg = ["Random channel for you: {}.".format(botchannels.SpiceBot_Channels['list'][channel]['name'])] if topic and not topic.isspace(): msg.append("The topic is: {}".format(topic)) else: @@ -55,17 +50,15 @@ def nickname_comand_channels(bot, trigger): if not trigger.admin: bot.osd("You do not have permission to update the channel listing.") return - bot_part_empty(bot) - - bot.write(['LIST']) + botchannels.bot_part_empty(bot) + botchannels.channel_list_request(bot) bot.osd(["[SpiceBot_Channels]", "I am now updating the channel listing for this server."]) - bot.memory['SpiceBot_Channels']['ProcessLock'] = True - while bot.memory['SpiceBot_Channels']['ProcessLock']: + while botchannels.channel_lock: pass - join_all_channels(bot) - foundchannelcount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) + botchannels.join_all_channels(bot) + foundchannelcount = len(botchannels.SpiceBot_Channels['list'].keys()) bot.osd("[SpiceBot_Channels]", "Channel listing finished!", str(foundchannelcount) + " channel(s) found.") - bot_part_empty(bot) + botchannels.bot_part_empty(bot) return elif commandused == 'topic': @@ -73,11 +66,11 @@ def nickname_comand_channels(bot, trigger): bot.osd("Channel name input missing.") return channel = spicemanip.main(triggerargs, 1) - if not inlist(bot, channel.lower(), bot.memory['SpiceBot_Channels']['channels'].keys()): + if not inlist(bot, channel.lower(), botchannels.SpiceBot_Channels['list'].keys()): bot.osd("Channel name {} not valid.".format(channel)) return - topic = bot.memory['SpiceBot_Channels']['channels'][channel.lower()]['topic'] - channel = bot.memory['SpiceBot_Channels']['channels'][channel.lower()]['name'] + topic = botchannels.SpiceBot_Channels['list'][channel.lower()]['topic'] + channel = botchannels.SpiceBot_Channels['list'][channel.lower()]['name'] bot.osd("Topic for {}: {}".format(channel, topic)) return @@ -90,7 +83,7 @@ def nickname_comand_channels(bot, trigger): channel = trigger.sender else: channel = spicemanip.main(triggerargs, 1) - if not inlist(bot, channel.lower(), bot.memory['SpiceBot_Channels']['channels'].keys()): + if not inlist(bot, channel.lower(), botchannels.SpiceBot_Channels['list'].keys()): bot.osd("Channel name {} not valid.".format(channel)) return if not inlist(bot, channel.lower(), bot.channels.keys()): @@ -110,7 +103,7 @@ def nickname_comand_channels(bot, trigger): # Users List if commandused == 'users': channel = spicemanip.main(triggerargs, 1) - if not inlist(bot, channel.lower(), bot.memory['SpiceBot_Channels']['channels'].keys()): + if not inlist(bot, channel.lower(), botchannels.SpiceBot_Channels['list'].keys()): bot.osd("Channel name {} not valid.".format(channel)) return if not inlist(bot, channel.lower(), bot.channels.keys()): diff --git a/sopel_modules/SpiceBot_Channels/__init__.py b/sopel_modules/SpiceBot_Channels_Command/__init__.py similarity index 74% rename from sopel_modules/SpiceBot_Channels/__init__.py rename to sopel_modules/SpiceBot_Channels_Command/__init__.py index 6d0a4e4..643aeb7 100644 --- a/sopel_modules/SpiceBot_Channels/__init__.py +++ b/sopel_modules/SpiceBot_Channels_Command/__init__.py @@ -3,6 +3,4 @@ """ from __future__ import unicode_literals, absolute_import, print_function, division -from .Channels import * from .Channels_Command import * -from .Channels_Parsing import * diff --git a/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py b/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py new file mode 100644 index 0000000..1b469f5 --- /dev/null +++ b/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python +# coding=utf-8 +from __future__ import unicode_literals, absolute_import, print_function, division + +# sopel imports +import sopel.module +from sopel.config.types import StaticSection, ValidatedAttribute, ListAttribute + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents +from sopel_modules.SpiceBot.Channels import botchannels + +import spicemanip + +import time + + +class SpiceBot_Channels_MainSection(StaticSection): + announcenew = ValidatedAttribute('announcenew', default=False) + joinall = ValidatedAttribute('joinall', default=False) + operadmin = ValidatedAttribute('operadmin', default=False) + chanignore = ListAttribute('chanignore') + + +def configure(config): + config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) + config.SpiceBot_Channels.configure_setting('announcenew', 'SpiceBot_Channels Announce New Channels') + config.SpiceBot_Channels.configure_setting('joinall', 'SpiceBot_Channels JOIN New Channels') + config.SpiceBot_Channels.configure_setting('operadmin', 'SpiceBot_Channels OPER ADMIN MODE') + config.SpiceBot_Channels.configure_setting('chanignore', 'SpiceBot_Channels Ignore JOIN for channels') + + +def setup(bot): + botlogs.log('SpiceBot_Channels', "Starting setup procedure") + botevents.startup_add([botevents.BOT_CHANNELS]) + bot.config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) + + +@sopel.module.event('001') +@sopel.module.rule('.*') +def unkickable_bot(bot, trigger): + if bot.config.SpiceBot_Channels.operadmin: + bot.write(('SAMODE', bot.nick, '+q')) + + +@sopel.module.event('001') +@sopel.module.rule('.*') +def request_channels_list_initial(bot, trigger): + + botchannels.bot_part_empty(bot) + + botlogs.log('SpiceBot_Channels', "Sending Request for all server channels") + botchannels.channel_list_request(bot) + + starttime = time.time() + + # wait 60 seconds for initial population of information + while not botchannels.SpiceBot_Channels['InitialProcess']: + if time.time() - starttime >= 60: + botlogs.log('SpiceBot_Channels', "Initial Channel list populating Timed Out") + botchannels.SpiceBot_Channels['InitialProcess'] = True + else: + pass + + foundchannelcount = len(botchannels.SpiceBot_Channels['list'].keys()) + botlogs.log('SpiceBot_Channels', "Channel listing finished! " + str(foundchannelcount) + " channel(s) found.") + + botchannels.join_all_channels(bot) + botchannels.chanadmin_all_channels(bot) + + if "*" in botchannels.SpiceBot_Channels['list'].keys(): + del botchannels.SpiceBot_Channels['list']["*"] + + botchannels.bot_part_empty(bot) + botevents.trigger(bot, botevents.BOT_CHANNELS, "SpiceBot_Channels") + + +@sopel.module.event('321') +@sopel.module.rule('.*') +def watch_chanlist_start(bot, trigger): + botchannels.channel_list_recieve_start() + + +@sopel.module.event('322') +@sopel.module.rule('.*') +def watch_chanlist_populate(bot, trigger): + botchannels.channel_list_recieve_input(trigger) + + +@sopel.module.event('323') +@sopel.module.rule('.*') +def watch_chanlist_complete(bot, trigger): + botchannels.channel_list_recieve_finish() + + +@sopel.module.event(botevents.BOT_CHANNELS) +@sopel.module.rule('.*') +def trigger_channel_list_recurring(bot, trigger): + while True: + time.sleep(1800) + botchannels.bot_part_empty(bot) + + oldlist = list(botchannels.SpiceBot_Channels['list'].keys()) + botchannels.channel_list_request(bot) + + while botchannels.channel_lock: + pass + + newlist = [item.lower() for item in oldlist if item.lower() not in list(botchannels.SpiceBot_Channels['list'].keys())] + if "*" in newlist: + newlist.remove("*") + if len(newlist) and bot.config.SpiceBot_Channels.announcenew: + bot.osd(["The Following channel(s) are new:", spicemanip.main(newlist, 'andlist')], bot.channels.keys()) + + botchannels.join_all_channels(bot) + + botchannels.chanadmin_all_channels(bot) + + if "*" in botchannels.SpiceBot_Channels['list'].keys(): + del botchannels.SpiceBot_Channels['list']["*"] + botchannels.bot_part_empty(bot) diff --git a/sopel_modules/SpiceBot_Channels_Parsing/__init__.py b/sopel_modules/SpiceBot_Channels_Parsing/__init__.py new file mode 100644 index 0000000..0d5311d --- /dev/null +++ b/sopel_modules/SpiceBot_Channels_Parsing/__init__.py @@ -0,0 +1,6 @@ +# coding=utf-8 +"""Event Parsing from IRC +""" +from __future__ import unicode_literals, absolute_import, print_function, division + +from .Channels_Parsing import * diff --git a/sopel_modules/SpiceBot_Messaging/Messaging.py b/sopel_modules/SpiceBot_Messaging/Messaging.py index 5425bed..0921c8a 100644 --- a/sopel_modules/SpiceBot_Messaging/Messaging.py +++ b/sopel_modules/SpiceBot_Messaging/Messaging.py @@ -6,6 +6,7 @@ import sopel.module import spicemanip +from sopel_modules.SpiceBot.Channels import botchannels from sopel_modules.SpiceBot_SBTools import sopel_triggerargs, command_permissions_check, inlist @@ -41,7 +42,7 @@ def bot_command_process(bot, trigger): target = spicemanip.main(triggerargs, 1) if (target not in ['allchans', 'allnicks'] - and not inlist(bot, target.lower(), bot.memory['SpiceBot_Channels']['channels'].keys()) + and not inlist(bot, target.lower(), botchannels.SpiceBot_Channels['list'].keys()) and not inlist(bot, target.lower(), bot.users)): bot.osd("Channel/nick name {} not valid.".format(target)) return diff --git a/sopel_modules/SpiceBot_SBTools/__init__.py b/sopel_modules/SpiceBot_SBTools/__init__.py index 65da964..74c7a3c 100644 --- a/sopel_modules/SpiceBot_SBTools/__init__.py +++ b/sopel_modules/SpiceBot_SBTools/__init__.py @@ -270,40 +270,6 @@ def channel_privs(bot, channel, privtype): return privlist -def join_all_channels(bot): - if bot.config.SpiceBot_Channels.joinall: - for channel in bot.memory['SpiceBot_Channels']['channels'].keys(): - if channel.startswith("#"): - if channel not in bot.channels.keys() and channel not in bot.config.SpiceBot_Channels.chanignore: - bot.write(('JOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) - if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: - bot.write(('SAJOIN', bot.nick, bot.memory['SpiceBot_Channels']['channels'][channel]['name'])) - - -def chanadmin_all_channels(bot): - # Chan ADMIN +a - for channel in bot.channels.keys(): - if channel.startswith("#"): - if channel not in bot.config.SpiceBot_Channels.chanignore: - if bot.config.SpiceBot_Channels.operadmin: - if not bot.channels[channel].privileges[bot.nick] < sopel.module.ADMIN: - bot.write(('SAMODE', channel, "+a", bot.nick)) - else: - bot.part(channel) - - -def channel_list_current(bot): - newlist = [item for item in bot.channels.keys() if item.lower() not in bot.memory['SpiceBot_Channels']['channels']] - for channel in newlist: - topic = bot.channels[channel].topic - bot.memory['SpiceBot_Channels']['channels'][str(channel).lower()] = dict() - bot.memory['SpiceBot_Channels']['channels'][str(channel).lower()]['name'] = str(channel) - bot.memory['SpiceBot_Channels']['channels'][str(channel).lower()]['topic'] = topic_compile(topic) - - if "*" in bot.memory['SpiceBot_Channels']: - bot.memory['SpiceBot_Channels'].remove("*") - - """Environment Functions""" diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 47a2fa9..e6c71bb 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -6,6 +6,7 @@ import sopel.module from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot.Events import botevents +from sopel_modules.SpiceBot.Channels import botchannels from sopel_modules.SpiceBot_SBTools import humanized_time import time @@ -42,7 +43,7 @@ def bot_startup_monologue_commands(bot, trigger): def bot_startup_monologue_channels(bot, trigger): botcount = len(bot.channels.keys()) - servercount = len(bot.memory['SpiceBot_Channels']['channels'].keys()) + servercount = len(botchannels.SpiceBot_Channels['list'].keys()) bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") From bfa97f99aea62885b9df60f50b1916f13ea8e4f6 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:21:22 -0400 Subject: [PATCH 39/56] self --- sopel_modules/SpiceBot/Channels.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sopel_modules/SpiceBot/Channels.py b/sopel_modules/SpiceBot/Channels.py index 87f5949..6ea7ee8 100644 --- a/sopel_modules/SpiceBot/Channels.py +++ b/sopel_modules/SpiceBot/Channels.py @@ -18,7 +18,7 @@ class BotChannels(): "InitialProcess": False } - def channel_list_request(bot): + def channel_list_request(self, bot): bot.write(['LIST']) def channel_list_recieve_start(self): @@ -43,7 +43,7 @@ class BotChannels(): topic = re.sub(actual_topic, r'\1', topic) return topic - def bot_part_empty(bot): + def bot_part_empty(self, bot): """Don't stay in empty channels""" ignorepartlist = [] if bot.config.core.logging_channel: @@ -54,7 +54,7 @@ class BotChannels(): if channel.lower() in botchannels.SpiceBot_Channels['list']: del botchannels.SpiceBot_Channels['list'][channel.lower()] - def join_all_channels(bot): + def join_all_channels(self, bot): if bot.config.SpiceBot_Channels.joinall: for channel in botchannels.SpiceBot_Channels['list'].keys(): if channel.startswith("#"): @@ -63,7 +63,7 @@ class BotChannels(): if channel not in bot.channels.keys() and bot.config.SpiceBot_Channels.operadmin: bot.write(('SAJOIN', bot.nick, botchannels.SpiceBot_Channels['list'][channel]['name'])) - def chanadmin_all_channels(bot): + def chanadmin_all_channels(self, bot): # Chan ADMIN +a for channel in bot.channels.keys(): if channel.startswith("#"): From 1318ff48aaeddcb2d5ed820f47cd895a2ae03fff Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:24:18 -0400 Subject: [PATCH 40/56] release --- sopel_modules/SpiceBot/Channels.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sopel_modules/SpiceBot/Channels.py b/sopel_modules/SpiceBot/Channels.py index 6ea7ee8..c8f8d72 100644 --- a/sopel_modules/SpiceBot/Channels.py +++ b/sopel_modules/SpiceBot/Channels.py @@ -33,7 +33,6 @@ class BotChannels(): self.channel_lock = True def channel_list_recieve_finish(self): - self.channel_lock.release() if not self.SpiceBot_Channels['InitialProcess']: self.SpiceBot_Channels['InitialProcess'] = True self.channel_lock = False From b123a4a3f74af3d6bf6449808e90e157d6b08dab Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:41:54 -0400 Subject: [PATCH 41/56] debug access --- sopel_modules/SpiceBot/Events.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index 48c6c5c..4cf4c20 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -89,6 +89,16 @@ class BotEvents(object): return False return True + def startup_debug(self): + not_done = [] + for number in self.SpiceBot_Events["startup_required"]: + if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys(): + not_done.append(number) + reference_not_done = [] + for item in not_done: + reference_not_done.append(str(self.SpiceBot_Events["assigned_IDs"][item])) + return reference_not_done + def check_ready(self, checklist): def actual_decorator(function): @functools.wraps(function) From 1b73357765da246ec124ab97d4558a7fe2a45f06 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:44:06 -0400 Subject: [PATCH 42/56] must be a number --- sopel_modules/SpiceBot/Events.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index 4cf4c20..f6b9f39 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -93,7 +93,7 @@ class BotEvents(object): not_done = [] for number in self.SpiceBot_Events["startup_required"]: if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys(): - not_done.append(number) + not_done.append(int(number)) reference_not_done = [] for item in not_done: reference_not_done.append(str(self.SpiceBot_Events["assigned_IDs"][item])) From 7497538e3aaccb4823273a0012418c536393baf1 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:55:19 -0400 Subject: [PATCH 43/56] test alternative load method --- sopel_modules/SpiceBot_Events/Events.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index c36d800..43eb1d7 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -35,7 +35,7 @@ def bot_events_start(bot, trigger): @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): """Here, we wait until we are in at least one channel""" - while not len(bot.channels.keys()): + while not len(bot.channels.keys()) and not botevents.check([botevents.BOT_CHANNELS]): pass time.sleep(1) botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") @@ -53,7 +53,7 @@ def bot_events_startup_complete(bot, trigger): @sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): - """For items tossed in a queue, this will trigger then accordingly""" + """For items tossed in a queue, this will trigger them accordingly""" botlogs.log('SpiceBot_Events', trigger.args[1], True) while True: From 2cb5915ff926348df31ff0773c4f4fcf97b2c10e Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 19:57:14 -0400 Subject: [PATCH 44/56] test --- sopel_modules/SpiceBot_Events/Events.py | 2 +- .../SpiceBot_StartupMonologue/StartupMonologue_Display.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py index 43eb1d7..d5ed089 100644 --- a/sopel_modules/SpiceBot_Events/Events.py +++ b/sopel_modules/SpiceBot_Events/Events.py @@ -35,7 +35,7 @@ def bot_events_start(bot, trigger): @sopel.module.rule('.*') def bot_startup_connection(bot, trigger): """Here, we wait until we are in at least one channel""" - while not len(bot.channels.keys()) and not botevents.check([botevents.BOT_CHANNELS]): + while not len(bot.channels.keys()): pass time.sleep(1) botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index e6c71bb..323edf7 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -17,7 +17,7 @@ import time def bot_startup_monologue_start(bot, trigger): # Startup - botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration", True) bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") From 60de9616c8d45bd31fd5c8d7e3f43d62f5736c29 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:19:57 -0400 Subject: [PATCH 45/56] a bunch of events changes --- sopel_modules/SpiceBot/Events.py | 20 +++-- .../Channels_Parsing.py | 4 +- sopel_modules/SpiceBot_Events/Connected.py | 19 +++++ sopel_modules/SpiceBot_Events/Events.py | 79 ------------------- sopel_modules/SpiceBot_Events/Loaded.py | 15 ++++ sopel_modules/SpiceBot_Events/Logging.py | 15 ++++ sopel_modules/SpiceBot_Events/Queue.py | 19 +++++ sopel_modules/SpiceBot_Events/Ready.py | 14 ++++ sopel_modules/SpiceBot_Events/Welcome.py | 15 ++++ sopel_modules/SpiceBot_Events/__init__.py | 7 +- sopel_modules/SpiceBot_Logs/Queue.py | 2 +- .../StartupMonologue_Display.py | 3 +- 12 files changed, 120 insertions(+), 92 deletions(-) create mode 100644 sopel_modules/SpiceBot_Events/Connected.py delete mode 100644 sopel_modules/SpiceBot_Events/Events.py create mode 100644 sopel_modules/SpiceBot_Events/Loaded.py create mode 100644 sopel_modules/SpiceBot_Events/Logging.py create mode 100644 sopel_modules/SpiceBot_Events/Queue.py create mode 100644 sopel_modules/SpiceBot_Events/Ready.py create mode 100644 sopel_modules/SpiceBot_Events/Welcome.py diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index f6b9f39..16e9a87 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -47,18 +47,22 @@ class BotEvents(object): return str(eventnumber) def trigger(self, bot, number, message="SpiceBot_Events"): - number = str(number) + pretriggerdict = {"number": str(number), "message": message} if number in self.defaultevents or self.check(self.BOT_CONNECTED): - pretrigger = sopel.trigger.PreTrigger( - bot.nick, - ":SpiceBot_Events " + number + " " + str(bot.nick) + " :" + message - ) - bot.dispatch(pretrigger) - self.recieved({"number": number, "message": message}) + self.dispatch(bot, pretriggerdict) else: - pretriggerdict = {"number": number, "message": message} self.SpiceBot_Events["trigger_queue"].append(pretriggerdict) + def dispatch(self, bot, pretriggerdict): + number = pretriggerdict["number"] + message = pretriggerdict["message"] + pretrigger = sopel.trigger.PreTrigger( + bot.nick, + ":SpiceBot_Events " + str(number) + " " + str(bot.nick) + " :" + message + ) + bot.dispatch(pretrigger) + self.recieved({"number": number, "message": message}) + def recieved(self, trigger): if isinstance(trigger, dict): eventnumber = str(trigger["number"]) diff --git a/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py b/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py index 1b469f5..ef22e3d 100644 --- a/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py +++ b/sopel_modules/SpiceBot_Channels_Parsing/Channels_Parsing.py @@ -36,14 +36,14 @@ def setup(bot): bot.config.define_section("SpiceBot_Channels", SpiceBot_Channels_MainSection, validate=False) -@sopel.module.event('001') +@sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') def unkickable_bot(bot, trigger): if bot.config.SpiceBot_Channels.operadmin: bot.write(('SAMODE', bot.nick, '+q')) -@sopel.module.event('001') +@sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') def request_channels_list_initial(bot, trigger): diff --git a/sopel_modules/SpiceBot_Events/Connected.py b/sopel_modules/SpiceBot_Events/Connected.py new file mode 100644 index 0000000..958b335 --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Connected.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + +import time + + +@sopel.module.event(botevents.BOT_WELCOME) +@sopel.module.rule('.*') +def bot_events_Connected(bot, trigger): + """Here, we wait until we are in at least one channel""" + while not len(bot.channels.keys()): + pass + time.sleep(1) + botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") diff --git a/sopel_modules/SpiceBot_Events/Events.py b/sopel_modules/SpiceBot_Events/Events.py deleted file mode 100644 index d5ed089..0000000 --- a/sopel_modules/SpiceBot_Events/Events.py +++ /dev/null @@ -1,79 +0,0 @@ -# coding=utf-8 - -from __future__ import unicode_literals, absolute_import, division, print_function - -import sopel.module -from sopel.trigger import PreTrigger - -from sopel_modules.SpiceBot.Logs import botlogs -from sopel_modules.SpiceBot.Events import botevents - -import time - - -def setup(bot): - botlogs.log('SpiceBot_Events', "Starting setup procedure") - - -@sopel.module.event(botevents.RPL_WELCOME) -@sopel.module.rule('.*') -def bot_startup_welcome(bot, trigger): - """The Bot events system does not start until RPL_WELCOME 001 is recieved - from the server""" - botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") - - -@sopel.module.event(botevents.BOT_WELCOME) -@sopel.module.rule('.*') -def bot_events_start(bot, trigger): - """This stage is redundant, but shows the system is working.""" - botlogs.log('SpiceBot_Events', trigger.args[1], True) - botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") - - -@sopel.module.event(botevents.BOT_WELCOME) -@sopel.module.rule('.*') -def bot_startup_connection(bot, trigger): - """Here, we wait until we are in at least one channel""" - while not len(bot.channels.keys()): - pass - time.sleep(1) - botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") - - -@botevents.startup_check_ready() -@sopel.module.event(botevents.BOT_READY) -@sopel.module.rule('.*') -def bot_events_startup_complete(bot, trigger): - """All events registered as required for startup have completed""" - botlogs.log('SpiceBot_Events', trigger.args[1], True) - botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") - - -@sopel.module.event(botevents.BOT_CONNECTED) -@sopel.module.rule('.*') -def bot_events_connected(bot, trigger): - """For items tossed in a queue, this will trigger them accordingly""" - botlogs.log('SpiceBot_Events', trigger.args[1], True) - - while True: - if len(botevents.SpiceBot_Events["trigger_queue"]): - number = botevents.SpiceBot_Events["trigger_queue"][0]["number"] - message = botevents.SpiceBot_Events["trigger_queue"][0]["message"] - pretrigger = PreTrigger( - bot.nick, - ":SpiceBot_Events " + str(number) + " " + str(bot.nick) + " :" + message - ) - bot.dispatch(pretrigger) - del botevents.SpiceBot_Events["trigger_queue"][0] - botevents.recieved({"number": number, "message": message}) - else: - if botevents.startup_check(): - return - - -@sopel.module.event(botevents.BOT_LOADED) -@sopel.module.rule('.*') -def bot_events_complete(bot, trigger): - """This is here simply to log to stderr that this was recieved.""" - botlogs.log('SpiceBot_Events', trigger.args[1], True) diff --git a/sopel_modules/SpiceBot_Events/Loaded.py b/sopel_modules/SpiceBot_Events/Loaded.py new file mode 100644 index 0000000..679c06f --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Loaded.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + + +@botevents.startup_check_ready() +@sopel.module.event(botevents.BOT_READY) +@sopel.module.rule('.*') +def bot_events_startup_complete(bot, trigger): + """All events registered as required for startup have completed""" + botevents.trigger(bot, botevents.BOT_LOADED, "All registered modules setup procedures have completed") diff --git a/sopel_modules/SpiceBot_Events/Logging.py b/sopel_modules/SpiceBot_Events/Logging.py new file mode 100644 index 0000000..9176d9e --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Logging.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.BOT_WELCOME, botevents.BOT_READY, botevents.BOT_CONNECTED, botevents.BOT_LOADED) +@sopel.module.rule('.*') +def bot_events_complete(bot, trigger): + """This is here simply to log to stderr that this was recieved.""" + botlogs.log('SpiceBot_Events', trigger.args[1], True) diff --git a/sopel_modules/SpiceBot_Events/Queue.py b/sopel_modules/SpiceBot_Events/Queue.py new file mode 100644 index 0000000..0590f63 --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Queue.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.rule('.*') +def bot_events_connected(bot, trigger): + """For items tossed in a queue, this will trigger them accordingly""" + + while True: + if len(botevents.SpiceBot_Events["trigger_queue"]): + pretriggerdict = botevents.SpiceBot_Events["trigger_queue"][0] + botevents.dispatch(pretriggerdict) + del botevents.SpiceBot_Events["trigger_queue"][0] diff --git a/sopel_modules/SpiceBot_Events/Ready.py b/sopel_modules/SpiceBot_Events/Ready.py new file mode 100644 index 0000000..4e8df49 --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Ready.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.BOT_WELCOME) +@sopel.module.rule('.*') +def bot_events_start(bot, trigger): + """This stage is redundant, but shows the system is working.""" + botevents.trigger(bot, botevents.BOT_READY, "Ready To Process module setup procedures") diff --git a/sopel_modules/SpiceBot_Events/Welcome.py b/sopel_modules/SpiceBot_Events/Welcome.py new file mode 100644 index 0000000..228420e --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Welcome.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.RPL_WELCOME) +@sopel.module.rule('.*') +def bot_startup_welcome(bot, trigger): + """The Bot events system does not start until RPL_WELCOME 001 is recieved + from the server""" + botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") diff --git a/sopel_modules/SpiceBot_Events/__init__.py b/sopel_modules/SpiceBot_Events/__init__.py index 2e6b7d5..e2846d8 100644 --- a/sopel_modules/SpiceBot_Events/__init__.py +++ b/sopel_modules/SpiceBot_Events/__init__.py @@ -1,7 +1,12 @@ # coding=utf8 from __future__ import unicode_literals, absolute_import, division, print_function -from .Events import * +from .Welcome import * +from .Ready import * +from .Connected import * +from .Loaded import * +from .Queue import * +from .Logging import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' diff --git a/sopel_modules/SpiceBot_Logs/Queue.py b/sopel_modules/SpiceBot_Logs/Queue.py index 2772525..784efa7 100644 --- a/sopel_modules/SpiceBot_Logs/Queue.py +++ b/sopel_modules/SpiceBot_Logs/Queue.py @@ -15,7 +15,7 @@ def setup(bot): botevents.trigger(bot, botevents.BOT_LOGS, "SpiceBot_Logs") -@sopel.module.event('001') +@sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') def join_log_channel(bot, trigger): diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 323edf7..1756770 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -17,7 +17,7 @@ import time def bot_startup_monologue_start(bot, trigger): # Startup - botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration", True) + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") @@ -45,6 +45,7 @@ def bot_startup_monologue_channels(bot, trigger): botcount = len(bot.channels.keys()) servercount = len(botchannels.SpiceBot_Channels['list'].keys()) bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") + botlogs.log('SpiceBot_StartupMonologue', "I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") From 08a7bcdac6a13048e3d731e71d8af16007a2b442 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:21:11 -0400 Subject: [PATCH 46/56] only defaults --- sopel_modules/SpiceBot/Events.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index 16e9a87..dee8727 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -48,7 +48,7 @@ class BotEvents(object): def trigger(self, bot, number, message="SpiceBot_Events"): pretriggerdict = {"number": str(number), "message": message} - if number in self.defaultevents or self.check(self.BOT_CONNECTED): + if number in self.defaultevents: self.dispatch(bot, pretriggerdict) else: self.SpiceBot_Events["trigger_queue"].append(pretriggerdict) From f63e1a7e1bd1a7b0712609785d4b2d1248d02cfd Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:24:07 -0400 Subject: [PATCH 47/56] events system should queue as soon as possible --- sopel_modules/SpiceBot_Events/Queue.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/Queue.py b/sopel_modules/SpiceBot_Events/Queue.py index 0590f63..6da59a0 100644 --- a/sopel_modules/SpiceBot_Events/Queue.py +++ b/sopel_modules/SpiceBot_Events/Queue.py @@ -7,11 +7,10 @@ import sopel.module from sopel_modules.SpiceBot.Events import botevents -@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.event(botevents.RPL_WELCOME) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): """For items tossed in a queue, this will trigger them accordingly""" - while True: if len(botevents.SpiceBot_Events["trigger_queue"]): pretriggerdict = botevents.SpiceBot_Events["trigger_queue"][0] From c155f5fe23df9c5233ac0da7c97886487422b7fc Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:24:27 -0400 Subject: [PATCH 48/56] Bot first --- sopel_modules/SpiceBot_Events/Queue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Events/Queue.py b/sopel_modules/SpiceBot_Events/Queue.py index 6da59a0..0497cdf 100644 --- a/sopel_modules/SpiceBot_Events/Queue.py +++ b/sopel_modules/SpiceBot_Events/Queue.py @@ -7,7 +7,7 @@ import sopel.module from sopel_modules.SpiceBot.Events import botevents -@sopel.module.event(botevents.RPL_WELCOME) +@sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_connected(bot, trigger): """For items tossed in a queue, this will trigger them accordingly""" From be30e99e6fff4dbdfbc1e67db4cd9772dd6548d3 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:28:16 -0400 Subject: [PATCH 49/56] repair --- sopel_modules/SpiceBot_Events/Queue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Events/Queue.py b/sopel_modules/SpiceBot_Events/Queue.py index 0497cdf..9ccd275 100644 --- a/sopel_modules/SpiceBot_Events/Queue.py +++ b/sopel_modules/SpiceBot_Events/Queue.py @@ -14,5 +14,5 @@ def bot_events_connected(bot, trigger): while True: if len(botevents.SpiceBot_Events["trigger_queue"]): pretriggerdict = botevents.SpiceBot_Events["trigger_queue"][0] - botevents.dispatch(pretriggerdict) + botevents.dispatch(bot, pretriggerdict) del botevents.SpiceBot_Events["trigger_queue"][0] From ec82e60d2c5cacb8ba2a81f3ddf3ce0d739570be Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:33:26 -0400 Subject: [PATCH 50/56] welcome --- .../SpiceBot_StartupMonologue/StartupMonologue_Display.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 1756770..86d3741 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -12,10 +12,14 @@ from sopel_modules.SpiceBot_SBTools import humanized_time import time -@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): + while not len(bot.channels.keys()): + pass + time.sleep(1) + # Startup botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') From fcd34ff4f58bed1f524c43cccd5563d1b1be7a21 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:37:46 -0400 Subject: [PATCH 51/56] sleep remove --- sopel_modules/SpiceBot_Events/Connected.py | 5 +---- .../SpiceBot_StartupMonologue/StartupMonologue_Display.py | 6 +----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/sopel_modules/SpiceBot_Events/Connected.py b/sopel_modules/SpiceBot_Events/Connected.py index 958b335..c99f0db 100644 --- a/sopel_modules/SpiceBot_Events/Connected.py +++ b/sopel_modules/SpiceBot_Events/Connected.py @@ -6,14 +6,11 @@ import sopel.module from sopel_modules.SpiceBot.Events import botevents -import time - @sopel.module.event(botevents.BOT_WELCOME) @sopel.module.rule('.*') def bot_events_Connected(bot, trigger): """Here, we wait until we are in at least one channel""" - while not len(bot.channels.keys()): + while not len(bot.channels.keys()) > 0: pass - time.sleep(1) botevents.trigger(bot, botevents.BOT_CONNECTED, "Bot Connected to IRC") diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py index 86d3741..1756770 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py @@ -12,14 +12,10 @@ from sopel_modules.SpiceBot_SBTools import humanized_time import time -@sopel.module.event(botevents.BOT_WELCOME) +@sopel.module.event(botevents.BOT_CONNECTED) @sopel.module.rule('.*') def bot_startup_monologue_start(bot, trigger): - while not len(bot.channels.keys()): - pass - time.sleep(1) - # Startup botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') From dcec93eca746b7cc3bf6c7f75f7acdca10c56d9c Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:44:38 -0400 Subject: [PATCH 52/56] test --- .../StartupMonologue_Display.py | 67 ------------------- .../StartupMonologue_Display_Channels.py | 21 ++++++ .../StartupMonologue_Display_Commands.py | 23 +++++++ .../StartupMonologue_Display_Connected.py | 19 ++++++ ....py => StartupMonologue_Display_Errors.py} | 0 .../StartupMonologue_Display_Loaded.py | 29 ++++++++ .../SpiceBot_StartupMonologue/__init__.py | 7 +- 7 files changed, 97 insertions(+), 69 deletions(-) delete mode 100644 sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py create mode 100644 sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Channels.py create mode 100644 sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Commands.py create mode 100644 sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Connected.py rename sopel_modules/SpiceBot_StartupMonologue/{ErrorDisplay.py => StartupMonologue_Display_Errors.py} (100%) create mode 100644 sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py deleted file mode 100644 index 1756770..0000000 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display.py +++ /dev/null @@ -1,67 +0,0 @@ -# coding=utf-8 - -from __future__ import unicode_literals, absolute_import, division, print_function - -import sopel.module - -from sopel_modules.SpiceBot.Logs import botlogs -from sopel_modules.SpiceBot.Events import botevents -from sopel_modules.SpiceBot.Channels import botchannels -from sopel_modules.SpiceBot_SBTools import humanized_time - -import time - - -@sopel.module.event(botevents.BOT_CONNECTED) -@sopel.module.rule('.*') -def bot_startup_monologue_start(bot, trigger): - - # Startup - botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") - bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') - - botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") - - -@sopel.module.event(botevents.BOT_COMMANDSQUERY) -@sopel.module.rule('.*') -def bot_startup_monologue_commands(bot, trigger): - - availablecomsnum, availablecomsfiles = 0, 0 - for commandstype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): - availablecomsnum += len(bot.memory['SpiceBot_CommandsQuery']['commands'][commandstype].keys()) - availablecomsfiles += bot.memory['SpiceBot_CommandsQuery']['counts'] - - bot.memory['SpiceBot_StartupMonologue'].append("There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") - botlogs.log('SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") - - botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") - - -@sopel.module.event(botevents.BOT_CHANNELS) -@sopel.module.rule('.*') -def bot_startup_monologue_channels(bot, trigger): - - botcount = len(bot.channels.keys()) - servercount = len(botchannels.SpiceBot_Channels['list'].keys()) - bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") - botlogs.log('SpiceBot_StartupMonologue', "I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") - - botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") - - -@sopel.module.event(botevents.BOT_LOADED) -@sopel.module.rule('.*') -def bot_startup_monologue_display(bot, trigger): - - timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) - bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) - - # Announce to chan, then handle some closing stuff - botlogs.log('SpiceBot_StartupMonologue', bot.nick + " startup complete") - bot.memory['SpiceBot_StartupMonologue'].insert(0, " startup complete") - - bot.osd(bot.memory['SpiceBot_StartupMonologue'], bot.channels.keys(), 'ACTION') - - botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") - botlogs.log('SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Channels.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Channels.py new file mode 100644 index 0000000..b8254be --- /dev/null +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Channels.py @@ -0,0 +1,21 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents +from sopel_modules.SpiceBot.Channels import botchannels + + +@sopel.module.event(botevents.BOT_CHANNELS) +@sopel.module.rule('.*') +def bot_startup_monologue_channels(bot, trigger): + + botcount = len(bot.channels.keys()) + servercount = len(botchannels.SpiceBot_Channels['list'].keys()) + bot.memory['SpiceBot_StartupMonologue'].append("I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") + botlogs.log('SpiceBot_StartupMonologue', "I am in " + str(botcount) + " of " + str(servercount) + " channel(s) available on this server.") + + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CHANNELS, "SpiceBot_StartupMonologue") diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Commands.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Commands.py new file mode 100644 index 0000000..3cae22e --- /dev/null +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Commands.py @@ -0,0 +1,23 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.BOT_COMMANDSQUERY) +@sopel.module.rule('.*') +def bot_startup_monologue_commands(bot, trigger): + + availablecomsnum, availablecomsfiles = 0, 0 + for commandstype in bot.memory['SpiceBot_CommandsQuery']['commands'].keys(): + availablecomsnum += len(bot.memory['SpiceBot_CommandsQuery']['commands'][commandstype].keys()) + availablecomsfiles += bot.memory['SpiceBot_CommandsQuery']['counts'] + + bot.memory['SpiceBot_StartupMonologue'].append("There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") + botlogs.log('SpiceBot_StartupMonologue', "There are " + str(availablecomsnum) + " commands available in " + str(availablecomsfiles) + " files.") + + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, "SpiceBot_StartupMonologue") diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Connected.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Connected.py new file mode 100644 index 0000000..e829d82 --- /dev/null +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Connected.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.BOT_CONNECTED) +@sopel.module.rule('.*') +def bot_startup_monologue_start(bot, trigger): + + # Startup + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " is now starting. Please wait while I load my configuration") + bot.osd(" is now starting. Please wait while I load my configuration.", bot.channels.keys(), 'ACTION') + + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") diff --git a/sopel_modules/SpiceBot_StartupMonologue/ErrorDisplay.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Errors.py similarity index 100% rename from sopel_modules/SpiceBot_StartupMonologue/ErrorDisplay.py rename to sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Errors.py diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py new file mode 100644 index 0000000..cdf704f --- /dev/null +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py @@ -0,0 +1,29 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Logs import botlogs +from sopel_modules.SpiceBot.Events import botevents +from sopel_modules.SpiceBot.Channels import botchannels +from sopel_modules.SpiceBot_SBTools import humanized_time + +import time + + +@sopel.module.event(botevents.BOT_LOADED) +@sopel.module.rule('.*') +def bot_startup_monologue_display(bot, trigger): + + timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) + bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) + + # Announce to chan, then handle some closing stuff + botlogs.log('SpiceBot_StartupMonologue', bot.nick + " startup complete") + bot.memory['SpiceBot_StartupMonologue'].insert(0, " startup complete") + + bot.osd(bot.memory['SpiceBot_StartupMonologue'], bot.channels.keys(), 'ACTION') + + botevents.trigger(bot, botevents.BOT_STARTUPMONOLOGUE, "SpiceBot_StartupMonologue") + botlogs.log('SpiceBot_StartupMonologue', "Startup Monologue has been issued to all channels.", True) diff --git a/sopel_modules/SpiceBot_StartupMonologue/__init__.py b/sopel_modules/SpiceBot_StartupMonologue/__init__.py index c656a51..8ab7cf1 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/__init__.py +++ b/sopel_modules/SpiceBot_StartupMonologue/__init__.py @@ -6,8 +6,11 @@ Sopel Startup Monologue displays to all channels that the bot is online from __future__ import unicode_literals, absolute_import, division, print_function from .StartupMonologue import * -from .StartupMonologue_Display import * -from .ErrorDisplay import * +from .StartupMonologue_Display_Channels import * +from .StartupMonologue_Display_Commands import * +from .StartupMonologue_Display_Connected import * +from .StartupMonologue_Display_Loaded import * +from .StartupMonologue_Display_Errors import * __author__ = 'Sam Zick' __email__ = 'sam@deathbybandaid.net' From 2cd3acd6c6d1a02ff7081c7b831dd8647631b9bf Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sat, 18 May 2019 20:47:37 -0400 Subject: [PATCH 53/56] tst --- sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py index 2671bcc..bd9dd6f 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue.py @@ -10,7 +10,7 @@ from sopel_modules.SpiceBot.Events import botevents def setup(bot): botlogs.log('SpiceBot_StartupMonologue', "Starting setup procedure") - botevents.startup_add([botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY, botevents.BOT_STARTUPMONOLOGUE_CONNECTED]) + botevents.startup_add([botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDSQUERY]) # , botevents.BOT_STARTUPMONOLOGUE_CONNECTED]) if 'SpiceBot_StartupMonologue' not in bot.memory: bot.memory['SpiceBot_StartupMonologue'] = [] From 47018cdfce17740fed506183e04ed6ebbd41ceca Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Sun, 19 May 2019 17:33:01 -0400 Subject: [PATCH 54/56] Add The ability to detect connection stability issues --- sopel_modules/SpiceBot/Events.py | 6 ++++-- sopel_modules/SpiceBot_Events/Connection_Count.py | 14 ++++++++++++++ sopel_modules/SpiceBot_Events/Welcome.py | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 sopel_modules/SpiceBot_Events/Connection_Count.py diff --git a/sopel_modules/SpiceBot/Events.py b/sopel_modules/SpiceBot/Events.py index dee8727..34dfc54 100644 --- a/sopel_modules/SpiceBot/Events.py +++ b/sopel_modules/SpiceBot/Events.py @@ -31,12 +31,14 @@ class BotEvents(object): self.BOT_READY = '1002' self.BOT_CONNECTED = '1003' self.BOT_LOADED = '1004' - self.defaultevents = [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED] + self.BOT_RECONNECTED = '1005' + self.defaultevents = [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED, self.BOT_RECONNECTED] self.SpiceBot_Events = { - "assigned_IDs": {1000: "Default", 1001: "BOT_WELCOME", 1002: "BOT_READY", 1003: "BOT_CONNECTED", 1004: "BOT_LOADED"}, + "assigned_IDs": {1000: "Default", 1001: "BOT_WELCOME", 1002: "BOT_READY", 1003: "BOT_CONNECTED", 1004: "BOT_LOADED", 1005: "BOT_RECONNECTED"}, "triggers_recieved": {}, "trigger_queue": [], "startup_required": [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED], + "RPL_WELCOME_Count": 0 } def __getattr__(self, name): diff --git a/sopel_modules/SpiceBot_Events/Connection_Count.py b/sopel_modules/SpiceBot_Events/Connection_Count.py new file mode 100644 index 0000000..ca004e3 --- /dev/null +++ b/sopel_modules/SpiceBot_Events/Connection_Count.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel.module + +from sopel_modules.SpiceBot.Events import botevents + + +@sopel.module.event(botevents.RPL_WELCOME) +@sopel.module.rule('.*') +def bot_startup_welcome(bot, trigger): + botevents.SpiceBot_Events["RPL_WELCOME_Count"] += 1 + botevents.trigger(bot, botevents.BOT_RECONNECTED, "Bot Connected to IRC") diff --git a/sopel_modules/SpiceBot_Events/Welcome.py b/sopel_modules/SpiceBot_Events/Welcome.py index 228420e..ca15d55 100644 --- a/sopel_modules/SpiceBot_Events/Welcome.py +++ b/sopel_modules/SpiceBot_Events/Welcome.py @@ -12,4 +12,6 @@ from sopel_modules.SpiceBot.Events import botevents def bot_startup_welcome(bot, trigger): """The Bot events system does not start until RPL_WELCOME 001 is recieved from the server""" + if botevents.check(botevents.BOT_WELCOME): + return botevents.trigger(bot, botevents.BOT_WELCOME, "Welcome to the SpiceBot Events System") From b88ccbf9cb5ed9e6a310ef7fe99da0d0a5689f7d Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Mon, 20 May 2019 07:46:03 -0400 Subject: [PATCH 55/56] better reconnect logic --- sopel_modules/SpiceBot_Events/Connection_Count.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sopel_modules/SpiceBot_Events/Connection_Count.py b/sopel_modules/SpiceBot_Events/Connection_Count.py index ca004e3..786271b 100644 --- a/sopel_modules/SpiceBot_Events/Connection_Count.py +++ b/sopel_modules/SpiceBot_Events/Connection_Count.py @@ -11,4 +11,5 @@ from sopel_modules.SpiceBot.Events import botevents @sopel.module.rule('.*') def bot_startup_welcome(bot, trigger): botevents.SpiceBot_Events["RPL_WELCOME_Count"] += 1 - botevents.trigger(bot, botevents.BOT_RECONNECTED, "Bot Connected to IRC") + if botevents.SpiceBot_Events["RPL_WELCOME_Count"] > 1: + botevents.trigger(bot, botevents.BOT_RECONNECTED, "Bot ReConnected to IRC") From c58adeec06d9e24f31380d2e2161e007de79c979 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Mon, 20 May 2019 08:16:36 -0400 Subject: [PATCH 56/56] just in case --- .../StartupMonologue_Display_Loaded.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py index cdf704f..a5ab12b 100644 --- a/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py +++ b/sopel_modules/SpiceBot_StartupMonologue/StartupMonologue_Display_Loaded.py @@ -6,7 +6,6 @@ import sopel.module from sopel_modules.SpiceBot.Logs import botlogs from sopel_modules.SpiceBot.Events import botevents -from sopel_modules.SpiceBot.Channels import botchannels from sopel_modules.SpiceBot_SBTools import humanized_time import time @@ -16,8 +15,9 @@ import time @sopel.module.rule('.*') def bot_startup_monologue_display(bot, trigger): - timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) - bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) + if botevents.SpiceBot_Events["RPL_WELCOME_Count"] == 1: + timesince = humanized_time(time.time() - bot.memory["SpiceBot_Uptime"]) + bot.memory['SpiceBot_StartupMonologue'].append("Startup took " + timesince) # Announce to chan, then handle some closing stuff botlogs.log('SpiceBot_StartupMonologue', bot.nick + " startup complete")