feat(config): add auto bump and captcha options

This commit is contained in:
2026-08-07 09:04:16 +05:00
parent f76c74ce3f
commit d6d2752341
2 changed files with 37 additions and 2 deletions
+32 -1
View File
@@ -9,6 +9,7 @@ logger = logging.getLogger(__name__)
class ConfigError(Exception):
"""Ошибка валидации конфигурации"""
pass
@@ -46,6 +47,22 @@ class Config:
except FileNotFoundError:
return default_replies
def _load_captcha(self, file_path: str = "storage/captcha.txt"):
default_captcha = (
f"[CENTER][B]Напишите ответ:[/B]\n"
f"сколько будет 20 + 20? [I][COLOR=rgb(80, 80, 78)](Капча меняется раз в месяц)[/COLOR][/I][/CENTER]"
)
try:
captcha = ""
with open(file_path, "r", encoding="utf-8") as replies:
captcha = replies.read()
return captcha if captcha else default_captcha
except FileNotFoundError:
return default_captcha
def _load(self):
load_dotenv()
@@ -76,7 +93,9 @@ class Config:
try:
lolz_thread_id = int(lolz_thread_id_str)
except (ValueError, TypeError) as e:
raise ConfigError(f"LOLZ_THREAD_ID должен быть целым числом: {lolz_thread_id_str}") from e
raise ConfigError(
f"LOLZ_THREAD_ID должен быть целым числом: {lolz_thread_id_str}"
) from e
# Stars
stars_count = int(os.getenv(key="STARS_COUNT", default=1))
@@ -100,10 +119,18 @@ class Config:
os.getenv(key="SKIP_COMMENTED", default="true")
).lower() == "true"
enable_auto_bump = (
os.getenv(key="ENABLE_AUTO_BUMP", default="true")
).lower() == "true"
bump_check_interval = max(
float(os.getenv(key="BUMP_CHECK_INTERVAL", default=3600)), 3600
) # 1 поднятие/3600с (1ч) = минимум
enable_captcha = (
os.getenv(key="ENABLE_CAPTCHA", default="true")
).lower() == "true"
captcha_answer = os.getenv(key="CAPTCHA_ANSWER", default=None)
return {
# Pyrogram
"api_id": api_id,
@@ -127,7 +154,11 @@ class Config:
"max_retries": max_retries,
"default_choice": default_choice,
# Bump
"enable_auto_bump": enable_auto_bump,
"bump_check_interval": bump_check_interval,
# Captcha
"enable_captcha": enable_captcha,
"captcha_answer": captcha_answer,
}
except ConfigError:
+5 -1
View File
@@ -379,7 +379,11 @@ class TelegramStarsBot:
# _main_loop - Основной цикл для остлеживания темы
# _bump_loop - Цикл для авто-поднятия темы
await asyncio.gather(self._main_loop(), self._bump_loop())
if self.config.enable_auto_bump:
await asyncio.gather(self._main_loop(), self._bump_loop())
else:
await self._main_loop()
except Exception as e:
logger.error(f"Ошибка в главном процессе бота: {e}")