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)