Template
mirror of
https://github.com/djimboy/djimbo_template_aio3.git
synced 2026-08-27 23:47:44 +00:00
Update
This commit is contained in:
+1
-1
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
@@ -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))
|
||||||
|
|||||||
@@ -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 # Статус работы бота
|
||||||
|
|
||||||
|
|
||||||
# Работа с настройками
|
# Работа с настройками
|
||||||
|
|||||||
@@ -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 времени)
|
||||||
|
|
||||||
|
|
||||||
# Работа с юзером
|
# Работа с юзером
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
# ...
|
||||||
|
|
||||||
|
|
||||||
# Ошибка с редактированием одинакового сообщения
|
# Ошибка с редактированием одинакового сообщения
|
||||||
|
|||||||
@@ -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
|
...
|
||||||
|
|||||||
@@ -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
|
...
|
||||||
|
|||||||
Reference in New Issue
Block a user