diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/Data.py b/Data.py old mode 100644 new mode 100755 diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/akn/Akeno/__init__.py b/akn/Akeno/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/admin.py b/akn/Akeno/admin.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/alive.py b/akn/Akeno/alive.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/bot/Nothing b/akn/Akeno/bot/Nothing old mode 100644 new mode 100755 diff --git a/akn/Akeno/bot/__init__.py b/akn/Akeno/bot/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/bot/bot.py b/akn/Akeno/bot/bot.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/bot/inline.py b/akn/Akeno/bot/inline.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/chatgpt b/akn/Akeno/chatgpt old mode 100644 new mode 100755 diff --git a/akn/Akeno/clone.py b/akn/Akeno/clone.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/emojipremium.py b/akn/Akeno/emojipremium.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/eval.py b/akn/Akeno/eval.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/facebook b/akn/Akeno/facebook old mode 100644 new mode 100755 diff --git a/akn/Akeno/fluxai b/akn/Akeno/fluxai old mode 100644 new mode 100755 diff --git a/akn/Akeno/gban b/akn/Akeno/gban old mode 100644 new mode 100755 diff --git a/akn/Akeno/help.py b/akn/Akeno/help.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/helper/PyroHelpers.py b/akn/Akeno/helper/PyroHelpers.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/helper/__init__.py b/akn/Akeno/helper/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/helper/data.py b/akn/Akeno/helper/data.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/helper/inline.py b/akn/Akeno/helper/inline.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/helper/utility.py b/akn/Akeno/helper/utility.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/id.py b/akn/Akeno/id.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/info.py b/akn/Akeno/info.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/invite.py b/akn/Akeno/invite.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/joinchat.py b/akn/Akeno/joinchat.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/limited.py b/akn/Akeno/limited.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/ping.py b/akn/Akeno/ping.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/pornohub b/akn/Akeno/pornohub old mode 100644 new mode 100755 diff --git a/akn/Akeno/prefixes.py b/akn/Akeno/prefixes.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/purge.py b/akn/Akeno/purge.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/quote.py b/akn/Akeno/quote.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/sticker.py b/akn/Akeno/sticker.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/story.py b/akn/Akeno/story.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/translate.py b/akn/Akeno/translate.py old mode 100644 new mode 100755 diff --git a/akn/Akeno/youtube.py b/akn/Akeno/youtube.py old mode 100644 new mode 100755 diff --git a/akn/AllDownloaderBot/__init__.py b/akn/AllDownloaderBot/__init__.py old mode 100644 new mode 100755 diff --git a/akn/AllDownloaderBot/blacklistchat.py b/akn/AllDownloaderBot/blacklistchat.py old mode 100644 new mode 100755 diff --git a/akn/AllDownloaderBot/broadcast.py b/akn/AllDownloaderBot/broadcast.py old mode 100644 new mode 100755 diff --git a/akn/AllDownloaderBot/main.py b/akn/AllDownloaderBot/main.py old mode 100644 new mode 100755 diff --git a/akn/ApproveBot/__init__.py b/akn/ApproveBot/__init__.py old mode 100644 new mode 100755 diff --git a/akn/ApproveBot/join_request.py b/akn/ApproveBot/join_request.py old mode 100644 new mode 100755 diff --git a/akn/ApproveBot/start.py b/akn/ApproveBot/start.py old mode 100644 new mode 100755 diff --git a/akn/Gemini/__init__.py b/akn/Gemini/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Gemini/gemini.py b/akn/Gemini/gemini.py old mode 100644 new mode 100755 diff --git a/akn/MagicFonts/__init__.py b/akn/MagicFonts/__init__.py old mode 100644 new mode 100755 diff --git a/akn/MagicFonts/commands.py b/akn/MagicFonts/commands.py old mode 100644 new mode 100755 diff --git a/akn/MagicFonts/fonts.py b/akn/MagicFonts/fonts.py old mode 100644 new mode 100755 diff --git a/akn/Meta/__init__.py b/akn/Meta/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Meta/meta_ai.py b/akn/Meta/meta_ai.py old mode 100644 new mode 100755 diff --git a/akn/SessionBot/__init__.py b/akn/SessionBot/__init__.py old mode 100644 new mode 100755 diff --git a/akn/SessionBot/about.py b/akn/SessionBot/about.py old mode 100644 new mode 100755 diff --git a/akn/SessionBot/callbacks.py b/akn/SessionBot/callbacks.py old mode 100644 new mode 100755 diff --git a/akn/SessionBot/generate.py b/akn/SessionBot/generate.py old mode 100644 new mode 100755 diff --git a/akn/SessionBot/start.py b/akn/SessionBot/start.py old mode 100644 new mode 100755 diff --git a/akn/Youtube/__init__.py b/akn/Youtube/__init__.py old mode 100644 new mode 100755 diff --git a/akn/Youtube/youtube.py b/akn/Youtube/youtube.py old mode 100644 new mode 100755 diff --git a/akn/__init__.py b/akn/__init__.py old mode 100644 new mode 100755 diff --git a/akn/__main__.py b/akn/__main__.py old mode 100644 new mode 100755 diff --git a/akn/clientmulti_bot.py b/akn/clientmulti_bot.py old mode 100644 new mode 100755 diff --git a/akn/manage/__init__.py b/akn/manage/__init__.py old mode 100644 new mode 100755 diff --git a/akn/manage/account.py b/akn/manage/account.py old mode 100644 new mode 100755 diff --git a/akn/manage/antiban.py b/akn/manage/antiban.py old mode 100644 new mode 100755 diff --git a/akn/manage/builder_bot.py b/akn/manage/builder_bot.py old mode 100644 new mode 100755 diff --git a/akn/manage/callback.py b/akn/manage/callback.py old mode 100644 new mode 100755 diff --git a/akn/manage/feds b/akn/manage/feds old mode 100644 new mode 100755 diff --git a/akn/manage/nothing b/akn/manage/nothing old mode 100644 new mode 100755 diff --git a/akn/manage/parameter.py b/akn/manage/parameter.py old mode 100644 new mode 100755 diff --git a/akn/nothing b/akn/nothing old mode 100644 new mode 100755 diff --git a/akn/utils/base_sqlite.py b/akn/utils/base_sqlite.py old mode 100644 new mode 100755 diff --git a/akn/utils/chat.py b/akn/utils/chat.py old mode 100644 new mode 100755 diff --git a/akn/utils/database.py b/akn/utils/database.py old mode 100644 new mode 100755 diff --git a/akn/utils/driver.py b/akn/utils/driver.py old mode 100644 new mode 100755 diff --git a/akn/utils/expired_bot.py b/akn/utils/expired_bot.py old mode 100644 new mode 100755 diff --git a/akn/utils/formatter.py b/akn/utils/formatter.py old mode 100644 new mode 100755 diff --git a/akn/utils/gmail_verifed.py b/akn/utils/gmail_verifed.py old mode 100644 new mode 100755 diff --git a/akn/utils/handler.py b/akn/utils/handler.py old mode 100644 new mode 100755 diff --git a/akn/utils/helps.py b/akn/utils/helps.py old mode 100644 new mode 100755 diff --git a/akn/utils/license_checker.py b/akn/utils/license_checker.py old mode 100644 new mode 100755 index 93b115182ed844d0e96d2547c877bde3e818f1e6..2afd7b5897526f1027dd39cc8b5885c267e3e606 --- a/akn/utils/license_checker.py +++ b/akn/utils/license_checker.py @@ -23,6 +23,7 @@ import asyncio import sys from typing import List from akn.clientmulti_bot import * +from akn.utils.version_utils import validate_version from akn.utils.logger import LOGS from traceback import print_exc import traceback @@ -62,11 +63,12 @@ async def client_multi_bot(): async def _safe_bot_launch(bot_func): try: - # --- testing ---- - # if not await validate_license(bot_func.__name__): - # raise LicenseError(f"Invalid license for {bot_func.__name__}") + if not await validate_version(bot_func.__name__): + LOGS.error(f"Version check failed for {bot_func.__name__}") + return False await bot_func() LOGS.info(f"✅ {bot_func.__name__} launched") + return True except asyncio.CancelledError: LOGS.warning(f"🛑 {bot_func.__name__} forced shutdown") except Exception as e: diff --git a/akn/utils/logger.py b/akn/utils/logger.py old mode 100644 new mode 100755 diff --git a/akn/utils/nothing b/akn/utils/nothing old mode 100644 new mode 100755 diff --git a/akn/utils/prefixprem.py b/akn/utils/prefixprem.py old mode 100644 new mode 100755 diff --git a/akn/utils/scripts.py b/akn/utils/scripts.py old mode 100644 new mode 100755 diff --git a/akn/utils/spamwatch.py b/akn/utils/spamwatch.py old mode 100644 new mode 100755 diff --git a/akn/utils/tools.py b/akn/utils/tools.py old mode 100644 new mode 100755 diff --git a/akn/utils/version_utils.py b/akn/utils/version_utils.py new file mode 100755 index 0000000000000000000000000000000000000000..33ffdbd5ee9c5998444d975f0eab00f430e7e216 --- /dev/null +++ b/akn/utils/version_utils.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +####################################################### +# PRIVATE LICENSE NOTICE # +# © 2025 AKN-DEV. All Rights Reserved. # +# # +# This software is licensed under PRIVATE LICENSE. # +# Unauthorized use, modification, distribution, # +# or replication is strictly prohibited. # +# # +# LEGAL OWNER: AKN-DEV TEAM # +# CONTACT: @aknuserbot (Telegram) # +# # +# VIOLATIONS WILL RESULT IN: # +# - Automatic bot termination # +# - Legal action under DMCA/EU Copyright Law # +# - Permanent blacklist from all products # +####################################################### + +import json +from pathlib import Path +from packaging import version +from akn.utils.logger import LOGS +import importlib.metadata +import platform + +def get_version_from_file() -> str: + try: + with open(Path(__file__).parent.parent / "version.json") as f: + return json.load(f)["version"] + except Exception as e: + LOGS.critical(f"Version check failed: {str(e)}") + raise RuntimeError("Could not determine bot version") from e + +def validate_version(bot_name: str) -> bool: + try: + with open(Path(__file__).parent.parent / "version.json") as f: + version_data = json.load(f) + except Exception as e: + raise RuntimeError(f"Failed to load version.json: {str(e)}") + + current_py = platform.python_version() + if version.parse(current_py) < version.parse(version_data["min_python"]): + raise RuntimeError( + f"Python {version_data['min_python']}+ required (found {current_py})" + ) + + bot_requirements = version_data.get("multiple_bot", {}) + if bot_name not in bot_requirements: + raise RuntimeError(f"No version requirements found for {bot_name}") + + required_ver = bot_requirements[bot_name] + current_ver = version_data["version"] + + if not version.parse(current_ver) >= version.parse(required_ver.lstrip(">=")): + raise RuntimeError( + f"{bot_name} requires {required_ver} (current: {current_ver})" + ) + try: + pyro_ver = importlib.metadata.version("kurigram") + if version.parse(pyro_ver) < version.parse("2.1.30"): + LOGS.warning(f"Old Pyrogram version: {pyro_ver}") + except ImportError: + pass + return True + +####################################################### +# DO NOT REMOVE THIS LICENSE NOTICE! # +# This code contains proprietary trade secrets of # +# AKN-DEV. Any removal will result in legal action. # +####################################################### \ No newline at end of file diff --git a/arial.ttf b/arial.ttf old mode 100644 new mode 100755 diff --git a/config.py b/config.py old mode 100644 new mode 100755 diff --git a/cookies.txt b/cookies.txt old mode 100644 new mode 100755 diff --git a/license_private/AknUserbot-License.pdf b/license_private/AknUserbot-License.pdf old mode 100644 new mode 100755 diff --git a/license_private/nothing b/license_private/nothing old mode 100644 new mode 100755 diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 diff --git a/resources/fonts/Montserrat.ttf b/resources/fonts/Montserrat.ttf old mode 100644 new mode 100755 diff --git a/resources/fonts/arial.ttf b/resources/fonts/arial.ttf old mode 100644 new mode 100755 index 7ff88f22869126cc992030f18e0eeff65ec8bbac..fa960f48d5545af1391c0fcb24f223e37f22863e Binary files a/resources/fonts/arial.ttf and b/resources/fonts/arial.ttf differ diff --git a/resources/fonts/default.ttf b/resources/fonts/default.ttf old mode 100644 new mode 100755 diff --git a/resources/fonts/nothing b/resources/fonts/nothing old mode 100644 new mode 100755 diff --git a/secure.py b/secure.py old mode 100644 new mode 100755 diff --git a/server.py b/server.py old mode 100644 new mode 100755 diff --git a/settings.py b/settings.py old mode 100644 new mode 100755 diff --git a/start.sh b/start.sh old mode 100644 new mode 100755 diff --git a/version.json b/version.json new file mode 100755 index 0000000000000000000000000000000000000000..655ad7e5ffa3cae3cc24a1df904172c84cdc2a18 --- /dev/null +++ b/version.json @@ -0,0 +1,13 @@ +{ + "version": "8.5.1", + "min_python": "3.11.11", + "multiple_bot": { + "start_gemini_bot": ">=1.1.2", + "start_magic_bot": ">=1.1.2", + "start_meta_bot": ">=1.1.2", + "start_youtube_bot": ">=1.1.2", + "start_session_bot": ">=1.1.2", + "start_captcha_bot": ">=1.1.2", + "start_all_downloader_bot": ">=1.1.2" + } + } \ No newline at end of file