feat(config): add auto bump and captcha options
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user