Enhance bot functionality and refactor database interactions
- Added `ca-certificates` installation to Dockerfile for improved network security. - Updated health check command in Dockerfile to include better timeout handling. - Refactored `run_helper.py` to implement proper signal handling and logging during shutdown. - Transitioned database operations to an asynchronous model in `async_db.py`, improving performance and responsiveness. - Updated database schema to support new foreign key relationships and optimized indexing for better query performance. - Enhanced various bot handlers to utilize async database methods, improving overall efficiency and user experience. - Removed obsolete database and fix scripts to streamline the project structure.
This commit is contained in:
@@ -34,14 +34,13 @@ class AutoUnbanScheduler:
|
||||
try:
|
||||
logger.info("Запуск автоматического разбана пользователей")
|
||||
|
||||
# Получаем сегодняшнюю дату в формате YYYY-MM-DD
|
||||
moscow_tz = timezone(timedelta(hours=3)) # UTC+3 для Москвы
|
||||
today = datetime.now(moscow_tz).strftime("%Y-%m-%d")
|
||||
# Получаем текущий UNIX timestamp
|
||||
current_timestamp = int(datetime.now().timestamp())
|
||||
|
||||
logger.info(f"Поиск пользователей для разблокировки на дату: {today}")
|
||||
logger.info(f"Поиск пользователей для разблокировки на timestamp: {current_timestamp}")
|
||||
|
||||
# Получаем список пользователей для разблокировки
|
||||
users_to_unban = self.bot_db.get_users_for_unblock_today(today)
|
||||
users_to_unban = await self.bot_db.get_users_for_unblock_today(current_timestamp)
|
||||
|
||||
if not users_to_unban:
|
||||
logger.info("Нет пользователей для разблокировки сегодня")
|
||||
@@ -55,20 +54,20 @@ class AutoUnbanScheduler:
|
||||
failed_users = []
|
||||
|
||||
# Разблокируем каждого пользователя
|
||||
for user_id, username in users_to_unban.items():
|
||||
for user_id in users_to_unban:
|
||||
try:
|
||||
result = self.bot_db.delete_user_blacklist(user_id)
|
||||
result = await self.bot_db.delete_user_blacklist(user_id)
|
||||
if result:
|
||||
success_count += 1
|
||||
logger.info(f"Пользователь {user_id} ({username}) успешно разблокирован")
|
||||
logger.info(f"Пользователь {user_id} успешно разблокирован")
|
||||
else:
|
||||
failed_count += 1
|
||||
failed_users.append(f"{user_id} ({username})")
|
||||
logger.error(f"Ошибка при разблокировке пользователя {user_id} ({username})")
|
||||
failed_users.append(f"{user_id}")
|
||||
logger.error(f"Ошибка при разблокировке пользователя {user_id}")
|
||||
except Exception as e:
|
||||
failed_count += 1
|
||||
failed_users.append(f"{user_id} ({username})")
|
||||
logger.error(f"Исключение при разблокировке пользователя {user_id} ({username}): {e}")
|
||||
failed_users.append(f"{user_id}")
|
||||
logger.error(f"Исключение при разблокировке пользователя {user_id}: {e}")
|
||||
|
||||
# Формируем отчет
|
||||
report = self._generate_report(success_count, failed_count, failed_users, users_to_unban)
|
||||
@@ -93,10 +92,9 @@ class AutoUnbanScheduler:
|
||||
|
||||
if success_count > 0:
|
||||
report += "✅ <b>Разблокированные пользователи:</b>\n"
|
||||
for user_id, username in all_users.items():
|
||||
if f"{user_id} ({username})" not in failed_users:
|
||||
safe_username = username if username else "Неизвестный пользователь"
|
||||
report += f"• ID: {user_id}, Имя: {safe_username}\n"
|
||||
for user_id in all_users:
|
||||
if str(user_id) not in failed_users:
|
||||
report += f"• ID: {user_id}\n"
|
||||
report += "\n"
|
||||
|
||||
if failed_users:
|
||||
|
||||
Reference in New Issue
Block a user