This commit is contained in:
dj
2024-04-05 19:12:20 +03:00
parent a3f41caa80
commit e50be4e3d1
10 changed files with 38 additions and 36 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# supervisorctl # supervisorctl
[program:dj_bot] [program:dj_bot]
directory=/root/djimbo_template/ directory=/root/djimbo_template/
command=python3.9 main.py command=python3.10 main.py
autostart=True autostart=True
autorestart=True autorestart=True
+14 -13
View File
@@ -5,7 +5,6 @@ import sys
import colorama import colorama
from aiogram import Bot, Dispatcher from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from tgbot.data.config import BOT_TOKEN, BOT_SCHEDULER, get_admins from tgbot.data.config import BOT_TOKEN, BOT_SCHEDULER, get_admins
from tgbot.database.db_helper import create_dbx from tgbot.database.db_helper import create_dbx
@@ -29,19 +28,14 @@ async def main():
BOT_SCHEDULER.start() # Запуск Шедулера BOT_SCHEDULER.start() # Запуск Шедулера
dp = Dispatcher() # Образ Диспетчера dp = Dispatcher() # Образ Диспетчера
arSession = AsyncRequestSession() # Пул асинхронной сессии запросов arSession = AsyncRequestSession() # Пул асинхронной сессии запросов
bot = Bot( # Образ Бота bot = Bot(token=BOT_TOKEN, parse_mode="HTML") # Образ Бота
token=BOT_TOKEN,
default=DefaultBotProperties(
parse_mode="HTML",
)
)
register_all_middlwares(dp) # Регистрация всех мидлварей register_all_middlwares(dp) # Регистрация всех мидлварей
register_all_routers(dp) # Регистрация всех роутеров register_all_routers(dp) # Регистрация всех роутеров
try: try:
await set_commands(bot) # Установка команд await set_commands(bot) # Установка пользовательских команд в боте
await startup_notify(bot) # Уведомления админам при запуске бота await startup_notify(bot) # Уведомление админов о запуске бота
await scheduler_start(bot) # Подключение шедулеров await scheduler_start(bot) # Подключение шедулеров
bot_logger.warning("BOT WAS STARTED") bot_logger.warning("BOT WAS STARTED")
@@ -54,21 +48,28 @@ async def main():
await bot.delete_webhook() # Удаление вебхуков, если они имеются await bot.delete_webhook() # Удаление вебхуков, если они имеются
await bot.get_updates(offset=-1) # Сброс пендинг апдейтов await bot.get_updates(offset=-1) # Сброс пендинг апдейтов
# Запуск бота (поллинга)
await dp.start_polling( await dp.start_polling(
bot, bot,
arSession=arSession, arSession=arSession,
allowed_updates=dp.resolve_used_update_types(), allowed_updates=dp.resolve_used_update_types(),
) )
finally: finally:
await arSession.close() await arSession.close() # Закрытие Асинхронной Сессии для прочих запросов
await bot.session.close() await bot.session.close() # Закрытие сессии бота
if __name__ == "__main__": if __name__ == "__main__":
create_dbx() create_dbx() # Генерация Базы Данных
try: 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): except (KeyboardInterrupt, SystemExit):
bot_logger.warning("Bot was stopped") bot_logger.warning("Bot was stopped")
finally: finally:
+5 -5
View File
@@ -1,10 +1,10 @@
APScheduler~=3.10.4 APScheduler==3.10.4
aiogram~=3.4.1 aiogram==3.4.1
colorlog~=6.8.2 colorlog==6.8.2
pytz~=2024.1 pytz==2024.1
typing~=3.7.4.3 typing~=3.7.4.3
aiohttp~=3.9.1 aiohttp~=3.9.1
cachetools~=5.3.3 cachetools==5.3.3
colorama~=0.4.5 colorama~=0.4.5
aiofiles~=23.2.1 aiofiles~=23.2.1
pydantic~=2.5.2 pydantic~=2.5.2
+3 -2
View File
@@ -7,15 +7,15 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler
BOT_TOKEN = configparser.ConfigParser() BOT_TOKEN = configparser.ConfigParser()
BOT_TOKEN.read("settings.ini") BOT_TOKEN.read("settings.ini")
BOT_TOKEN = BOT_TOKEN['settings']['bot_token'].strip().replace(' ', '') BOT_TOKEN = BOT_TOKEN['settings']['bot_token'].strip().replace(' ', '')
BOT_TIMEZONE = "Europe/Moscow" # Временная зона бота
# Пути к файлам # Пути к файлам
PATH_DATABASE = "tgbot/data/database.db" # Путь к БД PATH_DATABASE = "tgbot/data/database.db" # Путь к БД
PATH_LOGS = "tgbot/data/logs.log" # Путь к Логам PATH_LOGS = "tgbot/data/logs.log" # Путь к Логам
# Образы и конфиги # Образы и конфиги
BOT_STATUS_NOTIFICATION = True # Оповещение админам о запуске бота (True или False)
BOT_TIMEZONE = "Europe/Moscow" # Временная зона бота
BOT_SCHEDULER = AsyncIOScheduler(timezone=BOT_TIMEZONE) # Образ шедулера 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 "," in admins: admins.remove(",") while "," in admins: admins.remove(",")
while "\r" in admins: admins.remove("\r") while "\r" in admins: admins.remove("\r")
while "\n" in admins: admins.remove("\n")
return list(map(int, admins)) return list(map(int, admins))
+1 -1
View File
@@ -9,7 +9,7 @@ from tgbot.database.db_helper import dict_factory, update_format
# Модель таблицы # Модель таблицы
class SettingsModel(BaseModel): class SettingsModel(BaseModel):
status_work: str status_work: str # Статус работы бота
# Работа с настройками # Работа с настройками
+7 -7
View File
@@ -10,13 +10,13 @@ from tgbot.utils.const_functions import get_unix, ded
# Модель таблицы # Модель таблицы
class UserModel(BaseModel): class UserModel(BaseModel):
increment: int increment: int # Инкремент записи
user_id: int user_id: int # Айди пользователя
user_login: str user_login: str # Юзернейм пользователя
user_name: str user_name: str # Имя пользователя
user_surname: str user_surname: str # Фамилия пользователя
user_fullname: str user_fullname: str # Полное имя + фамилия пользователя
user_unix: int user_unix: int # Дата регистрации пользователя в боте (в UNIX времени)
# Работа с юзером # Работа с юзером
+1 -1
View File
@@ -10,7 +10,7 @@ from cachetools import TTLCache
# Антиспам # Антиспам
class ThrottlingMiddleware(BaseMiddleware): 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.default_rate = default_rate
self.users = TTLCache(maxsize=10_000, ttl=600) self.users = TTLCache(maxsize=10_000, ttl=600)
+1 -1
View File
@@ -12,7 +12,7 @@ router = Router(name=__name__)
# @router.errors(ExceptionTypeFilter(TelegramForbiddenError)) # @router.errors(ExceptionTypeFilter(TelegramForbiddenError))
# class MyHandler(ErrorHandler): # class MyHandler(ErrorHandler):
# async def handle(self): # async def handle(self):
# pass # ...
# Ошибка с редактированием одинакового сообщения # Ошибка с редактированием одинакового сообщения
+1 -1
View File
@@ -27,4 +27,4 @@ async def set_commands(bot: Bot):
try: try:
await bot.set_my_commands(admin_commands, scope=BotCommandScopeChat(chat_id=admin)) await bot.set_my_commands(admin_commands, scope=BotCommandScopeChat(chat_id=admin))
except: except:
pass ...
+3 -3
View File
@@ -2,13 +2,13 @@
from aiogram import Bot from aiogram import Bot
from aiogram.types import FSInputFile 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 from tgbot.utils.const_functions import get_date, send_admins
# Выполнение функции после запуска бота (рассылка админам о запуске бота) # Выполнение функции после запуска бота (рассылка админам о запуске бота)
async def startup_notify(bot: Bot): 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, "<b>✅ Bot was started</b>") await send_admins(bot, "<b>✅ Bot was started</b>")
@@ -22,4 +22,4 @@ async def autobackup_admin(bot: Bot):
caption=f"<b>📦 #AUTOBACKUP | <code>{get_date()}</code></b>", caption=f"<b>📦 #AUTOBACKUP | <code>{get_date()}</code></b>",
) )
except: except:
pass ...