mirror of
https://github.com/djimboy/djimbo_template_aio3.git
synced 2026-07-25 09:44:29 +00:00
Update
This commit is contained in:
@@ -9,7 +9,7 @@ from aiogram import Bot, Dispatcher
|
|||||||
from tgbot.data.config import BOT_TOKEN, scheduler, get_admins
|
from tgbot.data.config import BOT_TOKEN, scheduler, get_admins
|
||||||
from tgbot.middlewares import register_all_middlwares
|
from tgbot.middlewares import register_all_middlwares
|
||||||
from tgbot.routers import register_all_routers
|
from tgbot.routers import register_all_routers
|
||||||
from tgbot.services.api_session import RequestsSession
|
from tgbot.services.api_session import AsyncSession
|
||||||
from tgbot.services.api_sqlite import create_dbx
|
from tgbot.services.api_sqlite import create_dbx
|
||||||
from tgbot.utils.misc.bot_commands import set_commands
|
from tgbot.utils.misc.bot_commands import set_commands
|
||||||
from tgbot.utils.misc.bot_logging import bot_logger
|
from tgbot.utils.misc.bot_logging import bot_logger
|
||||||
@@ -20,15 +20,15 @@ colorama.init()
|
|||||||
|
|
||||||
# Запуск шедулеров
|
# Запуск шедулеров
|
||||||
async def scheduler_start(bot):
|
async def scheduler_start(bot):
|
||||||
scheduler.add_job(autobackup, "cron", hour=00, args=(bot,)) # Автобэкап в 12:00
|
scheduler.add_job(autobackup, "cron", hour=00, args=(bot,)) # Ежедневный Автобэкап в 00:00
|
||||||
scheduler.add_job(autobackup, "cron", hour=12, args=(bot,)) # Автобэкап в 00:00
|
scheduler.add_job(autobackup, "cron", hour=12, args=(bot,)) # Ежедневный Автобэкап в 12:00
|
||||||
|
|
||||||
|
|
||||||
# Запуск бота и функций
|
# Запуск бота и функций
|
||||||
async def main():
|
async def main():
|
||||||
scheduler.start() # Запуск Шедулера
|
scheduler.start() # Запуск Шедулера
|
||||||
dp = Dispatcher() # Создание Диспетчера
|
dp = Dispatcher() # Образ Диспетчера
|
||||||
rSession = RequestsSession() # Асинхронные Запросы
|
aSession = AsyncSession() # Пул асинхронной сессии запросов
|
||||||
bot = Bot(token=BOT_TOKEN, parse_mode="HTML") # Образ Бота
|
bot = Bot(token=BOT_TOKEN, parse_mode="HTML") # Образ Бота
|
||||||
|
|
||||||
register_all_middlwares(dp) # Регистрация всех мидлварей
|
register_all_middlwares(dp) # Регистрация всех мидлварей
|
||||||
@@ -48,9 +48,9 @@ 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(bot, allowed_updates=dp.resolve_used_update_types(), rSession=rSession)
|
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), aSession=aSession)
|
||||||
finally:
|
finally:
|
||||||
await rSession.close()
|
await aSession.close()
|
||||||
await bot.session.close()
|
await bot.session.close()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,15 +3,19 @@ import configparser
|
|||||||
|
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
|
|
||||||
scheduler = AsyncIOScheduler()
|
# Токен бота
|
||||||
|
BOT_TOKEN = configparser.ConfigParser()
|
||||||
|
BOT_TOKEN.read("settings.ini")
|
||||||
|
BOT_TOKEN = BOT_TOKEN['settings']['token'].strip().replace(' ', '')
|
||||||
|
|
||||||
read_config = configparser.ConfigParser()
|
# Пути к файлам
|
||||||
read_config.read("settings.ini")
|
|
||||||
|
|
||||||
BOT_TOKEN = read_config['settings']['token'].strip().replace(' ', '') # Токен бота
|
|
||||||
PATH_DATABASE = "tgbot/data/database.db" # Путь к БД
|
PATH_DATABASE = "tgbot/data/database.db" # Путь к БД
|
||||||
PATH_LOGS = "tgbot/data/logs.log" # Путь к Логам
|
PATH_LOGS = "tgbot/data/logs.log" # Путь к Логам
|
||||||
|
|
||||||
|
# Образы и конфиги
|
||||||
|
scheduler = AsyncIOScheduler() # Образ шедулера
|
||||||
|
start_status = True # Оповещение админам при запуске бота (True или False)
|
||||||
|
|
||||||
|
|
||||||
# Получение администраторов бота
|
# Получение администраторов бота
|
||||||
def get_admins():
|
def get_admins():
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ from tgbot.middlewares.exists_user import ExistsUserMiddleware
|
|||||||
from tgbot.middlewares.throttling import ThrottlingMiddleware
|
from tgbot.middlewares.throttling import ThrottlingMiddleware
|
||||||
|
|
||||||
|
|
||||||
|
# Регистрация всех миддлварей
|
||||||
def register_all_middlwares(dp: Dispatcher):
|
def register_all_middlwares(dp: Dispatcher):
|
||||||
dp.callback_query.outer_middleware(ExistsUserMiddleware())
|
dp.callback_query.outer_middleware(ExistsUserMiddleware())
|
||||||
dp.message.outer_middleware(ExistsUserMiddleware())
|
dp.message.outer_middleware(ExistsUserMiddleware())
|
||||||
|
|||||||
@@ -16,15 +16,15 @@ class ExistsUserMiddleware(BaseMiddleware):
|
|||||||
user_id = this_user.id
|
user_id = this_user.id
|
||||||
user_login = this_user.username
|
user_login = this_user.username
|
||||||
user_name = clear_html(this_user.first_name)
|
user_name = clear_html(this_user.first_name)
|
||||||
user_fullname = clear_html(this_user.first_name)
|
|
||||||
user_surname = clear_html(this_user.last_name)
|
user_surname = clear_html(this_user.last_name)
|
||||||
|
user_fullname = clear_html(this_user.first_name)
|
||||||
user_language = this_user.language_code
|
user_language = this_user.language_code
|
||||||
|
|
||||||
if user_language != "ru": user_language = "en"
|
|
||||||
if user_login is None: user_login = ""
|
if user_login is None: user_login = ""
|
||||||
if user_name is None: user_name = ""
|
if user_name is None: user_name = ""
|
||||||
if user_fullname is None: user_fullname = ""
|
|
||||||
if user_surname is None: user_surname = ""
|
if user_surname is None: user_surname = ""
|
||||||
|
if user_fullname is None: user_fullname = ""
|
||||||
|
if user_language != "ru": user_language = "en"
|
||||||
|
|
||||||
if len(user_surname) >= 1: user_fullname += f" {user_surname}"
|
if len(user_surname) >= 1: user_fullname += f" {user_surname}"
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from tgbot.routers.user import user_menu
|
|||||||
from tgbot.utils.misc.bot_filters import IsAdmin
|
from tgbot.utils.misc.bot_filters import IsAdmin
|
||||||
|
|
||||||
|
|
||||||
# Регистрация роутеров
|
# Регистрация всех роутеров
|
||||||
def register_all_routers(dp: Dispatcher):
|
def register_all_routers(dp: Dispatcher):
|
||||||
# Подключение фильтров
|
# Подключение фильтров
|
||||||
main_errors.router.message.filter(F.chat.type == "private")
|
main_errors.router.message.filter(F.chat.type == "private")
|
||||||
@@ -18,7 +18,7 @@ def register_all_routers(dp: Dispatcher):
|
|||||||
|
|
||||||
admin_menu.router.message.filter(F.chat.type == "private", IsAdmin())
|
admin_menu.router.message.filter(F.chat.type == "private", IsAdmin())
|
||||||
|
|
||||||
# Инициализация обязательных роутеров
|
# Подключение обязательных роутеров
|
||||||
dp.include_router(main_errors.router)
|
dp.include_router(main_errors.router)
|
||||||
dp.include_router(main_start.router)
|
dp.include_router(main_start.router)
|
||||||
|
|
||||||
@@ -26,5 +26,5 @@ def register_all_routers(dp: Dispatcher):
|
|||||||
dp.include_router(user_menu.router) # Юзер хендлер
|
dp.include_router(user_menu.router) # Юзер хендлер
|
||||||
dp.include_router(admin_menu.router) # Админ хендлер
|
dp.include_router(admin_menu.router) # Админ хендлер
|
||||||
|
|
||||||
# Инициализация обязательных роутеров
|
# Подключение обязательных роутеров
|
||||||
dp.include_router(main_missed.router)
|
dp.include_router(main_missed.router)
|
||||||
|
|||||||
@@ -2,19 +2,18 @@
|
|||||||
from aiogram import Router, Bot
|
from aiogram import Router, Bot
|
||||||
from aiogram.types import FSInputFile, Message
|
from aiogram.types import FSInputFile, Message
|
||||||
|
|
||||||
from tgbot.data.config import PATH_DATABASE, PATH_LOGS
|
|
||||||
from tgbot.data.config import PATH_DATABASE, PATH_LOGS
|
from tgbot.data.config import PATH_DATABASE, PATH_LOGS
|
||||||
from tgbot.keyboards.inline_misc import admin_inl
|
from tgbot.keyboards.inline_misc import admin_inl
|
||||||
from tgbot.keyboards.reply_misc import admin_rep
|
from tgbot.keyboards.reply_misc import admin_rep
|
||||||
from tgbot.utils.const_functions import get_date
|
from tgbot.utils.const_functions import get_date
|
||||||
from tgbot.utils.misc.bot_models import FSM, RS
|
from tgbot.utils.misc.bot_models import FSM, AS
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
# Кнопка - Admin Inline
|
# Кнопка - Admin Inline
|
||||||
@router.message(text="Admin Inline")
|
@router.message(text="Admin Inline")
|
||||||
async def admin_button_inline(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def admin_button_inline(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("Click Button - Admin Inline", reply_markup=admin_inl)
|
await message.answer("Click Button - Admin Inline", reply_markup=admin_inl)
|
||||||
@@ -22,7 +21,7 @@ async def admin_button_inline(message: Message, bot: Bot, state: FSM, rSession:
|
|||||||
|
|
||||||
# Кнопка - Admin Reply
|
# Кнопка - Admin Reply
|
||||||
@router.message(text="Admin Reply")
|
@router.message(text="Admin Reply")
|
||||||
async def admin_button_reply(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def admin_button_reply(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("Click Button - Admin Reply", reply_markup=admin_rep)
|
await message.answer("Click Button - Admin Reply", reply_markup=admin_rep)
|
||||||
@@ -30,7 +29,7 @@ async def admin_button_reply(message: Message, bot: Bot, state: FSM, rSession: R
|
|||||||
|
|
||||||
# Получение Базы Данных
|
# Получение Базы Данных
|
||||||
@router.message(commands=['db', 'database'])
|
@router.message(commands=['db', 'database'])
|
||||||
async def admin_database(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def admin_database(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer_document(FSInputFile(PATH_DATABASE),
|
await message.answer_document(FSInputFile(PATH_DATABASE),
|
||||||
@@ -40,7 +39,19 @@ async def admin_database(message: Message, bot: Bot, state: FSM, rSession: RS, m
|
|||||||
|
|
||||||
# Получение логов
|
# Получение логов
|
||||||
@router.message(commands=['log', 'logs'])
|
@router.message(commands=['log', 'logs'])
|
||||||
async def admin_log(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def admin_log(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer_document(FSInputFile(PATH_LOGS), caption=f"<code>🕰 {get_date()}</code>")
|
await message.answer_document(FSInputFile(PATH_LOGS), caption=f"<code>🕰 {get_date()}</code>")
|
||||||
|
|
||||||
|
|
||||||
|
# Очистить логи
|
||||||
|
@router.message(text_contains=['log', '_', 'clean'])
|
||||||
|
@router.message(text_contains=['log', '_', 'clear'])
|
||||||
|
async def admin_log_clear(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
|
await state.clear()
|
||||||
|
|
||||||
|
with open(PATH_LOGS, "w") as file:
|
||||||
|
file.write(f"{get_date()} | LOGS WAS CLEAR")
|
||||||
|
|
||||||
|
await message.answer("<b>🖨 Логи были успешно очищены</b>")
|
||||||
|
|||||||
@@ -13,9 +13,12 @@ router = Router()
|
|||||||
@router.errors()
|
@router.errors()
|
||||||
async def processing_errors(update: Update, exception: TelegramAPIError, bot: Bot):
|
async def processing_errors(update: Update, exception: TelegramAPIError, bot: Bot):
|
||||||
print(f"-Exception | {exception}")
|
print(f"-Exception | {exception}")
|
||||||
await send_admins(bot, f"<b>❌ Ошибка\n\n"
|
await send_admins(
|
||||||
f"<b>Exception: <code>{exception}</code>\n\n"
|
bot,
|
||||||
f"Update: <code>{update.dict()}</code></b>")
|
f"<b>❌ Ошибка\n\n"
|
||||||
|
f"<b>Exception: <code>{exception}</code>\n\n"
|
||||||
|
f"Update: <code>{update.dict()}</code></b>"
|
||||||
|
)
|
||||||
|
|
||||||
bot_logger.exception(
|
bot_logger.exception(
|
||||||
f"Exception: {exception}\n"
|
f"Exception: {exception}\n"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ router = Router()
|
|||||||
|
|
||||||
# Колбэк с удалением сообщения
|
# Колбэк с удалением сообщения
|
||||||
@router.callback_query(text="close_this")
|
@router.callback_query(text="close_this")
|
||||||
async def processing_callback_remove(call: CallbackQuery, state: FSM):
|
async def processing_callback_close(call: CallbackQuery, state: FSM):
|
||||||
await call.message.delete()
|
await call.message.delete()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ from aiogram import Router, Bot
|
|||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
|
|
||||||
from tgbot.keyboards.reply_main import menu_frep
|
from tgbot.keyboards.reply_main import menu_frep
|
||||||
from tgbot.utils.misc.bot_models import FSM, RS
|
from tgbot.utils.misc.bot_models import FSM, AS
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
# Открытие главного меню
|
# Открытие главного меню
|
||||||
@router.message(text_startswith=["⬅ Главное меню", "/start"])
|
@router.message(text_startswith=["⬅ Главное меню", "/start"])
|
||||||
async def main_start(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def main_start(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("🔸 Бот готов к использованию.\n"
|
await message.answer("🔸 Бот готов к использованию.\n"
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ from aiogram.types import Message
|
|||||||
from tgbot.keyboards.inline_main import menu_finl
|
from tgbot.keyboards.inline_main import menu_finl
|
||||||
from tgbot.keyboards.inline_misc import user_inl
|
from tgbot.keyboards.inline_misc import user_inl
|
||||||
from tgbot.keyboards.reply_misc import user_rep
|
from tgbot.keyboards.reply_misc import user_rep
|
||||||
from tgbot.utils.misc.bot_models import FSM, RS
|
from tgbot.utils.misc.bot_models import FSM, AS
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
||||||
# Кнопка - User Inline
|
# Кнопка - User Inline
|
||||||
@router.message(text="User Inline")
|
@router.message(text="User Inline")
|
||||||
async def user_button_inline(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def user_button_inline(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("Click Button - User Inline", reply_markup=user_inl)
|
await message.answer("Click Button - User Inline", reply_markup=user_inl)
|
||||||
@@ -20,7 +20,7 @@ async def user_button_inline(message: Message, bot: Bot, state: FSM, rSession: R
|
|||||||
|
|
||||||
# Кнопка - User Reply
|
# Кнопка - User Reply
|
||||||
@router.message(text="User Reply")
|
@router.message(text="User Reply")
|
||||||
async def user_button_reply(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def user_button_reply(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("Click Button - User Reply", reply_markup=user_rep)
|
await message.answer("Click Button - User Reply", reply_markup=user_rep)
|
||||||
@@ -28,7 +28,7 @@ async def user_button_reply(message: Message, bot: Bot, state: FSM, rSession: RS
|
|||||||
|
|
||||||
# Команда - /inline
|
# Команда - /inline
|
||||||
@router.message(commands="inline")
|
@router.message(commands="inline")
|
||||||
async def user_command_inline(message: Message, bot: Bot, state: FSM, rSession: RS, my_user):
|
async def user_command_inline(message: Message, bot: Bot, state: FSM, aSession: AS, my_user):
|
||||||
await state.clear()
|
await state.clear()
|
||||||
|
|
||||||
await message.answer("Click command - /inline", reply_markup=menu_finl(message.from_user.id))
|
await message.answer("Click command - /inline", reply_markup=menu_finl(message.from_user.id))
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import aiohttp
|
|||||||
|
|
||||||
|
|
||||||
# Асинхронная сессия для запросов
|
# Асинхронная сессия для запросов
|
||||||
class RequestsSession:
|
class AsyncSession:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self._session: Optional[aiohttp.ClientSession] = None
|
self._session: Optional[aiohttp.ClientSession] = None
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ def add_userx(user_id, user_login, user_name, user_surname, user_fullname):
|
|||||||
"(user_id, user_login, user_name, user_surname, user_fullname, user_date, user_unix) "
|
"(user_id, user_login, user_name, user_surname, user_fullname, user_date, user_unix) "
|
||||||
"VALUES (?, ?, ?, ?, ?, ?, ?)",
|
"VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||||||
[user_id, user_login, user_name, user_surname, user_fullname, get_date(), get_unix()])
|
[user_id, user_login, user_name, user_surname, user_fullname, get_date(), get_unix()])
|
||||||
con.commit()
|
|
||||||
|
|
||||||
|
|
||||||
# Получение пользователя
|
# Получение пользователя
|
||||||
@@ -88,7 +87,6 @@ def update_userx(user_id, **kwargs):
|
|||||||
sql, parameters = update_format_with_args(sql, kwargs)
|
sql, parameters = update_format_with_args(sql, kwargs)
|
||||||
parameters.append(user_id)
|
parameters.append(user_id)
|
||||||
con.execute(sql + "WHERE user_id = ?", parameters)
|
con.execute(sql + "WHERE user_id = ?", parameters)
|
||||||
con.commit()
|
|
||||||
|
|
||||||
|
|
||||||
# Удаление пользователя
|
# Удаление пользователя
|
||||||
@@ -98,7 +96,6 @@ def delete_userx(**kwargs):
|
|||||||
sql = "DELETE FROM storage_users"
|
sql = "DELETE FROM storage_users"
|
||||||
sql, parameters = update_format_args(sql, kwargs)
|
sql, parameters = update_format_args(sql, kwargs)
|
||||||
con.execute(sql, parameters)
|
con.execute(sql, parameters)
|
||||||
con.commit()
|
|
||||||
|
|
||||||
|
|
||||||
######################################## СОЗДАНИЕ БАЗЫ ДАННЫХ ######################################
|
######################################## СОЗДАНИЕ БАЗЫ ДАННЫХ ######################################
|
||||||
@@ -121,5 +118,3 @@ def create_dbx():
|
|||||||
"user_date TIMESTAMP,"
|
"user_date TIMESTAMP,"
|
||||||
"user_unix INTEGER)")
|
"user_unix INTEGER)")
|
||||||
print("DB was not found(1/1) | Creating...")
|
print("DB was not found(1/1) | Creating...")
|
||||||
|
|
||||||
con.commit()
|
|
||||||
|
|||||||
@@ -70,6 +70,23 @@ async def smart_send(bot: Bot, message: types.Message, user_id, text_add=None, r
|
|||||||
|
|
||||||
|
|
||||||
######################################## ПРОЧЕЕ ########################################
|
######################################## ПРОЧЕЕ ########################################
|
||||||
|
# Удаление отступов у текста
|
||||||
|
def ded(get_text: str):
|
||||||
|
if get_text is not None:
|
||||||
|
split_text = get_text.split("\n")
|
||||||
|
if split_text[0] == "": split_text.pop(0)
|
||||||
|
if split_text[-1] == "": split_text.pop(-1)
|
||||||
|
save_text = []
|
||||||
|
|
||||||
|
for text in split_text:
|
||||||
|
while text.startswith(" "):
|
||||||
|
text = text[1:]
|
||||||
|
|
||||||
|
save_text.append(text)
|
||||||
|
get_text = "\n".join(save_text)
|
||||||
|
|
||||||
|
return get_text
|
||||||
|
|
||||||
# Очистка HTML тэгов
|
# Очистка HTML тэгов
|
||||||
def clear_html(get_text: str):
|
def clear_html(get_text: str):
|
||||||
if get_text is not None:
|
if get_text is not None:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# - *- coding: utf- 8 - *-
|
# - *- coding: utf- 8 - *-
|
||||||
from aiogram.dispatcher.filters import BaseFilter
|
from aiogram.filters import BaseFilter
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
|
|
||||||
from tgbot.data.config import get_admins
|
from tgbot.data.config import get_admins
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
# - *- coding: utf- 8 - *-
|
# - *- coding: utf- 8 - *-
|
||||||
from textwrap import dedent
|
from aiogram.fsm.context import FSMContext
|
||||||
|
|
||||||
from aiogram.dispatcher.fsm.context import FSMContext
|
from tgbot.services.api_session import AsyncSession
|
||||||
|
|
||||||
from tgbot.services.api_session import RequestsSession
|
|
||||||
|
|
||||||
ded = dedent
|
|
||||||
FSM = FSMContext
|
FSM = FSMContext
|
||||||
RS = RequestsSession
|
AS = AsyncSession
|
||||||
|
|||||||
@@ -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
|
from tgbot.data.config import get_admins, PATH_DATABASE, start_status
|
||||||
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:
|
if len(get_admins()) >= 1 and start_status:
|
||||||
await send_admins(bot, "<b>✅ Бот был запущен</b>")
|
await send_admins(bot, "<b>✅ Бот был запущен</b>")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user