From 03cf587919b52ca3c3acfb30ac94474ba54f83af Mon Sep 17 00:00:00 2001 From: Whyverum Date: Mon, 23 Dec 2024 21:58:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BotLibrary/library/bots.py | 75 +++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/BotLibrary/library/bots.py b/BotLibrary/library/bots.py index 35a112d..ec3702c 100644 --- a/BotLibrary/library/bots.py +++ b/BotLibrary/library/bots.py @@ -1,53 +1,29 @@ # BotLibrary/library/bots.py # Создание и настройка бота в одном файле -import pytz -from tzlocal import get_localzone -from datetime import datetime from aiogram import Dispatcher, Bot, F from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode + from apscheduler.schedulers.asyncio import AsyncIOScheduler -from config import bot_token, BotVariables +from .time import * +from configs import bot_token, BotVariables # Настройка экспорта модулей и логирования -__all__ = ("bot_token", "dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info") +__all__ = ("dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info") log_type = "Bot" -# Получение времени по UTC -utc_now = datetime.now(pytz.utc) - -# Получение локального времени хоста (с использованием локального часового пояса) -local_tz = get_localzone() # Автоматически определяет локальный часовой пояс -local_now = utc_now.astimezone(local_tz) - -# Получение московского времени -moscow_tz = pytz.timezone("Europe/Moscow") -moscow_now = utc_now.astimezone(moscow_tz) - -# Форматирование времени UTC -utc_time = utc_now.strftime("%Y-%m-%d %H:%M:%S") + " (UTC)" - -# Форматирование времени хоста со сдвигом -utc_offset_host = local_now.utcoffset().total_seconds() / 3600 # Смещение в часах -host_time = local_now.strftime("%Y-%m-%d %H:%M:%S") + f" (UTC{int(utc_offset_host):+})" - -# Форматирование московского времени со сдвигом -utc_offset_moscow = moscow_now.utcoffset().total_seconds() / 3600 # Смещение в часах -moscow_time = moscow_now.strftime("%Y-%m-%d %H:%M:%S") + f" (UTC{int(utc_offset_moscow):+})" - - # Создание экземпляра диспатчера и его параметров dp = Dispatcher() dp["started_at"] = host_time -dp["started_at_msk"] = moscow_time +dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk) dp["is_active"] = True # Флаг активности бота dp["logs"] = [] dp["users"] = {} dp["sessions"] = {} dp["task_queue"] = [] -dp["config"] = {"max_connections": 100, "retry_interval": 5, "time_format": BotVariables.time_format} +dp["configs"] = {"max_connections": 100, "retry_interval": 5, "time_format": TimeVariable.format} dp["metrics"] = {"messages_received": 0, "messages_sent": 0, "errors": 0} dp["modules"] = {} dp["state"] = {} @@ -58,21 +34,33 @@ dp["database"] = None # Объявление экземпляров и переменных -bot = Bot(token=bot_token, default=DefaultBotProperties(parse_mode=ParseMode.HTML)) # Объявление бота -scheduler = AsyncIOScheduler(timezone=BotVariables.time_zone) # Создание планировщика +bot_properties = DefaultBotProperties( + parse_mode=ParseMode.HTML, # Устанавливаем формат HTML для всех сообщений + disable_notification=True, # Отключаем уведомления при отправке сообщений + protect_content=True, # Защищаем содержимое сообщений от копирования + allow_sending_without_reply=True, # Разрешаем отправлять сообщения без ответа на другое сообщение + # link_preview=LinkPreviewOptions(), # Настройка для предварительного просмотра ссылок + link_preview_is_disabled=True, # Отключаем предварительный просмотр ссылок + show_caption_above_media=False, # Показываем подпись выше медиа +) +bot = Bot(token=bot_token, default=bot_properties) # Объявление бота +scheduler = AsyncIOScheduler(timezone=get_time_zone()) # Создание планировщика F_Media = F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр-медиа # Класс для хранения данных о боте (некоторые переменные даны как шаблон) class BotInfo: # Статические переменные для хранения данных - id = 10000000 - first_name = "TESTBOT" - last_name = "" - username = "testbot" + id = None + first_name = None + last_name = None + username = None + description = None + short_description = None can_join_groups = None can_read_all_group_messages = None language_code = BotVariables.language + prefixs = BotVariables.prefixs is_premium = None added_to_attachment_menu = None supports_inline_queries = None @@ -86,13 +74,16 @@ class BotInfo: cls.first_name = bot_info.first_name cls.last_name = bot_info.last_name cls.username = bot_info.username - cls.can_join_groups = bot_info.can_join_groups - cls.can_read_all_group_messages = bot_info.can_read_all_group_messages + cls.description = getattr(bot_info, 'description', '') # Default to empty string if no description + cls.short_description = getattr(bot_info, 'description', '') + cls.language_code = bot_info.language_code cls.is_premium = bot_info.is_premium cls.added_to_attachment_menu = bot_info.added_to_attachment_menu cls.supports_inline_queries = bot_info.supports_inline_queries cls.can_connect_to_business = bot_info.can_connect_to_business cls.has_main_web_app = bot_info.has_main_web_app + cls.can_join_groups = getattr(bot_info, 'can_join_groups', None) # Default to None if no attribute + cls.can_read_all_group_messages = getattr(bot_info, 'can_read_all_group_messages', None) # Default to None # Функция получения данных о боте @@ -110,12 +101,14 @@ async def bot_get_info(): 'first_name': bot_info_data.first_name, 'last_name': bot_info_data.last_name, 'username': bot_info_data.username, - 'can_join_groups': bot_info_data.can_join_groups, - 'can_read_all_group_messages': bot_info_data.can_read_all_group_messages, - 'language_code': BotVariables.language, + 'description': getattr(bot_info_data, 'description', ''), + 'short_description': getattr(bot_info_data, 'description', ''), + 'language_code': bot_info_data.language_code, + 'prefixs': BotVariables.prefixs, 'is_premium': bot_info_data.is_premium, 'added_to_attachment_menu': bot_info_data.added_to_attachment_menu, 'supports_inline_queries': bot_info_data.supports_inline_queries, 'can_connect_to_business': bot_info_data.can_connect_to_business, 'has_main_web_app': bot_info_data.has_main_web_app, + 'can_join_groups': getattr(bot_info_data, 'can_join_groups', None), }