diff --git a/hikka/langpacks/en.yml b/hikka/langpacks/en.yml index b263948..746111c 100644 --- a/hikka/langpacks/en.yml +++ b/hikka/langpacks/en.yml @@ -518,6 +518,7 @@ loader: clearmodules: "🗑 Clear modules" cancel: "🚫 Cancel" overwrite_module: "😖 This module attempted to override the core one ({})\n\n💡 Don't report it as bug. It's a security measure to prevent replacing core modules with some junk" + scam_module: "😖 The module {name} is a scam, please report it to the support group ({prefix}support)\n\nProtection has stopped its loading." overwrite_command: "😖 This module attempted to override the core command ({}{})\n\n💡 Don't report it as bug. It's a security measure to prevent replacing core modules' commands with some junk" unload_core: "😖 You can't unload core module {}\n\n💡 Don't report it as bug. It's a security measure to prevent replacing core modules with some junk" cannot_unload_lib: "😖 You can't unload library" diff --git a/hikka/langpacks/ru.yml b/hikka/langpacks/ru.yml index fe6e9d7..ba6694a 100644 --- a/hikka/langpacks/ru.yml +++ b/hikka/langpacks/ru.yml @@ -488,6 +488,7 @@ loader: clearmodules: "🗑 Выгрузить модули" cancel: "🚫 Отмена" overwrite_module: "😖 Этот модуль попытался перезаписать встроенный ({})\n\n💡 Это не ошибка, а мера безопасности, требуемая для предотвращения замены встроенных модулей всяким хламом. Не сообщайте о ней в support чате" + scam_module: "😖 Модуль {name} является скамом, сообщите о нём, пожалуйста, в группу поддержки ({prefix}support)\n\nЗащита остановила его загрузку." overwrite_command: "😖 Этот модуль попытался перезаписать встроенную команду ({})\n\n💡 Это не ошибка, а мера безопасности, требуемая для предотвращения замены команд встроенных модулей всяким хламом. Не сообщайте о ней в support чате" unload_core: "😖 Ты не можешь выгрузить встроенный модуль {}\n\n💡 Это не ошибка, а мера безопасности, требуемая для предотвращения замены встроенных модулей всяким хламом. Не сообщайте о ней в support чате" cannot_unload_lib: "😖 Ты не можешь выгрузить библиотеку" diff --git a/hikka/modules/loader.py b/hikka/modules/loader.py index 6f48c35..1b741b7 100644 --- a/hikka/modules/loader.py +++ b/hikka/modules/loader.py @@ -36,6 +36,7 @@ import requests from herokutl.errors.rpcerrorlist import MediaCaptionTooLongError from herokutl.tl.functions.channels import JoinChannelRequest from herokutl.tl.types import Channel, Message, PeerUser +from herokutl.errors.common import ScamDetectionError from .. import loader, main, utils from .._local_storage import RemoteStorage @@ -700,7 +701,7 @@ class LoaderMod(loader.Module): except CoreOverwriteError as e: await core_overwrite(e) return - except loader.LoadError as e: + except (loader.LoadError, ScamDetectionError) as e: with contextlib.suppress(Exception): await self.allmodules.unload_module(instance.__class__.__name__) @@ -708,13 +709,24 @@ class LoaderMod(loader.Module): self.allmodules.modules.remove(instance) if message: - await utils.answer( - message, - ( - "😖" - f" {utils.escape_html(str(e))}" - ), - ) + if isinstance(e, loader.LoadError): + await utils.answer( + message, + ( + "😖" + f" {utils.escape_html(str(e))}" + ), + ) + elif isinstance(e, ScamDetectionError): + await utils.answer( + message, + ( + self.strings('scam_module').format( + name=instance.__class__.__name__, + prefix=self.get_prefix(), + ) + ) + ) return except Exception as e: logger.exception("Loading external module failed due to %s", e) @@ -770,7 +782,7 @@ class LoaderMod(loader.Module): except CoreOverwriteError as e: await core_overwrite(e) return - except loader.LoadError as e: + except (loader.LoadError, ScamDetectionError) as e: with contextlib.suppress(Exception): await self.allmodules.unload_module(instance.__class__.__name__) @@ -778,13 +790,24 @@ class LoaderMod(loader.Module): self.allmodules.modules.remove(instance) if message: - await utils.answer( - message, - ( - "😖" - f" {utils.escape_html(str(e))}" - ), - ) + if isinstance(e, loader.LoadError): + await utils.answer( + message, + ( + "😖" + f" {utils.escape_html(str(e))}" + ), + ) + elif isinstance(e, ScamDetectionError): + await utils.answer( + message, + ( + self.strings('scam_module').format( + name=instance.__class__.__name__, + prefix=self.get_prefix(), + ) + ) + ) return except loader.SelfUnload as e: logger.debug("Unloading %s, because it raised `SelfUnload`", instance)