Короче опять дохуя изменений:

1. Оно перво на перво работает
2.Реализовано почти всё вроде из кнопок, осталось ток оплату подписок, выдачу URI и пополнение конечно.
3.Убрал .json конфиг и сделал всё через переменные окружения
This commit is contained in:
2024-12-07 18:05:27 +03:00
parent df50cc5ce7
commit 72d7fdd751
7 changed files with 309 additions and 71 deletions

38
main.py
View File

@@ -1,48 +1,72 @@
import os
import asyncio
from aiogram import Bot, Dispatcher
from databases.db_config import init_postgresql, init_mongodb, close_connections
from aiogram.types import BotCommand
from utils.LogCon import setup_logger, load_config
from Middleware.anti_spam_middleware import AntiSpamMiddleware
import logging
setup_logger()
logger = logging.getLogger(__name__)
# Получение токена бота из переменных окружения
BOT_TOKEN = os.getenv("TOKEN")
BOT_TOKEN = load_config()['token']
if not BOT_TOKEN:
raise ValueError("Не задан токен бота. Убедитесь, что переменная окружения 'TOKEN' установлена.")
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
# Установка middleware для защиты от спама
dp.message.middleware(AntiSpamMiddleware(rate_limit=1))
async def set_commands():
"""Устанавливает команды для бота."""
commands = [
BotCommand(command="/start", description="Запустить бота"),
]
await bot.set_my_commands(commands)
async def on_startup():
"""Действия при запуске бота."""
# Инициализация баз данных
await init_mongodb()
await init_postgresql()
# Установка команд бота
await set_commands()
print("Бот запущен!")
# Настройка логирования
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("Бот запущен!")
async def on_shutdown():
"""Действия при остановке бота."""
# Закрытие подключений к базам данных
await close_connections()
# Закрытие сессии бота
await bot.session.close()
print("Бот остановлен.")
async def main():
"""Основной цикл работы бота."""
from handlers.handlers import register_handlers
register_handlers(dp)
await init_postgresql() # Убедитесь, что таблицы создаются здесь
register_handlers(dp) # Регистрация хендлеров
await on_startup()
try:
# Запуск polling
await dp.start_polling(bot)
finally:
# Действия при завершении работы
await on_shutdown()
if __name__ == "__main__":
asyncio.run(main())