diff --git a/dj_bot.conf b/dj_bot.conf index f9fb6ff..7d320b2 100644 --- a/dj_bot.conf +++ b/dj_bot.conf @@ -1,7 +1,7 @@ # supervisorctl [program:dj_bot] directory=/root/djimbo_template/ -command=python3.9 main.py +command=python3.10 main.py autostart=True autorestart=True diff --git a/main.py b/main.py index 313c247..62349dd 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,6 @@ import sys import colorama from aiogram import Bot, Dispatcher -from aiogram.client.default import DefaultBotProperties from tgbot.data.config import BOT_TOKEN, BOT_SCHEDULER, get_admins from tgbot.database.db_helper import create_dbx @@ -29,19 +28,14 @@ async def main(): BOT_SCHEDULER.start() # Запуск Шедулера dp = Dispatcher() # Образ Диспетчера arSession = AsyncRequestSession() # Пул асинхронной сессии запросов - bot = Bot( # Образ Бота - token=BOT_TOKEN, - default=DefaultBotProperties( - parse_mode="HTML", - ) - ) + bot = Bot(token=BOT_TOKEN, parse_mode="HTML") # Образ Бота register_all_middlwares(dp) # Регистрация всех мидлварей register_all_routers(dp) # Регистрация всех роутеров try: - await set_commands(bot) # Установка команд - await startup_notify(bot) # Уведомления админам при запуске бота + await set_commands(bot) # Установка пользовательских команд в боте + await startup_notify(bot) # Уведомление админов о запуске бота await scheduler_start(bot) # Подключение шедулеров bot_logger.warning("BOT WAS STARTED") @@ -54,21 +48,28 @@ async def main(): await bot.delete_webhook() # Удаление вебхуков, если они имеются await bot.get_updates(offset=-1) # Сброс пендинг апдейтов + # Запуск бота (поллинга) await dp.start_polling( bot, arSession=arSession, allowed_updates=dp.resolve_used_update_types(), ) finally: - await arSession.close() - await bot.session.close() + await arSession.close() # Закрытие Асинхронной Сессии для прочих запросов + await bot.session.close() # Закрытие сессии бота if __name__ == "__main__": - create_dbx() + create_dbx() # Генерация Базы Данных try: - asyncio.run(main()) + if sys.platform == 'win32': # Запуск на 32-х битных системах + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + loop = asyncio.ProactorEventLoop() + asyncio.set_event_loop(loop) + loop.run_until_complete(main()) + else: + asyncio.run(main()) # Запуск на всех других системах except (KeyboardInterrupt, SystemExit): bot_logger.warning("Bot was stopped") finally: diff --git a/requirements.txt b/requirements.txt index 561464d..bf96158 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ -APScheduler~=3.10.4 -aiogram~=3.4.1 -colorlog~=6.8.2 -pytz~=2024.1 +APScheduler==3.10.4 +aiogram==3.4.1 +colorlog==6.8.2 +pytz==2024.1 typing~=3.7.4.3 aiohttp~=3.9.1 -cachetools~=5.3.3 +cachetools==5.3.3 colorama~=0.4.5 aiofiles~=23.2.1 -pydantic~=2.5.2 +pydantic~=2.5.2 \ No newline at end of file diff --git a/tgbot/data/config.py b/tgbot/data/config.py index 65f6160..8743eef 100644 --- a/tgbot/data/config.py +++ b/tgbot/data/config.py @@ -7,15 +7,15 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler BOT_TOKEN = configparser.ConfigParser() BOT_TOKEN.read("settings.ini") BOT_TOKEN = BOT_TOKEN['settings']['bot_token'].strip().replace(' ', '') -BOT_TIMEZONE = "Europe/Moscow" # Временная зона бота # Пути к файлам PATH_DATABASE = "tgbot/data/database.db" # Путь к БД PATH_LOGS = "tgbot/data/logs.log" # Путь к Логам # Образы и конфиги +BOT_STATUS_NOTIFICATION = True # Оповещение админам о запуске бота (True или False) +BOT_TIMEZONE = "Europe/Moscow" # Временная зона бота BOT_SCHEDULER = AsyncIOScheduler(timezone=BOT_TIMEZONE) # Образ шедулера -start_status = True # Оповещение админам о запуске бота (True или False) # Получение администраторов бота @@ -37,5 +37,6 @@ def get_admins() -> list[int]: while " " in admins: admins.remove(" ") while "," in admins: admins.remove(",") while "\r" in admins: admins.remove("\r") + while "\n" in admins: admins.remove("\n") return list(map(int, admins)) diff --git a/tgbot/database/db_settings.py b/tgbot/database/db_settings.py index 293344b..8f14d52 100644 --- a/tgbot/database/db_settings.py +++ b/tgbot/database/db_settings.py @@ -9,7 +9,7 @@ from tgbot.database.db_helper import dict_factory, update_format # Модель таблицы class SettingsModel(BaseModel): - status_work: str + status_work: str # Статус работы бота # Работа с настройками diff --git a/tgbot/database/db_users.py b/tgbot/database/db_users.py index 123540d..c2cd730 100644 --- a/tgbot/database/db_users.py +++ b/tgbot/database/db_users.py @@ -10,13 +10,13 @@ from tgbot.utils.const_functions import get_unix, ded # Модель таблицы class UserModel(BaseModel): - increment: int - user_id: int - user_login: str - user_name: str - user_surname: str - user_fullname: str - user_unix: int + increment: int # Инкремент записи + user_id: int # Айди пользователя + user_login: str # Юзернейм пользователя + user_name: str # Имя пользователя + user_surname: str # Фамилия пользователя + user_fullname: str # Полное имя + фамилия пользователя + user_unix: int # Дата регистрации пользователя в боте (в UNIX времени) # Работа с юзером diff --git a/tgbot/middlewares/middleware_throttling.py b/tgbot/middlewares/middleware_throttling.py index 4aa814a..8130c5d 100644 --- a/tgbot/middlewares/middleware_throttling.py +++ b/tgbot/middlewares/middleware_throttling.py @@ -10,7 +10,7 @@ from cachetools import TTLCache # Антиспам class ThrottlingMiddleware(BaseMiddleware): - def __init__(self, default_rate: Union[int, float] = 1) -> None: + def __init__(self, default_rate: Union[int, float] = 0.5) -> None: self.default_rate = default_rate self.users = TTLCache(maxsize=10_000, ttl=600) diff --git a/tgbot/routers/main_errors.py b/tgbot/routers/main_errors.py index 556365a..11dea21 100644 --- a/tgbot/routers/main_errors.py +++ b/tgbot/routers/main_errors.py @@ -12,7 +12,7 @@ router = Router(name=__name__) # @router.errors(ExceptionTypeFilter(TelegramForbiddenError)) # class MyHandler(ErrorHandler): # async def handle(self): -# pass +# ... # Ошибка с редактированием одинакового сообщения diff --git a/tgbot/utils/misc/bot_commands.py b/tgbot/utils/misc/bot_commands.py index 5a7ddc3..16064a0 100644 --- a/tgbot/utils/misc/bot_commands.py +++ b/tgbot/utils/misc/bot_commands.py @@ -27,4 +27,4 @@ async def set_commands(bot: Bot): try: await bot.set_my_commands(admin_commands, scope=BotCommandScopeChat(chat_id=admin)) except: - pass + ... diff --git a/tgbot/utils/misc_functions.py b/tgbot/utils/misc_functions.py index bb44646..2a41f52 100644 --- a/tgbot/utils/misc_functions.py +++ b/tgbot/utils/misc_functions.py @@ -2,13 +2,13 @@ from aiogram import Bot from aiogram.types import FSInputFile -from tgbot.data.config import get_admins, PATH_DATABASE, start_status +from tgbot.data.config import get_admins, PATH_DATABASE, BOT_STATUS_NOTIFICATION from tgbot.utils.const_functions import get_date, send_admins # Выполнение функции после запуска бота (рассылка админам о запуске бота) async def startup_notify(bot: Bot): - if len(get_admins()) >= 1 and start_status: + if len(get_admins()) >= 1 and BOT_STATUS_NOTIFICATION: await send_admins(bot, "✅ Bot was started") @@ -22,4 +22,4 @@ async def autobackup_admin(bot: Bot): caption=f"📦 #AUTOBACKUP | {get_date()}", ) except: - pass + ...