From 3c992ede46b4ce4d0be37b472f660f466a6d4114 Mon Sep 17 00:00:00 2001 From: deathbybandaid Date: Tue, 16 Jul 2019 09:08:56 -0400 Subject: [PATCH] sopel version dialogue --- sopel_modules/SpiceBot/Update.py | 13 ++++++--- sopel_modules/SpiceBot/setup.py | 1 + .../StartupMonologue.py | 10 +++++++ .../Updates_Available.py | 27 +++++++++++++++++++ .../SpiceBot_Core_Processing/__init__.py | 1 + 5 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 sopel_modules/SpiceBot_Core_Processing/Updates_Available.py diff --git a/sopel_modules/SpiceBot/Update.py b/sopel_modules/SpiceBot/Update.py index b9409e9..a6c445c 100644 --- a/sopel_modules/SpiceBot/Update.py +++ b/sopel_modules/SpiceBot/Update.py @@ -22,8 +22,10 @@ class BotUpdates(): def __init__(self): self.sopel = { "version_local": sopel.version_info, + "version_local_num": sopel.__version__, "version_url": 'https://sopel.chat/latest.json', "version_online": None, + "version_online_num": None, } self.spicebot = False @@ -32,15 +34,20 @@ class BotUpdates(): def check_sopel(self): info = requests.get(self.sopel["version_url"], verify=botconfig.core.verify_ssl).json() if self.sopel["version_local"].releaselevel == 'final': - latest = info['version'] + self.sopel["version_online_num"] = info['version'] + self.sopel["notes"] = info['release_notes'] else: - latest = info['unstable'] + self.sopel["version_online_num"] = info['unstable'] + self.sopel["notes"] = info.get('unstable_notes', '') + if self.sopel["notes"]: + self.sopel["notes"] = 'Full release notes at ' + self.sopel["notes"] - self.sopel["version_online"] = sopel._version_info(latest) + self.sopel["version_online"] = sopel._version_info(self.sopel["version_online_num"]) def check_spicebot(self): return self.sopel = True + # get actual version number, and commit count, and assemble a version version = BotUpdates() diff --git a/sopel_modules/SpiceBot/setup.py b/sopel_modules/SpiceBot/setup.py index 71c61ad..0988780 100644 --- a/sopel_modules/SpiceBot/setup.py +++ b/sopel_modules/SpiceBot/setup.py @@ -103,6 +103,7 @@ def setup_startupmonologue(bot): botevents.BOT_STARTUPMONOLOGUE_CHANNELS, botevents.BOT_STARTUPMONOLOGUE_COMMANDS, botevents.BOT_STARTUPMONOLOGUE_AI, + botevents.BOT_STARTUPMONOLOGUE_SOPEL_VERSION, ]) diff --git a/sopel_modules/SpiceBot_Core_Processing/StartupMonologue.py b/sopel_modules/SpiceBot_Core_Processing/StartupMonologue.py index ec49264..f62722c 100644 --- a/sopel_modules/SpiceBot_Core_Processing/StartupMonologue.py +++ b/sopel_modules/SpiceBot_Core_Processing/StartupMonologue.py @@ -19,6 +19,16 @@ def bot_startup_monologue_start(bot, trigger): SpiceBot.events.trigger(bot, SpiceBot.events.BOT_STARTUPMONOLOGUE_CONNECTED, "SpiceBot_StartupMonologue") +@sopel.module.event(SpiceBot.events.BOT_CONNECTED) +@sopel.module.rule('.*') +def bot_startup_monologue_sopel_version(bot, trigger): + SpiceBot.events.trigger(bot, SpiceBot.events.BOT_STARTUPMONOLOGUE_SOPEL_VERSION, "SpiceBot_StartupMonologue") + displayval = "I am running Sopel " + str(SpiceBot.version.sopel["version_local_num"]) + if SpiceBot.version.sopel["version_local"] < SpiceBot.version.sopel["version_online"]: + displayval += " Update Available to " + SpiceBot.version.sopel["version_online_num"] + SpiceBot.startupmonologue.dict["sopel_version"] = displayval + + @sopel.module.event(SpiceBot.events.BOT_CHANNELS) @sopel.module.rule('.*') def bot_startup_monologue_channels(bot, trigger): diff --git a/sopel_modules/SpiceBot_Core_Processing/Updates_Available.py b/sopel_modules/SpiceBot_Core_Processing/Updates_Available.py new file mode 100644 index 0000000..3213eb1 --- /dev/null +++ b/sopel_modules/SpiceBot_Core_Processing/Updates_Available.py @@ -0,0 +1,27 @@ +# coding=utf8 +from __future__ import unicode_literals, absolute_import, division, print_function + +import sopel + +import sopel_modules.SpiceBot as SpiceBot + +wait_time = 24 * 60 * 60 # check once per day + +message = ( + 'A new Sopel version, {}, is available. I am running {}. Please update ' + 'me. Full release notes at {}' +) + + +@sopel.module.interval(wait_time) +def check_updates_sopel_interval(bot): + SpiceBot.version.check_sopel() + + msg = message.format( + SpiceBot.version.sopel["version_online_num"], + SpiceBot.version.sopel["version_local_num"], + SpiceBot.version.sopel["notes"] + ) + + if SpiceBot.version.sopel["version_local"] < SpiceBot.version.sopel["version_online"]: + bot.osd(msg, bot.config.core.owner) diff --git a/sopel_modules/SpiceBot_Core_Processing/__init__.py b/sopel_modules/SpiceBot_Core_Processing/__init__.py index 108492b..58eabad 100644 --- a/sopel_modules/SpiceBot_Core_Processing/__init__.py +++ b/sopel_modules/SpiceBot_Core_Processing/__init__.py @@ -17,6 +17,7 @@ from .osd import * from .StartupMonologue import * from .Logs import * from .Kick import * +from .Updates_Available import * # from .Watch_URL import *