From 3295d4aceccc0e5cf96f5f241550a67789949ea8 Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Wed, 10 Jul 2024 11:28:42 +0300 Subject: [PATCH] wip --- .gitignore | 4 +- docs/MODULES-SPEC.md | 3 + scripts/init.py | 6 +- src/__init__.py | 4 +- .../modules_system/public_api/__init__.py | 1 - .../modules_system/public_api/public_api.py | 13 ---- src/modules/standard/database/__init__.py | 1 - src/modules/standard/info/__init__.py | 12 --- src/modules/standard/info/interfaces.py | 20 ----- src/{core => ocab_core}/__init__.py | 0 src/{core => ocab_core}/database/.gitkeep | 0 src/{core => ocab_core}/example_config.yaml | 0 src/{core => ocab_core}/logger.py | 0 src/{core => ocab_core}/main.py | 18 ++--- .../modules_system/__init__.py | 0 .../modules_system/loaders/__init__.py | 0 .../modules_system/loaders/base.py | 0 .../loaders/fs_loader/FSLoader.py | 11 +-- .../loaders/fs_loader/__init__.py | 0 .../loaders/fs_loader/policy.py | 17 ++-- .../unsafe_fs_loader/UnsafeFSLoader.py | 2 +- .../loaders/unsafe_fs_loader/__init__.py | 0 .../modules_system/modules_manager.py | 7 +- .../modules_system/public_api/__init__.py | 1 + .../modules_system/public_api/public_api.py | 54 +++++++++++++ src/{core => ocab_core}/routers.py | 4 +- src/{core => ocab_core}/singleton.py | 3 +- src/{modules => ocab_modules}/__init__.py | 0 .../external/__init__.py | 0 .../external/yandexgpt/__init__.py | 0 .../external/yandexgpt/handlers.py | 7 +- .../external/yandexgpt/info.json | 0 .../external/yandexgpt/routers.py | 2 +- .../external/yandexgpt/yandexgpt.py | 2 +- .../standard/admin/__init__.py | 0 .../standard/admin/handlers.py | 2 +- .../standard/admin/info.json | 0 .../standard/admin/routers.py | 4 +- .../standard/config/__init__.py | 0 .../standard/config/config.py | 0 .../standard/config/info.json | 0 .../standard/config/tests/config.yaml | 0 .../standard/config/tests/test_config.py | 2 +- .../standard/database/README.md | 0 .../standard/database/__init__.py | 5 ++ .../standard/database/db_api.py | 19 +++-- .../standard/database/exceptions.py | 0 .../standard/database/info.json | 0 .../standard/database/models/__init__.py | 0 .../standard/database/models/chat_stats.py | 5 +- .../standard/database/models/chats.py | 5 +- .../standard/database/models/db.py | 3 + .../standard/database/models/messages.py | 5 +- .../standard/database/models/user_stats.py | 5 +- .../standard/database/models/users.py | 5 +- .../standard/database/tests/__init__.py | 0 .../standard/database/tests/database/file | 0 .../standard/database/tests/test_db.py | 0 .../standard/filters/__init__.py | 0 .../standard/filters/filters.py | 6 +- .../standard/filters/info.json | 0 src/ocab_modules/standard/info/__init__.py | 14 ++++ .../standard/info/handlers.py | 77 ++++++++++--------- .../standard/info/info.json | 0 src/ocab_modules/standard/info/interfaces.py | 47 +++++++++++ .../standard/message_processing/__init__.py | 0 .../message_processing/message_api.py | 8 +- .../standard/moderation/__init__.py | 0 .../standard/moderation/info.json | 0 .../standard/moderation/moderation.py | 0 .../standard/roles/__init__.py | 0 .../standard/roles/info.json | 0 .../standard/roles/roles.py | 6 +- .../standard/roles/tests/__init__.py | 0 .../standard/roles/tests/config.yaml | 0 .../standard/roles/tests/test_roles.py | 0 .../standard/welcome/__init__.py | 0 .../standard/welcome/handlers.py | 12 ++- .../standard/welcome/info.json | 0 .../standard/welcome/routers.py | 2 +- .../standard/welcome/welcome.py | 0 81 files changed, 261 insertions(+), 163 deletions(-) create mode 100644 docs/MODULES-SPEC.md delete mode 100644 src/core/modules_system/public_api/__init__.py delete mode 100644 src/core/modules_system/public_api/public_api.py delete mode 100644 src/modules/standard/database/__init__.py delete mode 100644 src/modules/standard/info/__init__.py delete mode 100644 src/modules/standard/info/interfaces.py rename src/{core => ocab_core}/__init__.py (100%) rename src/{core => ocab_core}/database/.gitkeep (100%) rename src/{core => ocab_core}/example_config.yaml (100%) rename src/{core => ocab_core}/logger.py (100%) rename src/{core => ocab_core}/main.py (62%) rename src/{core => ocab_core}/modules_system/__init__.py (100%) rename src/{core => ocab_core}/modules_system/loaders/__init__.py (100%) rename src/{core => ocab_core}/modules_system/loaders/base.py (100%) rename src/{core => ocab_core}/modules_system/loaders/fs_loader/FSLoader.py (85%) rename src/{core => ocab_core}/modules_system/loaders/fs_loader/__init__.py (100%) rename src/{core => ocab_core}/modules_system/loaders/fs_loader/policy.py (91%) rename src/{core => ocab_core}/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py (95%) rename src/{core => ocab_core}/modules_system/loaders/unsafe_fs_loader/__init__.py (100%) rename src/{core => ocab_core}/modules_system/modules_manager.py (83%) create mode 100644 src/ocab_core/modules_system/public_api/__init__.py create mode 100644 src/ocab_core/modules_system/public_api/public_api.py rename src/{core => ocab_core}/routers.py (72%) rename src/{core => ocab_core}/singleton.py (84%) rename src/{modules => ocab_modules}/__init__.py (100%) rename src/{modules => ocab_modules}/external/__init__.py (100%) rename src/{modules => ocab_modules}/external/yandexgpt/__init__.py (100%) rename src/{modules => ocab_modules}/external/yandexgpt/handlers.py (79%) rename src/{modules => ocab_modules}/external/yandexgpt/info.json (100%) rename src/{modules => ocab_modules}/external/yandexgpt/routers.py (84%) rename src/{modules => ocab_modules}/external/yandexgpt/yandexgpt.py (99%) rename src/{modules => ocab_modules}/standard/admin/__init__.py (100%) rename src/{modules => ocab_modules}/standard/admin/handlers.py (96%) rename src/{modules => ocab_modules}/standard/admin/info.json (100%) rename src/{modules => ocab_modules}/standard/admin/routers.py (87%) rename src/{modules => ocab_modules}/standard/config/__init__.py (100%) rename src/{modules => ocab_modules}/standard/config/config.py (100%) rename src/{modules => ocab_modules}/standard/config/info.json (100%) rename src/{modules => ocab_modules}/standard/config/tests/config.yaml (100%) rename src/{modules => ocab_modules}/standard/config/tests/test_config.py (96%) rename src/{modules => ocab_modules}/standard/database/README.md (100%) create mode 100644 src/ocab_modules/standard/database/__init__.py rename src/{modules => ocab_modules}/standard/database/db_api.py (95%) rename src/{modules => ocab_modules}/standard/database/exceptions.py (100%) rename src/{modules => ocab_modules}/standard/database/info.json (100%) rename src/{modules => ocab_modules}/standard/database/models/__init__.py (100%) rename src/{modules => ocab_modules}/standard/database/models/chat_stats.py (69%) rename src/{modules => ocab_modules}/standard/database/models/chats.py (69%) create mode 100644 src/ocab_modules/standard/database/models/db.py rename src/{modules => ocab_modules}/standard/database/models/messages.py (80%) rename src/{modules => ocab_modules}/standard/database/models/user_stats.py (73%) rename src/{modules => ocab_modules}/standard/database/models/users.py (79%) rename src/{modules => ocab_modules}/standard/database/tests/__init__.py (100%) rename src/{modules => ocab_modules}/standard/database/tests/database/file (100%) rename src/{modules => ocab_modules}/standard/database/tests/test_db.py (100%) rename src/{modules => ocab_modules}/standard/filters/__init__.py (100%) rename src/{modules => ocab_modules}/standard/filters/filters.py (87%) rename src/{modules => ocab_modules}/standard/filters/info.json (100%) create mode 100644 src/ocab_modules/standard/info/__init__.py rename src/{modules => ocab_modules}/standard/info/handlers.py (64%) rename src/{modules => ocab_modules}/standard/info/info.json (100%) create mode 100644 src/ocab_modules/standard/info/interfaces.py rename src/{modules => ocab_modules}/standard/message_processing/__init__.py (100%) rename src/{modules => ocab_modules}/standard/message_processing/message_api.py (96%) rename src/{modules => ocab_modules}/standard/moderation/__init__.py (100%) rename src/{modules => ocab_modules}/standard/moderation/info.json (100%) rename src/{modules => ocab_modules}/standard/moderation/moderation.py (100%) rename src/{modules => ocab_modules}/standard/roles/__init__.py (100%) rename src/{modules => ocab_modules}/standard/roles/info.json (100%) rename src/{modules => ocab_modules}/standard/roles/roles.py (89%) rename src/{modules => ocab_modules}/standard/roles/tests/__init__.py (100%) rename src/{modules => ocab_modules}/standard/roles/tests/config.yaml (100%) rename src/{modules => ocab_modules}/standard/roles/tests/test_roles.py (100%) rename src/{modules => ocab_modules}/standard/welcome/__init__.py (100%) rename src/{modules => ocab_modules}/standard/welcome/handlers.py (91%) rename src/{modules => ocab_modules}/standard/welcome/info.json (100%) rename src/{modules => ocab_modules}/standard/welcome/routers.py (84%) rename src/{modules => ocab_modules}/standard/welcome/welcome.py (100%) diff --git a/.gitignore b/.gitignore index c7200b5..a8c5913 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,5 @@ venv __pycache__ OCAB.db src/paths.json -src/core/config.yaml -src/core/log/**/* +src/ocab_core/config.yaml +src/ocab_core/log/**/* diff --git a/docs/MODULES-SPEC.md b/docs/MODULES-SPEC.md new file mode 100644 index 0000000..c47106c --- /dev/null +++ b/docs/MODULES-SPEC.md @@ -0,0 +1,3 @@ +# Спецификация модулей + +Каждый модуль - это Py diff --git a/scripts/init.py b/scripts/init.py index bd1a675..45d14b7 100644 --- a/scripts/init.py +++ b/scripts/init.py @@ -4,9 +4,9 @@ from pathlib import Path def main(): pwd = Path().cwd() - dir_core = pwd / "src" / "core" - dir_modules_standard = pwd / "src" / "modules" / "standard" - dir_modules_custom = pwd / "src" / "modules" / "custom" + dir_core = pwd / "src" / "ocab_core" + dir_modules_standard = pwd / "src" / "ocab_modules" / "standard" + dir_modules_custom = pwd / "src" / "ocab_modules" / "custom" json = { "core": str(dir_core), diff --git a/src/__init__.py b/src/__init__.py index 7da3d9b..0161b65 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -1,2 +1,2 @@ -import src.core -import src.service +import ocab_core +import service diff --git a/src/core/modules_system/public_api/__init__.py b/src/core/modules_system/public_api/__init__.py deleted file mode 100644 index 448fd81..0000000 --- a/src/core/modules_system/public_api/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .public_api import get_module, register_router diff --git a/src/core/modules_system/public_api/public_api.py b/src/core/modules_system/public_api/public_api.py deleted file mode 100644 index 63a6dd4..0000000 --- a/src/core/modules_system/public_api/public_api.py +++ /dev/null @@ -1,13 +0,0 @@ -from aiogram import Router - -from src.core.singleton import Singleton - - -def register_router(router: Router): - app = Singleton() - app.dp.include_router(router) - - -def get_module(module_id: str): - app = Singleton() - return app.modules_manager.get_by_id(module_id) diff --git a/src/modules/standard/database/__init__.py b/src/modules/standard/database/__init__.py deleted file mode 100644 index fa2df97..0000000 --- a/src/modules/standard/database/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import db_api, models diff --git a/src/modules/standard/info/__init__.py b/src/modules/standard/info/__init__.py deleted file mode 100644 index db0066a..0000000 --- a/src/modules/standard/info/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from aiogram import F, Router - -from src.core.modules_system.public_api import register_router - -from .handlers import get_chat_info, get_user_info - -router = Router() - -router.message.register(get_user_info, F.text.startswith("/info")) -router.message.register(get_chat_info, F.text.startswith("/chatinfo")) - -register_router(router) diff --git a/src/modules/standard/info/interfaces.py b/src/modules/standard/info/interfaces.py deleted file mode 100644 index f1bec6b..0000000 --- a/src/modules/standard/info/interfaces.py +++ /dev/null @@ -1,20 +0,0 @@ -class IRoles: - user: str - moderator: str - admin: str - bot: str - - def __init__(self): - pass - - async def check_admin_permission(self, user_id: int) -> bool: - pass - - async def check_moderator_permission(self, user_id) -> bool: - pass - - async def get_role_name(self, role_id) -> str: - pass - - async def get_user_permission(self, user_id) -> str | None: - pass diff --git a/src/core/__init__.py b/src/ocab_core/__init__.py similarity index 100% rename from src/core/__init__.py rename to src/ocab_core/__init__.py diff --git a/src/core/database/.gitkeep b/src/ocab_core/database/.gitkeep similarity index 100% rename from src/core/database/.gitkeep rename to src/ocab_core/database/.gitkeep diff --git a/src/core/example_config.yaml b/src/ocab_core/example_config.yaml similarity index 100% rename from src/core/example_config.yaml rename to src/ocab_core/example_config.yaml diff --git a/src/core/logger.py b/src/ocab_core/logger.py similarity index 100% rename from src/core/logger.py rename to src/ocab_core/logger.py diff --git a/src/core/main.py b/src/ocab_core/main.py similarity index 62% rename from src/core/main.py rename to src/ocab_core/main.py index 2aa86df..a573edc 100644 --- a/src/core/main.py +++ b/src/ocab_core/main.py @@ -3,14 +3,13 @@ import traceback from aiogram import Bot, Dispatcher -from src.core.logger import setup_logger -from src.core.modules_system import ModulesManager -from src.core.modules_system.loaders import FSLoader -from src.core.modules_system.loaders.unsafe_fs_loader import UnsafeFSLoader -from src.core.singleton import Singleton -from src.modules.standard.config.config import get_telegram_token -from src.modules.standard.database.db_api import connect_database, create_tables -from src.service import paths +from ocab_core.logger import setup_logger +from ocab_core.modules_system import ModulesManager +from ocab_core.modules_system.loaders import FSLoader +from ocab_core.modules_system.loaders.unsafe_fs_loader import UnsafeFSLoader +from ocab_core.singleton import Singleton +from ocab_modules.standard.config.config import get_telegram_token +from service import paths bot_modules = [ UnsafeFSLoader(f"{paths.modules_standard}/config"), @@ -29,9 +28,6 @@ async def main(): try: bot = Bot(token=get_telegram_token()) - database, path = connect_database() - database.connect() - create_tables(database) app.dp = Dispatcher() app.modules_manager = ModulesManager() diff --git a/src/core/modules_system/__init__.py b/src/ocab_core/modules_system/__init__.py similarity index 100% rename from src/core/modules_system/__init__.py rename to src/ocab_core/modules_system/__init__.py diff --git a/src/core/modules_system/loaders/__init__.py b/src/ocab_core/modules_system/loaders/__init__.py similarity index 100% rename from src/core/modules_system/loaders/__init__.py rename to src/ocab_core/modules_system/loaders/__init__.py diff --git a/src/core/modules_system/loaders/base.py b/src/ocab_core/modules_system/loaders/base.py similarity index 100% rename from src/core/modules_system/loaders/base.py rename to src/ocab_core/modules_system/loaders/base.py diff --git a/src/core/modules_system/loaders/fs_loader/FSLoader.py b/src/ocab_core/modules_system/loaders/fs_loader/FSLoader.py similarity index 85% rename from src/core/modules_system/loaders/fs_loader/FSLoader.py rename to src/ocab_core/modules_system/loaders/fs_loader/FSLoader.py index 74bd930..4bd06c4 100644 --- a/src/core/modules_system/loaders/fs_loader/FSLoader.py +++ b/src/ocab_core/modules_system/loaders/fs_loader/FSLoader.py @@ -3,12 +3,12 @@ from pathlib import Path from RestrictedPython import compile_restricted_exec -from src.core.modules_system.loaders.fs_loader.policy import ( +from ocab_core.modules_system.loaders.fs_loader.policy import ( ALLOWED_IMPORTS, BUILTINS, RestrictedPythonPolicy, ) -from src.core.modules_system.loaders.unsafe_fs_loader import UnsafeFSLoader +from ocab_core.modules_system.loaders.unsafe_fs_loader import UnsafeFSLoader class FSLoader(UnsafeFSLoader): @@ -48,11 +48,12 @@ class FSLoader(UnsafeFSLoader): return file_path def _hook_import(self, name: str, *args, **kwargs): - if name in ALLOWED_IMPORTS: - return ALLOWED_IMPORTS[name] + for allowed in ALLOWED_IMPORTS: + if name == allowed or name.startswith(f"{allowed}."): + return __import__(name, *args, **kwargs) # TODO: allow only public api for modules - if name.startswith("src."): + if name.startswith("ocab_core."): return __import__(name, *args, **kwargs) module_file_path = self._resolve_module_from_path(name) diff --git a/src/core/modules_system/loaders/fs_loader/__init__.py b/src/ocab_core/modules_system/loaders/fs_loader/__init__.py similarity index 100% rename from src/core/modules_system/loaders/fs_loader/__init__.py rename to src/ocab_core/modules_system/loaders/fs_loader/__init__.py diff --git a/src/core/modules_system/loaders/fs_loader/policy.py b/src/ocab_core/modules_system/loaders/fs_loader/policy.py similarity index 91% rename from src/core/modules_system/loaders/fs_loader/policy.py rename to src/ocab_core/modules_system/loaders/fs_loader/policy.py index 0b86e6e..edf3f91 100644 --- a/src/core/modules_system/loaders/fs_loader/policy.py +++ b/src/ocab_core/modules_system/loaders/fs_loader/policy.py @@ -1,9 +1,6 @@ -import typing -import warnings from _ast import AnnAssign from typing import Any -import aiogram from RestrictedPython import ( RestrictingNodeTransformer, limited_builtins, @@ -11,7 +8,6 @@ from RestrictedPython import ( utility_builtins, ) from RestrictedPython.Eval import default_guarded_getitem -from RestrictedPython.Guards import full_write_guard class RestrictedPythonPolicy(RestrictingNodeTransformer): @@ -75,18 +71,19 @@ def _metaclass(name, bases, dict): return ob -ALLOWED_IMPORTS = { - "typing": typing, - "aiogram": aiogram, - "warnings": warnings, -} +ALLOWED_IMPORTS = [ + "typing", + "aiogram", + "warnings", +] BUILTINS = safe_builtins.copy() BUILTINS.update(utility_builtins) BUILTINS.update(limited_builtins) BUILTINS["__metaclass__"] = _metaclass BUILTINS["_getitem_"] = default_guarded_getitem -BUILTINS["_write_"] = full_write_guard +# BUILTINS["_write_"] = full_write_guard +BUILTINS["staticmethod"] = staticmethod class GuardedDictType: diff --git a/src/core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py b/src/ocab_core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py similarity index 95% rename from src/core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py rename to src/ocab_core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py index aac9f58..42b4487 100644 --- a/src/core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py +++ b/src/ocab_core/modules_system/loaders/unsafe_fs_loader/UnsafeFSLoader.py @@ -3,7 +3,7 @@ import os import sys from pathlib import Path -from src.core.modules_system.loaders.base import AbstractLoader, ModuleInfo +from ocab_core.modules_system.loaders.base import AbstractLoader, ModuleInfo class UnsafeFSLoader(AbstractLoader): diff --git a/src/core/modules_system/loaders/unsafe_fs_loader/__init__.py b/src/ocab_core/modules_system/loaders/unsafe_fs_loader/__init__.py similarity index 100% rename from src/core/modules_system/loaders/unsafe_fs_loader/__init__.py rename to src/ocab_core/modules_system/loaders/unsafe_fs_loader/__init__.py diff --git a/src/core/modules_system/modules_manager.py b/src/ocab_core/modules_system/modules_manager.py similarity index 83% rename from src/core/modules_system/modules_manager.py rename to src/ocab_core/modules_system/modules_manager.py index 7ea479e..ec79269 100644 --- a/src/core/modules_system/modules_manager.py +++ b/src/ocab_core/modules_system/modules_manager.py @@ -1,4 +1,4 @@ -from src.core.modules_system.loaders.base import AbstractLoader +from ocab_core.modules_system.loaders.base import AbstractLoader class ModulesManager: @@ -9,13 +9,14 @@ class ModulesManager: info = loader.info() module = loader.load() - print(module) - self.modules[info.id] = { "info": info, "module": module, } + if hasattr(module, "module_init"): + module.module_init() + def get_by_id(self, module_id: str): if module_id not in self.modules: raise Exception(f"Module with id {module_id} not loaded") diff --git a/src/ocab_core/modules_system/public_api/__init__.py b/src/ocab_core/modules_system/public_api/__init__.py new file mode 100644 index 0000000..d1d08f6 --- /dev/null +++ b/src/ocab_core/modules_system/public_api/__init__.py @@ -0,0 +1 @@ +from .public_api import Storage, get_module, register_router diff --git a/src/ocab_core/modules_system/public_api/public_api.py b/src/ocab_core/modules_system/public_api/public_api.py new file mode 100644 index 0000000..8f7e235 --- /dev/null +++ b/src/ocab_core/modules_system/public_api/public_api.py @@ -0,0 +1,54 @@ +import types +from typing import Any, Tuple, Union + +from aiogram import Router + +from ocab_core.singleton import Singleton + + +def register_router(router: Router): + app = Singleton() + app.dp.include_router(router) + + +def get_module( + module_id: str, paths=None +) -> Union[types.ModuleType, Union[Any, None], Tuple[Union[Any, None], ...]]: + app = Singleton() + module = app.modules_manager.get_by_id(module_id) + + if paths is None: + return module + + if isinstance(paths, str): + paths = [paths] + + results = [] + + for path in paths: + current_obj = module + try: + parts = path.split(".") + for part in parts: + current_obj = getattr(current_obj, part) + results.append(current_obj) + except AttributeError: + results.append(None) + + if len(results) == 1: + return results[0] + else: + return tuple(results) + + +class Storage: + + @staticmethod + def set(key: str, value: Any): + storage = Singleton().storage + storage[key] = value + + @staticmethod + def get(key: str): + storage = Singleton().storage + return storage.get(key) diff --git a/src/core/routers.py b/src/ocab_core/routers.py similarity index 72% rename from src/core/routers.py rename to src/ocab_core/routers.py index e3bfcc8..198a9e0 100644 --- a/src/core/routers.py +++ b/src/ocab_core/routers.py @@ -1,9 +1,9 @@ from aiogram import Dispatcher -from src.modules.standard.admin.routers import router as admin_router +from src.ocab_modules.standard.admin.routers import router as admin_router # from src.modules.standard.info.routers import router as info_router -from src.modules.standard.message_processing.message_api import ( +from src.ocab_modules.standard.message_processing.message_api import ( router as process_message, ) diff --git a/src/core/singleton.py b/src/ocab_core/singleton.py similarity index 84% rename from src/core/singleton.py rename to src/ocab_core/singleton.py index 45e56d4..51d2003 100644 --- a/src/core/singleton.py +++ b/src/ocab_core/singleton.py @@ -1,6 +1,6 @@ from aiogram import Dispatcher -from src.core.modules_system import ModulesManager +from ocab_core.modules_system import ModulesManager class SingletonMeta(type): @@ -16,3 +16,4 @@ class SingletonMeta(type): class Singleton(metaclass=SingletonMeta): dp: Dispatcher = None modules_manager: ModulesManager = None + storage = dict() diff --git a/src/modules/__init__.py b/src/ocab_modules/__init__.py similarity index 100% rename from src/modules/__init__.py rename to src/ocab_modules/__init__.py diff --git a/src/modules/external/__init__.py b/src/ocab_modules/external/__init__.py similarity index 100% rename from src/modules/external/__init__.py rename to src/ocab_modules/external/__init__.py diff --git a/src/modules/external/yandexgpt/__init__.py b/src/ocab_modules/external/yandexgpt/__init__.py similarity index 100% rename from src/modules/external/yandexgpt/__init__.py rename to src/ocab_modules/external/yandexgpt/__init__.py diff --git a/src/modules/external/yandexgpt/handlers.py b/src/ocab_modules/external/yandexgpt/handlers.py similarity index 79% rename from src/modules/external/yandexgpt/handlers.py rename to src/ocab_modules/external/yandexgpt/handlers.py index f8c8e4a..47b4255 100644 --- a/src/modules/external/yandexgpt/handlers.py +++ b/src/ocab_modules/external/yandexgpt/handlers.py @@ -4,14 +4,13 @@ import asyncio from aiogram import Bot from aiogram.types import Message -from src.core.logger import log -from src.modules.external.yandexgpt.yandexgpt import * -from src.modules.standard.config.config import ( +from ocab_modules.external.yandexgpt.yandexgpt import * +from ocab_modules.standard.config.config import ( get_yandexgpt_catalog_id, get_yandexgpt_prompt, get_yandexgpt_token, ) -from src.modules.standard.database.db_api import add_message +from ocab_modules.standard.database.db_api import add_message async def answer_to_message(message: Message, bot: Bot): diff --git a/src/modules/external/yandexgpt/info.json b/src/ocab_modules/external/yandexgpt/info.json similarity index 100% rename from src/modules/external/yandexgpt/info.json rename to src/ocab_modules/external/yandexgpt/info.json diff --git a/src/modules/external/yandexgpt/routers.py b/src/ocab_modules/external/yandexgpt/routers.py similarity index 84% rename from src/modules/external/yandexgpt/routers.py rename to src/ocab_modules/external/yandexgpt/routers.py index 6e2e0be..66c4230 100644 --- a/src/modules/external/yandexgpt/routers.py +++ b/src/ocab_modules/external/yandexgpt/routers.py @@ -1,7 +1,7 @@ # flake8: noqa from aiogram import F, Router -from src.modules.external.yandexgpt.handlers import answer_to_message +from src.ocab_modules.external.yandexgpt.handlers import answer_to_message router = Router() # Если сообщение содержит в начале текст "Гномик" или "гномик" или отвечает на сообщение бота, то вызывается функция answer_to_message diff --git a/src/modules/external/yandexgpt/yandexgpt.py b/src/ocab_modules/external/yandexgpt/yandexgpt.py similarity index 99% rename from src/modules/external/yandexgpt/yandexgpt.py rename to src/ocab_modules/external/yandexgpt/yandexgpt.py index 1d726d6..28bc195 100644 --- a/src/modules/external/yandexgpt/yandexgpt.py +++ b/src/ocab_modules/external/yandexgpt/yandexgpt.py @@ -5,7 +5,7 @@ import json import aiohttp import requests -from src.core.logger import log +from ocab_core.logger import log from ...standard.config.config import * from ...standard.database import * diff --git a/src/modules/standard/admin/__init__.py b/src/ocab_modules/standard/admin/__init__.py similarity index 100% rename from src/modules/standard/admin/__init__.py rename to src/ocab_modules/standard/admin/__init__.py diff --git a/src/modules/standard/admin/handlers.py b/src/ocab_modules/standard/admin/handlers.py similarity index 96% rename from src/modules/standard/admin/handlers.py rename to src/ocab_modules/standard/admin/handlers.py index bed369e..bcf3eeb 100644 --- a/src/modules/standard/admin/handlers.py +++ b/src/ocab_modules/standard/admin/handlers.py @@ -4,7 +4,7 @@ import time from aiogram import Bot from aiogram.types import Message -from src.modules.standard.config.config import get_default_chat_tag +from src.ocab_modules.standard.config.config import get_default_chat_tag async def delete_message(message: Message, bot: Bot): diff --git a/src/modules/standard/admin/info.json b/src/ocab_modules/standard/admin/info.json similarity index 100% rename from src/modules/standard/admin/info.json rename to src/ocab_modules/standard/admin/info.json diff --git a/src/modules/standard/admin/routers.py b/src/ocab_modules/standard/admin/routers.py similarity index 87% rename from src/modules/standard/admin/routers.py rename to src/ocab_modules/standard/admin/routers.py index 3d9fcd8..40115fb 100644 --- a/src/modules/standard/admin/routers.py +++ b/src/ocab_modules/standard/admin/routers.py @@ -1,13 +1,13 @@ # flake8: noqa from aiogram import F, Router -from src.modules.standard.admin.handlers import ( +from src.ocab_modules.standard.admin.handlers import ( chat_not_in_approve_list, delete_message, error_access, get_chat_id, ) -from src.modules.standard.filters.filters import ( +from src.ocab_modules.standard.filters.filters import ( ChatModerOrAdminFilter, ChatNotInApproveFilter, ) diff --git a/src/modules/standard/config/__init__.py b/src/ocab_modules/standard/config/__init__.py similarity index 100% rename from src/modules/standard/config/__init__.py rename to src/ocab_modules/standard/config/__init__.py diff --git a/src/modules/standard/config/config.py b/src/ocab_modules/standard/config/config.py similarity index 100% rename from src/modules/standard/config/config.py rename to src/ocab_modules/standard/config/config.py diff --git a/src/modules/standard/config/info.json b/src/ocab_modules/standard/config/info.json similarity index 100% rename from src/modules/standard/config/info.json rename to src/ocab_modules/standard/config/info.json diff --git a/src/modules/standard/config/tests/config.yaml b/src/ocab_modules/standard/config/tests/config.yaml similarity index 100% rename from src/modules/standard/config/tests/config.yaml rename to src/ocab_modules/standard/config/tests/config.yaml diff --git a/src/modules/standard/config/tests/test_config.py b/src/ocab_modules/standard/config/tests/test_config.py similarity index 96% rename from src/modules/standard/config/tests/test_config.py rename to src/ocab_modules/standard/config/tests/test_config.py index 011d5c1..cf17556 100644 --- a/src/modules/standard/config/tests/test_config.py +++ b/src/ocab_modules/standard/config/tests/test_config.py @@ -1,6 +1,6 @@ import unittest -from src.modules.standard.config.config import get_config +from src.ocab_modules.standard.config.config import get_config yaml_load = get_config(is_test=True) diff --git a/src/modules/standard/database/README.md b/src/ocab_modules/standard/database/README.md similarity index 100% rename from src/modules/standard/database/README.md rename to src/ocab_modules/standard/database/README.md diff --git a/src/ocab_modules/standard/database/__init__.py b/src/ocab_modules/standard/database/__init__.py new file mode 100644 index 0000000..7daa72d --- /dev/null +++ b/src/ocab_modules/standard/database/__init__.py @@ -0,0 +1,5 @@ +from . import db_api, models + + +def module_init(): + db_api.connect_database() diff --git a/src/modules/standard/database/db_api.py b/src/ocab_modules/standard/database/db_api.py similarity index 95% rename from src/modules/standard/database/db_api.py rename to src/ocab_modules/standard/database/db_api.py index ab181d9..fc76455 100644 --- a/src/modules/standard/database/db_api.py +++ b/src/ocab_modules/standard/database/db_api.py @@ -6,6 +6,7 @@ from src.service import paths from .exceptions import MissingModuleName, NotExpectedModuleName from .models.chat_stats import ChatStats from .models.chats import Chats +from .models.db import database_proxy from .models.messages import Messages from .models.user_stats import UserStats from .models.users import Users @@ -21,15 +22,12 @@ def connect_database(is_test: bool = False, module: str | None = None): raise NotExpectedModuleName() db_path = f"{paths.core}/database" - # WTF????? - _database = pw.SqliteDatabase(f"{db_path}/OCAB.db") - Chats._meta.database = _database - Messages._meta.database = _database - Users._meta.database = _database - UserStats._meta.database = _database - ChatStats._meta.database = _database + database = pw.SqliteDatabase(f"{db_path}/OCAB.db") + database_proxy.initialize(database) + database.connect() + create_tables(database) - return _database, f"{db_path}/OCAB.db" + return database, f"{db_path}/OCAB.db" def create_tables(db: pw.SqliteDatabase): @@ -140,7 +138,7 @@ def get_chat_all_stat(chat_id): # Работа с таблицей пользователей -def get_user(user_id): +def get_user(user_id) -> Users | None: return Users.get_or_none(Users.id == user_id) @@ -198,7 +196,8 @@ def change_user_role(user_id, new_user_role): def get_message(message_chat_id, message_id): return Messages.get_or_none( - Messages.message_chat_id == message_chat_id, Messages.message_id == message_id + Messages.message_chat_id == message_chat_id, + Messages.message_id == message_id, ) diff --git a/src/modules/standard/database/exceptions.py b/src/ocab_modules/standard/database/exceptions.py similarity index 100% rename from src/modules/standard/database/exceptions.py rename to src/ocab_modules/standard/database/exceptions.py diff --git a/src/modules/standard/database/info.json b/src/ocab_modules/standard/database/info.json similarity index 100% rename from src/modules/standard/database/info.json rename to src/ocab_modules/standard/database/info.json diff --git a/src/modules/standard/database/models/__init__.py b/src/ocab_modules/standard/database/models/__init__.py similarity index 100% rename from src/modules/standard/database/models/__init__.py rename to src/ocab_modules/standard/database/models/__init__.py diff --git a/src/modules/standard/database/models/chat_stats.py b/src/ocab_modules/standard/database/models/chat_stats.py similarity index 69% rename from src/modules/standard/database/models/chat_stats.py rename to src/ocab_modules/standard/database/models/chat_stats.py index 1f62601..b681407 100644 --- a/src/modules/standard/database/models/chat_stats.py +++ b/src/ocab_modules/standard/database/models/chat_stats.py @@ -1,8 +1,11 @@ import peewee as pw +from .db import database_proxy + class ChatStats(pw.Model): - class Meta: ... + class Meta: + database = database_proxy chat_id = pw.IntegerField(null=False) date = pw.DateField(null=False) diff --git a/src/modules/standard/database/models/chats.py b/src/ocab_modules/standard/database/models/chats.py similarity index 69% rename from src/modules/standard/database/models/chats.py rename to src/ocab_modules/standard/database/models/chats.py index 8e2dd24..f47cd8b 100644 --- a/src/modules/standard/database/models/chats.py +++ b/src/ocab_modules/standard/database/models/chats.py @@ -1,8 +1,11 @@ import peewee as pw +from .db import database_proxy + class Chats(pw.Model): - class Meta: ... + class Meta: + database = database_proxy chat_name = pw.CharField(null=False) chat_type = pw.IntegerField(null=False, default=10) diff --git a/src/ocab_modules/standard/database/models/db.py b/src/ocab_modules/standard/database/models/db.py new file mode 100644 index 0000000..cc1f8f7 --- /dev/null +++ b/src/ocab_modules/standard/database/models/db.py @@ -0,0 +1,3 @@ +from peewee import DatabaseProxy + +database_proxy = DatabaseProxy() diff --git a/src/modules/standard/database/models/messages.py b/src/ocab_modules/standard/database/models/messages.py similarity index 80% rename from src/modules/standard/database/models/messages.py rename to src/ocab_modules/standard/database/models/messages.py index 926b58d..c532b0d 100644 --- a/src/modules/standard/database/models/messages.py +++ b/src/ocab_modules/standard/database/models/messages.py @@ -1,8 +1,11 @@ import peewee as pw +from .db import database_proxy + class Messages(pw.Model): - class Meta: ... + class Meta: + database = database_proxy message_chat_id = pw.IntegerField(null=False) message_id = pw.IntegerField(null=False) diff --git a/src/modules/standard/database/models/user_stats.py b/src/ocab_modules/standard/database/models/user_stats.py similarity index 73% rename from src/modules/standard/database/models/user_stats.py rename to src/ocab_modules/standard/database/models/user_stats.py index e656da4..e0e96f2 100644 --- a/src/modules/standard/database/models/user_stats.py +++ b/src/ocab_modules/standard/database/models/user_stats.py @@ -1,8 +1,11 @@ import peewee as pw +from .db import database_proxy + class UserStats(pw.Model): - class Meta: ... + class Meta: + database = database_proxy chat_id = pw.IntegerField(null=False) user_id = pw.IntegerField(null=False) diff --git a/src/modules/standard/database/models/users.py b/src/ocab_modules/standard/database/models/users.py similarity index 79% rename from src/modules/standard/database/models/users.py rename to src/ocab_modules/standard/database/models/users.py index 27a7fe1..2dfd407 100644 --- a/src/modules/standard/database/models/users.py +++ b/src/ocab_modules/standard/database/models/users.py @@ -1,8 +1,11 @@ import peewee as pw +from .db import database_proxy + class Users(pw.Model): - class Meta: ... + class Meta: + database = database_proxy user_tag = pw.CharField(null=True) user_name = pw.CharField(null=False) # до 255 символов diff --git a/src/modules/standard/database/tests/__init__.py b/src/ocab_modules/standard/database/tests/__init__.py similarity index 100% rename from src/modules/standard/database/tests/__init__.py rename to src/ocab_modules/standard/database/tests/__init__.py diff --git a/src/modules/standard/database/tests/database/file b/src/ocab_modules/standard/database/tests/database/file similarity index 100% rename from src/modules/standard/database/tests/database/file rename to src/ocab_modules/standard/database/tests/database/file diff --git a/src/modules/standard/database/tests/test_db.py b/src/ocab_modules/standard/database/tests/test_db.py similarity index 100% rename from src/modules/standard/database/tests/test_db.py rename to src/ocab_modules/standard/database/tests/test_db.py diff --git a/src/modules/standard/filters/__init__.py b/src/ocab_modules/standard/filters/__init__.py similarity index 100% rename from src/modules/standard/filters/__init__.py rename to src/ocab_modules/standard/filters/__init__.py diff --git a/src/modules/standard/filters/filters.py b/src/ocab_modules/standard/filters/filters.py similarity index 87% rename from src/modules/standard/filters/filters.py rename to src/ocab_modules/standard/filters/filters.py index ecdaef7..5de5e29 100644 --- a/src/modules/standard/filters/filters.py +++ b/src/ocab_modules/standard/filters/filters.py @@ -2,9 +2,9 @@ from aiogram import Bot from aiogram.filters import BaseFilter from aiogram.types import Message -from src.core.logger import log -from src.modules.standard.config.config import get_aproved_chat_id -from src.modules.standard.roles.roles import Roles +from ocab_core.logger import log +from ocab_modules.standard.config.config import get_aproved_chat_id +from ocab_modules.standard.roles.roles import Roles class ChatModerOrAdminFilter(BaseFilter): diff --git a/src/modules/standard/filters/info.json b/src/ocab_modules/standard/filters/info.json similarity index 100% rename from src/modules/standard/filters/info.json rename to src/ocab_modules/standard/filters/info.json diff --git a/src/ocab_modules/standard/info/__init__.py b/src/ocab_modules/standard/info/__init__.py new file mode 100644 index 0000000..69d0151 --- /dev/null +++ b/src/ocab_modules/standard/info/__init__.py @@ -0,0 +1,14 @@ +from aiogram import F, Router + +from ocab_core.modules_system.public_api import register_router + +from .handlers import get_chat_info, get_user_info + + +def module_init(): + router = Router() + + router.message.register(get_user_info, F.text.startswith("/info")) + router.message.register(get_chat_info, F.text.startswith("/chatinfo")) + + register_router(router) diff --git a/src/modules/standard/info/handlers.py b/src/ocab_modules/standard/info/handlers.py similarity index 64% rename from src/modules/standard/info/handlers.py rename to src/ocab_modules/standard/info/handlers.py index d76aa8f..bb10bb6 100644 --- a/src/modules/standard/info/handlers.py +++ b/src/ocab_modules/standard/info/handlers.py @@ -1,60 +1,65 @@ # flake8: noqa -from typing import Type +from typing import Any, Type from aiogram import Bot +from aiogram.types import Message -from src.core.logger import log -from src.core.modules_system.public_api import get_module -from src.modules.standard.database.db_api import ( - Message, - get_chat_all_stat, - get_message_ai_model, - get_user, - get_user_all_stats, - get_user_id, - get_user_name, - get_user_rep, - get_user_role, - get_user_tag, +from ocab_core.logger import log +from ocab_core.modules_system.public_api import get_module + +from .interfaces import IDbApi, IRoles + +# from src.modules.standard.database import db_api + + +db_api: Type[IDbApi] = get_module( + "standard.database", + "db_api", ) -from .interfaces import IRoles +# db_api.init_db_connection() -Roles: Type[IRoles] = get_module("standard.roles").Roles +Roles: Type[IRoles] = get_module("standard.roles", "Roles") async def get_info_answer_by_id(message: Message, bot: Bot, user_id: int): - if get_message_ai_model(message.chat.id, message.message_id) is not None: + ai_model = db_api.get_message_ai_model(message.chat.id, message.message_id) + if ai_model is not None: await message.reply( - "Это сообщение было сгенерировано ботом используя модель: " - + get_message_ai_model(message.chat.id, message.message_id) + "Это сообщение было сгенерировано ботом используя модель: " + ai_model ) - elif user_id == bot.id: + return + + if user_id == bot.id: await message.reply("Это сообщение было отправлено ботом") - elif get_user(user_id) is None: + return + + user = db_api.get_user(user_id) + + if user is None: await message.reply("Пользователь не найден") - # print(get_user(user_id)) - await log(f"Пользователь не найден: {user_id}, {get_user(user_id)}") - else: - roles = Roles() - answer = ( - f"Пользователь: {get_user_name(user_id)}\n" - f"Роль: {await roles.get_role_name(role_id=get_user_role(user_id))}\n" - f"Тег: @{get_user_tag(user_id)}\n" - f"Кол-во сообщений: {get_user_all_stats(user_id)}\n" - f"Репутация: {get_user_rep(user_id)}" - ) - await message.reply(answer) + await log(f"Пользователь не найден: {user_id}, {user}") + return + + roles = Roles() + answer = ( + f"Пользователь: {user.user_name}\n" + f"Роль: {await roles.get_role_name(role_id=user.user_role)}\n" + f"Тег: @{user.user_tag}\n" + f"Кол-во сообщений: {user.user_stats}\n" + f"Репутация: {user.user_rep}" + ) + await message.reply(answer) async def get_user_info(message: Message, bot: Bot): # Проверяем содержимое сообщения, если содержит вторым элементом тег пользователя, то выводим информацию о нем # Если сообщение отвечает на другое сообщение, то выводим информацию о пользователе, на чье сообщение был ответ - # Если это бот то выводим информацию что это бот и какая модель yandexgpt используется + # Если это бот то выводим информацию, что это бот и какая модель yandexgpt используется try: if len(message.text.split()) > 1 and message.text.split()[1].startswith("@"): user_tag = message.text.split()[1][1:] - user_id = get_user_id(user_tag) + user_id = db_api.get_user_id(user_tag) if user_id: await get_info_answer_by_id(message, bot, user_id) else: @@ -77,7 +82,7 @@ async def get_chat_info(message: Message, bot: Bot): answer = ( f"*Название чата:* {message.chat.title}\n" f"*ID чата:* `{message.chat.id}`\n \n" - f"*Суммарное количество сообщений в чате:* {get_chat_all_stat(message.chat.id)}\n" + f"*Суммарное количество сообщений в чате:* {db_api.get_chat_all_stat(message.chat.id)}\n" f"*Количество пользователей в чате:* {await bot.get_chat_member_count(message.chat.id)}\n" f"*Количество администраторов в чате:* {len(await bot.get_chat_administrators(message.chat.id))}" ) diff --git a/src/modules/standard/info/info.json b/src/ocab_modules/standard/info/info.json similarity index 100% rename from src/modules/standard/info/info.json rename to src/ocab_modules/standard/info/info.json diff --git a/src/ocab_modules/standard/info/interfaces.py b/src/ocab_modules/standard/info/interfaces.py new file mode 100644 index 0000000..5bdec30 --- /dev/null +++ b/src/ocab_modules/standard/info/interfaces.py @@ -0,0 +1,47 @@ +from typing import Any + + +class IRoles: + user: str + moderator: str + admin: str + bot: str + + def __init__(self): + pass + + async def check_admin_permission(self, user_id: int) -> bool: + pass + + async def check_moderator_permission(self, user_id) -> bool: + pass + + async def get_role_name(self, role_id) -> str: + pass + + async def get_user_permission(self, user_id) -> str | None: + pass + + +class IUsers: + user_id: int + user_name: str + user_role: int + user_tag: str + user_stats: int + user_rep: int + + +class IDbApi: + + @staticmethod + def get_message_ai_model(message_chat_id: Any, message_id: Any) -> Any | None: + pass + + @staticmethod + def get_user(user_id: int) -> IUsers | None: + pass + + @staticmethod + def get_chat_all_stat(chat_id: int) -> int: + pass diff --git a/src/modules/standard/message_processing/__init__.py b/src/ocab_modules/standard/message_processing/__init__.py similarity index 100% rename from src/modules/standard/message_processing/__init__.py rename to src/ocab_modules/standard/message_processing/__init__.py diff --git a/src/modules/standard/message_processing/message_api.py b/src/ocab_modules/standard/message_processing/message_api.py similarity index 96% rename from src/modules/standard/message_processing/message_api.py rename to src/ocab_modules/standard/message_processing/message_api.py index a1ef218..06b6093 100644 --- a/src/modules/standard/message_processing/message_api.py +++ b/src/ocab_modules/standard/message_processing/message_api.py @@ -2,14 +2,14 @@ from aiogram import Bot, F, Router, types -from src.core.logger import log -from src.modules.external.yandexgpt.handlers import answer_to_message -from src.modules.standard.config.config import ( +from ocab_core.logger import log +from ocab_modules.external.yandexgpt.handlers import answer_to_message +from ocab_modules.standard.config.config import ( get_aproved_chat_id, get_yandexgpt_in_words, get_yandexgpt_start_words, ) -from src.modules.standard.database.db_api import * +from ocab_modules.standard.database.db_api import * async def chat_check(message: types.Message): diff --git a/src/modules/standard/moderation/__init__.py b/src/ocab_modules/standard/moderation/__init__.py similarity index 100% rename from src/modules/standard/moderation/__init__.py rename to src/ocab_modules/standard/moderation/__init__.py diff --git a/src/modules/standard/moderation/info.json b/src/ocab_modules/standard/moderation/info.json similarity index 100% rename from src/modules/standard/moderation/info.json rename to src/ocab_modules/standard/moderation/info.json diff --git a/src/modules/standard/moderation/moderation.py b/src/ocab_modules/standard/moderation/moderation.py similarity index 100% rename from src/modules/standard/moderation/moderation.py rename to src/ocab_modules/standard/moderation/moderation.py diff --git a/src/modules/standard/roles/__init__.py b/src/ocab_modules/standard/roles/__init__.py similarity index 100% rename from src/modules/standard/roles/__init__.py rename to src/ocab_modules/standard/roles/__init__.py diff --git a/src/modules/standard/roles/info.json b/src/ocab_modules/standard/roles/info.json similarity index 100% rename from src/modules/standard/roles/info.json rename to src/ocab_modules/standard/roles/info.json diff --git a/src/modules/standard/roles/roles.py b/src/ocab_modules/standard/roles/roles.py similarity index 89% rename from src/modules/standard/roles/roles.py rename to src/ocab_modules/standard/roles/roles.py index 1f00e1d..88e21c5 100644 --- a/src/modules/standard/roles/roles.py +++ b/src/ocab_modules/standard/roles/roles.py @@ -1,7 +1,7 @@ -from src.core.modules_system.public_api import get_module +from ocab_core.modules_system.public_api import get_module -get_user_role = get_module("standard.database").db_api.get_user_role -config = get_module("standard.config").config +get_user_role = get_module("standard.database", "db_api.get_user_role") +config: dict = get_module("standard.config", "config") class Roles: diff --git a/src/modules/standard/roles/tests/__init__.py b/src/ocab_modules/standard/roles/tests/__init__.py similarity index 100% rename from src/modules/standard/roles/tests/__init__.py rename to src/ocab_modules/standard/roles/tests/__init__.py diff --git a/src/modules/standard/roles/tests/config.yaml b/src/ocab_modules/standard/roles/tests/config.yaml similarity index 100% rename from src/modules/standard/roles/tests/config.yaml rename to src/ocab_modules/standard/roles/tests/config.yaml diff --git a/src/modules/standard/roles/tests/test_roles.py b/src/ocab_modules/standard/roles/tests/test_roles.py similarity index 100% rename from src/modules/standard/roles/tests/test_roles.py rename to src/ocab_modules/standard/roles/tests/test_roles.py diff --git a/src/modules/standard/welcome/__init__.py b/src/ocab_modules/standard/welcome/__init__.py similarity index 100% rename from src/modules/standard/welcome/__init__.py rename to src/ocab_modules/standard/welcome/__init__.py diff --git a/src/modules/standard/welcome/handlers.py b/src/ocab_modules/standard/welcome/handlers.py similarity index 91% rename from src/modules/standard/welcome/handlers.py rename to src/ocab_modules/standard/welcome/handlers.py index 16102b9..caee6bb 100644 --- a/src/modules/standard/welcome/handlers.py +++ b/src/ocab_modules/standard/welcome/handlers.py @@ -9,10 +9,14 @@ from aiogram.types import Message from aiogram.types import inline_keyboard_button as types from aiogram.utils.keyboard import InlineKeyboardBuilder -from src.modules.standard.config.config import get_telegram_check_bot -from src.modules.standard.database.db_api import * -from src.modules.standard.moderation.moderation import ban_user, mute_user, unmute_user -from src.modules.standard.roles.roles import Roles +from src.ocab_modules.standard.config.config import get_telegram_check_bot +from src.ocab_modules.standard.database.db_api import * +from src.ocab_modules.standard.moderation.moderation import ( + ban_user, + mute_user, + unmute_user, +) +from src.ocab_modules.standard.roles.roles import Roles async def create_math_task(): diff --git a/src/modules/standard/welcome/info.json b/src/ocab_modules/standard/welcome/info.json similarity index 100% rename from src/modules/standard/welcome/info.json rename to src/ocab_modules/standard/welcome/info.json diff --git a/src/modules/standard/welcome/routers.py b/src/ocab_modules/standard/welcome/routers.py similarity index 84% rename from src/modules/standard/welcome/routers.py rename to src/ocab_modules/standard/welcome/routers.py index 2afc09f..57546dc 100644 --- a/src/modules/standard/welcome/routers.py +++ b/src/ocab_modules/standard/welcome/routers.py @@ -1,6 +1,6 @@ from aiogram import F, Router -from src.modules.standard.welcome.handlers import check_new_user +from src.ocab_modules.standard.welcome.handlers import check_new_user router = Router() diff --git a/src/modules/standard/welcome/welcome.py b/src/ocab_modules/standard/welcome/welcome.py similarity index 100% rename from src/modules/standard/welcome/welcome.py rename to src/ocab_modules/standard/welcome/welcome.py