diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py index e69b7dd21..ea3dda115 100644 --- a/redbot/cogs/downloader/downloader.py +++ b/redbot/cogs/downloader/downloader.py @@ -5,6 +5,8 @@ from sys import path as syspath from typing import Tuple, Union import discord +import sys + from redbot.core import Config from redbot.core import checks from redbot.core.data_manager import cog_data_path @@ -275,6 +277,13 @@ class Downloader: await ctx.send(_("Error, there is no cog by the name of" " `{}` in the `{}` repo.").format(cog_name, repo_name.name)) return + elif cog.min_python_version > sys.version_info: + await ctx.send(_( + "This cog requires at least python version {}, aborting install.".format( + '.'.join([str(n) for n in cog.min_python_version]) + ) + )) + return if not await repo_name.install_requirements(cog, self.LIB_PATH): await ctx.send(_("Failed to install the required libraries for" diff --git a/redbot/cogs/downloader/installable.py b/redbot/cogs/downloader/installable.py index 0f2158546..edaacf7cb 100644 --- a/redbot/cogs/downloader/installable.py +++ b/redbot/cogs/downloader/installable.py @@ -38,6 +38,9 @@ class Installable(RepoJSONMixin): bot_version : `tuple` of `int` The minimum bot version required for this installation. Right now this is always :code:`3.0.0`. + min_python_version : `tuple` of `int` + The minimum python version required for this cog. This field will not + apply to repo info.json's. hidden : `bool` Whether or not this cog will be hidden from the user when they use `Downloader`'s commands. @@ -70,6 +73,7 @@ class Installable(RepoJSONMixin): self.author = () self.bot_version = (3, 0, 0) + self.min_python_version = (3, 5, 1) self.hidden = False self.required_cogs = {} # Cog name -> repo URL self.requirements = () @@ -159,9 +163,15 @@ class Installable(RepoJSONMixin): try: bot_version = tuple(info.get("bot_version", [3, 0, 0])) except ValueError: - bot_version = 2 + bot_version = self.bot_version self.bot_version = bot_version + try: + min_python_version = tuple(info.get('min_python_version', [3, 5, 1])) + except ValueError: + min_python_version = self.min_python_version + self.min_python_version = min_python_version + try: hidden = bool(info.get("hidden", False)) except ValueError: