Skip to content

Commit 1251f7f

Browse files
committed
added minimal version checking
1 parent bbbfac5 commit 1251f7f

File tree

6 files changed

+57
-7
lines changed

6 files changed

+57
-7
lines changed

teagram/dispatcher.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ async def check_filter(self, function: FunctionType, message: Message):
2727
if not coroutine:
2828
return False
2929
else:
30-
return message.outgoing
30+
return message.outgoing or (
31+
message.from_user and message.from_user.id == self.client.me.id
32+
)
3133

3234
return True
3335

teagram/loader.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import sys
55
import gc
66
import os
7+
import re
78

89
from importlib.machinery import ModuleSpec
910
from importlib.util import spec_from_file_location, module_from_spec
@@ -14,9 +15,16 @@
1415
from typing import Final, List
1516

1617
from .utils import BASE_PATH
18+
from . import __version__
1719

1820
from .dispatcher import Dispatcher
19-
from .types import Module, StringLoader, ModuleException, ABCLoader
21+
from .types import (
22+
Module,
23+
StringLoader,
24+
ModuleException,
25+
ModuleVersionException,
26+
ABCLoader,
27+
)
2028

2129
from .inline import InlineDispatcher
2230
from .translator import Translator, ModuleTranslator
@@ -111,6 +119,9 @@ def __init__(self, client, database):
111119

112120
self.translator = Translator(self.database)
113121

122+
def get(self, key: str):
123+
return self.translator.get("loader", key)
124+
114125
async def load(self):
115126
await self.load_modules()
116127

@@ -173,11 +184,34 @@ async def load_module(
173184
)
174185

175186
if not module_class:
187+
sys.modules.pop(module_name, None)
188+
176189
raise ModuleException("❌ Module class not found")
177190

178191
module_class.__origin__ = origin
179192
name = getattr(module_class, "name", module_class.__class__.__name__)
180193

194+
min_version = module_class.MIN_VERSION
195+
if min_version != "BETA":
196+
if min_version != "Not specified":
197+
exception = ""
198+
if not re.fullmatch(r"\d+\.\d+\.\d+", min_version):
199+
exception = self.get("invalid_module_min_version").format(
200+
min_version
201+
)
202+
203+
current_version = tuple(map(int, __version__.split(".")))
204+
required_version = tuple(map(int, min_version.split(".")))
205+
206+
if current_version < required_version:
207+
exception = self.get("incompatible_version").format(
208+
__version__, min_version
209+
)
210+
211+
if exception:
212+
sys.modules.pop(module_name, None)
213+
raise ModuleVersionException(exception)
214+
181215
if self.lookup(name):
182216
raise ModuleException(f"❌ Module {name} has already loaded")
183217

teagram/modules/manager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from .. import loader, utils
44

55
from ..translator import SUPPORTED_LANGUAGES
6-
from ..types import ModuleException
6+
from ..types import ModuleException, ModuleVersionException
77

88
from time import time
99

@@ -179,8 +179,8 @@ async def loadmod(self, message: Message):
179179
try:
180180
module_name = await self.load_module(code)
181181
await utils.answer(message, self.get("load_success").format(module_name))
182-
except ModuleException as error:
183-
return await utils.answer(message, f"<b>{error}</b>")
182+
except (ModuleException, ModuleVersionException) as error:
183+
return await utils.answer(message, error)
184184

185185
@loader.command(alias="ulm")
186186
async def unloadmod(self, message, args):

teagram/translations/en.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@ help:
2626
modules: "<b>Teagram modules</b>\n\n"
2727

2828
info:
29-
ping: "<b>⚡ Ping: {}ms</b>"
29+
ping: "<b>⚡ Ping: {}ms</b>"
30+
31+
loader:
32+
module_class_not_found: "<b>❌ Module's class not found</b>"
33+
invalid_module_min_version: "<b>❌ Invalid module's minimal version (<code>{}</code>)</b>"
34+
incompatible_version: "<b>❌ Userbot's version is lower than required ({} < {})</b>"

teagram/translations/ru.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@ help:
2626
modules: "<b>Teagram модули</b>\n\n"
2727

2828
info:
29-
ping: "<b>⚡ Пинг: {}ms</b>"
29+
ping: "<b>⚡ Пинг: {}ms</b>"
30+
31+
loader:
32+
module_class_not_found: "<b>❌ Класс модуля не найден</b>"
33+
invalid_module_min_version: "<b>❌ Некорректная минимальная версия модуля (<code>{}</code>)</b>"
34+
incompatible_version: "<b>❌ Версия юзербота ниже минимальной версии модуля ({} < {})</b>"

teagram/types.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ class ModuleException(Exception):
5757
pass
5858

5959

60+
class ModuleVersionException(Exception):
61+
pass
62+
63+
6064
class Module:
6165
MIN_VERSION = "BETA"
6266
MODULE_VERSION = "Not specified"

0 commit comments

Comments
 (0)