Origin #2
14
.gitignore
vendored
14
.gitignore
vendored
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
|
|
||||||
# Игнорирование локального окружения и его файлов
|
# Игнорирование локального окружения и его файлов
|
||||||
|
.venv
|
||||||
.env
|
.env
|
||||||
.venv/
|
|
||||||
|
|
||||||
|
|
||||||
# Игнорирование пользовательских конфигураций IDE
|
# Игнорирование пользовательских конфигураций IDE
|
||||||
/.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
|
|
||||||
@@ -18,8 +18,8 @@ Thumbs.db
|
|||||||
|
|
||||||
|
|
||||||
# Игнорирование директории сборки
|
# Игнорирование директории сборки
|
||||||
/build/
|
build/
|
||||||
/dist/
|
dist/
|
||||||
|
|
||||||
|
|
||||||
# Игнорирование всех скачанных данных логирования
|
# Игнорирование всех скачанных данных логирования
|
||||||
@@ -32,9 +32,9 @@ BotLogs/
|
|||||||
|
|
||||||
|
|
||||||
# Игнорирование установщика проекта
|
# Игнорирование установщика проекта
|
||||||
/Test/project_clone.bat
|
Test/project_clone.bat
|
||||||
|
|
||||||
|
|
||||||
# Игнорирование базы данных пользователя
|
# Игнорирование базы данных пользователя
|
||||||
/MySQL/user_data.db
|
MySQL/user_data.db
|
||||||
/MySQL/user_data.json
|
MySQL/user_data.json
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
|
# BotCode/inline/__init__.py
|
||||||
|
# Инициализация пакета inline, для инлайн сообщений через @user
|
||||||
|
|
||||||
from .posts_inline import *
|
from .posts_inline import *
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
# BotCode/routers/inline/posts_inline.py
|
# BotCode/routers/inline/posts_inline.py
|
||||||
# Создание красивых постов по вкусу (в разработке)
|
# Создание красивых постов по вкусу (в разработке)
|
||||||
|
|
||||||
import hashlib
|
|
||||||
import uuid
|
import uuid
|
||||||
from aiogram import Router, types
|
from aiogram import Router, types
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# BotCode/keyboards/__init__.py
|
# BotCode/keyboards/inline_kb/__init__.py
|
||||||
# Инициализация пакета keyboards, для работы с клавиатурами
|
# Инициализация пакета inline_keyboards, для работы с инлайн клавиатурами
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .actor_kb import *
|
from .actor_kb import *
|
||||||
@@ -8,7 +8,3 @@ from .randnum_kb import *
|
|||||||
# Объявление роутера и настройка экспорта модулей
|
# Объявление роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", "actor_kb", "ButtonInl")
|
__all__ = ("router", "actor_kb", "ButtonInl")
|
||||||
router = Router(name="inline_kb_router")
|
router = Router(name="inline_kb_router")
|
||||||
|
|
||||||
|
|
||||||
# Список подключаемых роутеров сверху-вниз
|
|
||||||
# router.include_routers()
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# BotCode/keyboards/start_kb.py
|
# BotCode/keyboards/inline_kb/actor_kb.py
|
||||||
# Создания клавиатуры на команду: /start
|
# Создания инлайн-клавиатуры на команду: /actor
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
from aiogram.types import InlineKeyboardMarkup
|
||||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта
|
# Создание роутера и настройка экспорта
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# BotCode/keyboards/start_kb.py
|
# BotCode/keyboards/inline_kb/randnum_kb.py
|
||||||
# Создания клавиатуры на команду: /start
|
# Создания инлайн-клавиатуры на команду: /randnum
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
from aiogram.types import InlineKeyboardMarkup
|
||||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта
|
# Создание роутера и настройка экспорта
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# BotCode/keyboards/__init__.py
|
# BotCode/keyboards/reply_kb/__init__.py
|
||||||
# Инициализация пакета keyboards, для работы с клавиатурами
|
# Инициализация пакета reply_kb, для работы с клавиатурами
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .start_kb import router as start_kb_router
|
from .start_kb import router as start_kb_router
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# BotCode/keyboards/help_kb.py
|
# BotCode/keyboards/reply_kb/help_kb.py
|
||||||
# Создание клавиатуры для сообщения: "Помогите!"
|
# Создание клавиатуры для сообщения: "Помогите!"
|
||||||
|
|
||||||
from aiogram import Router, F
|
from aiogram import Router, F
|
||||||
@@ -22,15 +22,6 @@ def get_help_kb() -> ReplyKeyboardMarkup:
|
|||||||
]
|
]
|
||||||
|
|
||||||
buttons_row = [KeyboardButton(text=num) for num in numbers]
|
buttons_row = [KeyboardButton(text=num) for num in numbers]
|
||||||
# Один из способов создания клавиатур
|
|
||||||
|
|
||||||
#
|
|
||||||
# markup = ReplyKeyboardMarkup(
|
|
||||||
# keyboard=[buttons_row],
|
|
||||||
# resize_keyboard=True,
|
|
||||||
# )
|
|
||||||
# return markup
|
|
||||||
|
|
||||||
builder = ReplyKeyboardBuilder()
|
builder = ReplyKeyboardBuilder()
|
||||||
for num in numbers:
|
for num in numbers:
|
||||||
builder.button(text=num)
|
builder.button(text=num)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# BotCode/keyboards/more_kb.py
|
# BotCode/keyboards/reply_kb/more_kb.py
|
||||||
# Создания клавиатуры на команду: /more
|
# Создания клавиатуры на команду: /more
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# BotCode/keyboards/start_kb.py
|
# BotCode/keyboards/reply_kb/start_kb.py
|
||||||
# Создания клавиатуры на команду: /start
|
# Создания клавиатуры на команду: /start
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
# BotCode/routers/__init__.py
|
# BotCode/routers/__init__.py
|
||||||
# Инициализация пакета routers, для работы с асинхронными обработчиками
|
# Инициализация пакета routers, для работы с асинхронными обработчиками
|
||||||
# Пакет старых файлов отключен!!
|
|
||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .callback_handlers import router as callback_handlers_router
|
from .callback_handlers import router as callback_handlers_router
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ from BotLibrary import *
|
|||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
__all__ = ("router",)
|
__all__ = ("router",)
|
||||||
|
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
router = Router(name="secret_message_router")
|
router = Router(name="secret_message_router")
|
||||||
log_type = "Admin"
|
log_type = "Admin"
|
||||||
|
|
||||||
@@ -16,12 +19,13 @@ keywords = ["secret", "секрет", "ыускуе", "ctrhtn",
|
|||||||
|
|
||||||
|
|
||||||
# Обработчик команды /secret или сообщений с текстом из списка keywords
|
# Обработчик команды /secret или сообщений с текстом из списка keywords
|
||||||
@router.message(F.from_user.id.in_(ListId.important_ids),
|
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||||
Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.from_user.id.in_(ListId.important_ids), F.text.lower().in_(keywords))
|
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||||
|
F.text.lower().in_(keywords))
|
||||||
async def secret_admin_message(message: types.Message):
|
async def secret_admin_message(message: types.Message):
|
||||||
text = f"Привет, <b>важная персона</b>!"
|
text = f"Привет, <b>важная персона</b>!"
|
||||||
await message.reply(text)
|
await message.reply(text)
|
||||||
|
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
# BotCode/routers/administration/easteggs_handlers.py
|
# BotCode/routers/administration/easteggs_handlers.py
|
||||||
# Функции с шуточными пасхалками (разобраться с логированием и ошибками)
|
# Небольшие шуточные пасхалки
|
||||||
|
|
||||||
from aiogram import Router, types, F
|
from aiogram import Router, types, F
|
||||||
from aiogram.enums import ChatAction
|
from aiogram.enums import ChatAction
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта
|
# Создание роутера и настройка экспорта
|
||||||
__all__ = ("router", "secret_admin_message_finaki", "secret_admin_message_lostik",
|
__all__ = ("router",)
|
||||||
"secret_admin_message_rishkus", "secret_admin_message_finik", "secret_admin_message_skodavano",)
|
|
||||||
router = Router(name="easteggs_router")
|
router = Router(name="easteggs_router")
|
||||||
log_type = "EastEggs"
|
log_type = "EastEggs"
|
||||||
|
|
||||||
@@ -27,7 +26,7 @@ async def secret_admin_message_finaki(message: types.Message):
|
|||||||
# Отправка фотографии
|
# Отправка фотографии
|
||||||
try:
|
try:
|
||||||
await message.reply_photo(
|
await message.reply_photo(
|
||||||
photo=types.FSInputFile(path=f"{ImportantPath.bot_personal_media}/{ImportantPath.photo}/Undertale.jpg"),
|
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Undertale.jpg"),
|
||||||
caption="ОНА МЕНЯ ЗАСТАВИЛА ПОМОГИТЕ😭... (Кст @fin_aki любит анал, тс..)",
|
caption="ОНА МЕНЯ ЗАСТАВИЛА ПОМОГИТЕ😭... (Кст @fin_aki любит анал, тс..)",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -38,11 +37,12 @@ async def secret_admin_message_finaki(message: types.Message):
|
|||||||
|
|
||||||
# Дополнительное логирование
|
# Дополнительное логирование
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст финикх
|
# Хэндлер на текст финикх
|
||||||
@router.message(F.from_user.id.in_(ListId.important_ids), F.text.lower() == "финикх")
|
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||||
|
F.text.lower() == "финикх")
|
||||||
async def secret_admin_message_finik(message: types.Message):
|
async def secret_admin_message_finik(message: types.Message):
|
||||||
text = f"Пасхалка 2 финикx найдена!"
|
text = f"Пасхалка 2 финикx найдена!"
|
||||||
await message.bot.send_chat_action(
|
await message.bot.send_chat_action(
|
||||||
@@ -53,7 +53,7 @@ async def secret_admin_message_finik(message: types.Message):
|
|||||||
photo="https://vos-mo.ru/upload/iblock/329/g0s939ge8o1n8xp7rcqnw9kkz9mcfrg2/risunok.jpg",
|
photo="https://vos-mo.ru/upload/iblock/329/g0s939ge8o1n8xp7rcqnw9kkz9mcfrg2/risunok.jpg",
|
||||||
caption="Привет, это польза Фиников!")
|
caption="Привет, это польза Фиников!")
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст андертейлкино
|
# Хэндлер на текст андертейлкино
|
||||||
@@ -68,7 +68,7 @@ async def secret_admin_message_finik(message: types.Message):
|
|||||||
photo="https://i.ytimg.com/vi/c-o4_p4YKIc/mqdefault.jpg",
|
photo="https://i.ytimg.com/vi/c-o4_p4YKIc/mqdefault.jpg",
|
||||||
caption="Меня заставила Финаки, честно!")
|
caption="Меня заставила Финаки, честно!")
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст ришкус + отправка с локального хранилища
|
# Хэндлер на текст ришкус + отправка с локального хранилища
|
||||||
@@ -80,11 +80,11 @@ async def secret_admin_message_rishkus(message: types.Message):
|
|||||||
action=ChatAction.UPLOAD_PHOTO,
|
action=ChatAction.UPLOAD_PHOTO,
|
||||||
)
|
)
|
||||||
await message.reply_photo(
|
await message.reply_photo(
|
||||||
photo=types.FSInputFile(path=f"{ImportantPath.bot_personal_media}/{ImportantPath.photo}/Кусь.jpg"),
|
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Кусь.jpg"),
|
||||||
caption="Россия для грустных",
|
caption="Россия для грустных",
|
||||||
)
|
)
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст skodavano + отправка с локального хранилища
|
# Хэндлер на текст skodavano + отправка с локального хранилища
|
||||||
@@ -96,11 +96,11 @@ async def secret_admin_message_skodavano(message: types.Message):
|
|||||||
action=ChatAction.UPLOAD_PHOTO,
|
action=ChatAction.UPLOAD_PHOTO,
|
||||||
)
|
)
|
||||||
await message.reply_photo(
|
await message.reply_photo(
|
||||||
photo=types.FSInputFile(path=f"{ImportantPath.bot_personal_media}/{ImportantPath.photo}/Vano.jpg"),
|
photo=types.FSInputFile(path=f"{ProjectPath.personal_media}/{ProjectPath.personal_photo}/Vano.jpg"),
|
||||||
caption="SkodaRacingVano24 -> Синяя изолента",
|
caption="SkodaRacingVano24 -> Синяя изолента",
|
||||||
)
|
)
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст лостикслешик + отправка с локального хранилища
|
# Хэндлер на текст лостикслешик + отправка с локального хранилища
|
||||||
@@ -117,12 +117,13 @@ async def secret_admin_message_lostik(message: types.Message):
|
|||||||
|
|
||||||
# Вывод сообщения-гифки пользователю
|
# Вывод сообщения-гифки пользователю
|
||||||
await message.reply_animation(
|
await message.reply_animation(
|
||||||
animation=types.FSInputFile(path=f"{ImportantPath.bot_personal_media}/{ImportantPath.gif}/ЛжеРайяПрайм.mp4")
|
animation=types.FSInputFile(path=f"{ProjectPath.personal_media}"
|
||||||
|
f"/{ProjectPath.personal_gif}/ЛжеРайяПрайм.mp4")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, types_message, text)
|
await cmd_logginger(message, types_message, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -159,7 +160,7 @@ async def secret_admin_message_finaki(message: types.Message):
|
|||||||
|
|
||||||
# Дополнительное логирование
|
# Дополнительное логирование
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на текст маз
|
# Хэндлер на текст маз
|
||||||
@@ -189,5 +190,4 @@ async def secret_admin_message_finaki(message: types.Message):
|
|||||||
|
|
||||||
# Дополнительное логирование
|
# Дополнительное логирование
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
from aiogram import Router
|
# BotCode/routers/callback_handlers/__init__.py
|
||||||
|
# Инициализация пакета callback_handlers, для работы с запросами бота
|
||||||
|
|
||||||
|
from aiogram import Router
|
||||||
from .actor_kb_cb import router as actor_kb_cb_router
|
from .actor_kb_cb import router as actor_kb_cb_router
|
||||||
from .randnum_kb_cb import router as randnum_kb_cb_router
|
from .randnum_kb_cb import router as randnum_kb_cb_router
|
||||||
|
|
||||||
|
# Объявление роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", )
|
__all__ = ("router", )
|
||||||
router = Router(name="callback_handlers")
|
router = Router(name="callback_handlers")
|
||||||
|
|
||||||
|
|
||||||
# Список подключаемых роутеров сверху-вниз
|
# Список подключаемых роутеров сверху-вниз
|
||||||
router.include_routers(
|
router.include_routers(
|
||||||
actor_kb_cb_router,
|
actor_kb_cb_router,
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
from random import randint
|
# BotCode/routers/callback_handlers/actor_kb_cb.py
|
||||||
|
# Обработчик запросов в команде /actor
|
||||||
|
|
||||||
|
from random import randint
|
||||||
from aiogram import Router, F
|
from aiogram import Router, F
|
||||||
from aiogram.types import CallbackQuery
|
from aiogram.types import CallbackQuery
|
||||||
from keyboards.inline_kb.actor_kb import ButtonInl
|
from keyboards.inline_kb.actor_kb import ButtonInl
|
||||||
|
|
||||||
|
# Создание роутера и настройка экспорта модулей
|
||||||
|
__all__ = ("router",)
|
||||||
router = Router(name="actor_kb_cb_router")
|
router = Router(name="actor_kb_cb_router")
|
||||||
|
|
||||||
|
|
||||||
|
# Тестирование реферальных ссылок
|
||||||
@router.callback_query(F.data == ButtonInl.random_site_cbd)
|
@router.callback_query(F.data == ButtonInl.random_site_cbd)
|
||||||
async def random_site_cb(callback_query: CallbackQuery):
|
async def random_site_cb(callback_query: CallbackQuery):
|
||||||
bot_me = await callback_query.bot.me()
|
bot_me = await callback_query.bot.me()
|
||||||
@@ -14,6 +20,7 @@ async def random_site_cb(callback_query: CallbackQuery):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Тестирование уведомления для пользователя
|
||||||
@router.callback_query(F.data == ButtonInl.random_num_dice_cbd)
|
@router.callback_query(F.data == ButtonInl.random_num_dice_cbd)
|
||||||
async def random_num_dice_cb(callback_query: CallbackQuery):
|
async def random_num_dice_cb(callback_query: CallbackQuery):
|
||||||
await callback_query.answer(
|
await callback_query.answer(
|
||||||
@@ -22,6 +29,7 @@ async def random_num_dice_cb(callback_query: CallbackQuery):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Тестирование модального окна для пользователя
|
||||||
@router.callback_query(F.data == ButtonInl.random_num_modal_cdb)
|
@router.callback_query(F.data == ButtonInl.random_num_modal_cdb)
|
||||||
async def random_num_dice_modal_cb(callback_query: CallbackQuery):
|
async def random_num_dice_modal_cb(callback_query: CallbackQuery):
|
||||||
await callback_query.answer(
|
await callback_query.answer(
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
from random import randint
|
# BotCode/routers/callback_handlers/randnum_kb_cb.py
|
||||||
|
# Обработчик запросов в команде /randnum
|
||||||
|
|
||||||
|
from random import randint
|
||||||
from aiogram import Router, F
|
from aiogram import Router, F
|
||||||
from aiogram.types import CallbackQuery
|
from aiogram.types import CallbackQuery
|
||||||
from keyboards.inline_kb.randnum_kb import ButtonInl, get_randnum_kb
|
from keyboards.inline_kb.randnum_kb import ButtonInl, get_randnum_kb
|
||||||
|
|
||||||
|
# Создание роутера и настройка экспорта модулей
|
||||||
|
__all__ = ("router",)
|
||||||
router = Router(name="randnum_kb_cb_router")
|
router = Router(name="randnum_kb_cb_router")
|
||||||
|
|
||||||
|
|
||||||
|
# Тестирование редактирования сообщения
|
||||||
@router.callback_query(F.data == ButtonInl.mark_cbd)
|
@router.callback_query(F.data == ButtonInl.mark_cbd)
|
||||||
async def random_site_cb(callback_query: CallbackQuery):
|
async def random_site_cb(callback_query: CallbackQuery):
|
||||||
await callback_query.answer()
|
await callback_query.answer()
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
|
||||||
from .user_cmd.start_cmd import log_type as start_cmd_text
|
from .user_cmd.start_cmd import description as start_description, log_type as start_cmd
|
||||||
from .user_cmd.help_cmd import log_type as help_cmd_text
|
from .user_cmd.help_cmd import description as help_description, log_type as help_cmd
|
||||||
from .user_cmd.exit_cmd import log_type as exit_cmd_text
|
from .user_cmd.exit_cmd import description as exit_description, log_type as exit_cmd
|
||||||
from .user_cmd.start_time_cmd import log_type as start_time_cmd_text
|
from .user_cmd.start_time_cmd import description as start_time_description,log_type as start_time_cmd
|
||||||
|
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
@@ -23,16 +23,15 @@ secret_keywords = ["setcommands", "setcommand", "ыуесщььфтвы", "ыу
|
|||||||
|
|
||||||
|
|
||||||
# Хэндлер на команду /setcommands для использования в чате
|
# Хэндлер на команду /setcommands для использования в чате
|
||||||
@router.message(F.from_user.id.in_(ListId.important_ids),
|
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||||
Command(*secret_keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
Command(*secret_keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
|
@router.message(F.from_user.id.func(lambda user_id: str(user_id) in DataID.important.keys()),
|
||||||
|
F.text.lower().in_(secret_keywords))
|
||||||
async def set_commands():
|
async def set_commands():
|
||||||
bot_commands = [
|
bot_commands = [
|
||||||
types.BotCommand(command=start_cmd_text.lower(), description="Запустить бота"),
|
types.BotCommand(command=start_cmd.lower(), description=start_description),
|
||||||
types.BotCommand(command=help_cmd_text.lower(), description="Получить помощь"),
|
types.BotCommand(command=help_cmd.lower(), description=help_description),
|
||||||
types.BotCommand(command=help_cmd_text.lower(), description="Получить помощь"),
|
types.BotCommand(command=start_time_cmd.lower(), description=start_time_description),
|
||||||
types.BotCommand(command=start_time_cmd_text.lower(), description="Время запуска"),
|
types.BotCommand(command=exit_cmd.lower(), description=exit_description),
|
||||||
types.BotCommand(command=exit_cmd_text.lower(), description="Выйти из чата (в разработке)"),
|
|
||||||
types.BotCommand(command="command", description="Пустая команда"),
|
|
||||||
]
|
]
|
||||||
await bot.set_my_commands(bot_commands)
|
await bot.set_my_commands(bot_commands)
|
||||||
return bot_commands
|
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from keyboards.inline_kb.actor_kb import get_actor_kb
|
from keyboards.inline_kb.actor_kb import get_actor_kb
|
||||||
|
from routers.msg_default import *
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера, переменных и настройка экспорта модулей
|
||||||
__all__ = ("router", "cmd_actor", "log_type",)
|
__all__ = ("router", "cmd_actor", "log_type",)
|
||||||
router = Router(name="actor_router")
|
router = Router(name="actor_router")
|
||||||
log_type = "Actor"
|
log_type = "Actor"
|
||||||
|
description = "Описание"
|
||||||
|
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
@@ -17,7 +19,7 @@ keywords = ["actor", "фсещк",]
|
|||||||
|
|
||||||
|
|
||||||
# Обработчик команды /actor
|
# Обработчик команды /actor
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
async def cmd_actor(message: types.Message):
|
async def cmd_actor(message: types.Message):
|
||||||
try:
|
try:
|
||||||
@@ -33,7 +35,7 @@ async def cmd_actor(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -4,18 +4,20 @@
|
|||||||
from aiogram import Router, types, F
|
from aiogram import Router, types, F
|
||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и экспорта модулей
|
# Создание роутера, переменных и экспорта модулей
|
||||||
__all__ = ("router", "exit_cmd", "log_type",)
|
__all__ = ("router", "exit_cmd", "log_type", "description")
|
||||||
router = Router(name="exit_router")
|
router = Router(name="exit_router")
|
||||||
log_type = "Exit"
|
log_type = "Exit"
|
||||||
|
description = "Выйти из чата (в разработке)"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
keywords = ["выход", "ds[j;", "exit", "учше",]
|
keywords = ["выход", "ds[j;", "exit", "учше",]
|
||||||
|
|
||||||
|
|
||||||
# Обработчик команды /exit
|
# Обработчик команды /exit
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
async def exit_cmd(message: types.Message):
|
async def exit_cmd(message: types.Message):
|
||||||
try:
|
try:
|
||||||
@@ -26,7 +28,7 @@ async def exit_cmd(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from keyboards.reply_kb.help_kb import get_help_kb
|
from keyboards.reply_kb.help_kb import get_help_kb
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и экспорта модулей
|
# Создание роутера, переменных и экспорта модулей
|
||||||
__all__ = ("router", "cmd_help", "log_type",)
|
__all__ = ("router", "cmd_help", "log_type", "description")
|
||||||
router = Router(name="help_router")
|
router = Router(name="help_router")
|
||||||
log_type = "Help"
|
log_type = "Help"
|
||||||
|
description = "Получить помощь"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
keywords = ["help", "info", "помощь", "инфо", "?", "информация", "рудз", "штащ", "byaj",
|
keywords = ["help", "info", "помощь", "инфо", "?", "информация", "рудз", "штащ", "byaj",
|
||||||
@@ -17,7 +19,7 @@ keywords = ["help", "info", "помощь", "инфо", "?", "информаци
|
|||||||
|
|
||||||
|
|
||||||
# Хэндлер на команду /info или /help
|
# Хэндлер на команду /info или /help
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
async def cmd_help(message: types.Message):
|
async def cmd_help(message: types.Message):
|
||||||
try:
|
try:
|
||||||
@@ -28,7 +30,7 @@ async def cmd_help(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -5,18 +5,20 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from keyboards.reply_kb.more_kb import get_more_kb
|
from keyboards.reply_kb.more_kb import get_more_kb
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и экспорта модулей
|
# Создание роутера, переменных и экспорта модулей
|
||||||
__all__ = ("router", "cmd_start", "log_type",)
|
__all__ = ("router", "cmd_start", "log_type",)
|
||||||
router = Router(name="more_router")
|
router = Router(name="more_router")
|
||||||
log_type = "More"
|
log_type = "More"
|
||||||
|
description = "Описание"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
keywords = ["more", "ьщку",]
|
keywords = ["more", "ьщку",]
|
||||||
|
|
||||||
|
|
||||||
# Обработчик команды /more
|
# Обработчик команды /more
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
async def cmd_start(message: types.Message):
|
async def cmd_start(message: types.Message):
|
||||||
try:
|
try:
|
||||||
@@ -26,7 +28,7 @@ async def cmd_start(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -5,18 +5,20 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from keyboards.inline_kb.randnum_kb import get_randnum_kb
|
from keyboards.inline_kb.randnum_kb import get_randnum_kb
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и экспорта модулей
|
# Создание роутера, переменных и экспорта модулей
|
||||||
__all__ = ("router", "cmd_randnum", "log_type",)
|
__all__ = ("router", "cmd_randnum", "log_type",)
|
||||||
router = Router(name="randnum_router")
|
router = Router(name="randnum_router")
|
||||||
log_type = "Randnum"
|
log_type = "Randnum"
|
||||||
|
description = "Описание"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
keywords = ["кфтвтгь", "randnum",]
|
keywords = ["кфтвтгь", "randnum",]
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на команду /randnum
|
# Хэндлер на команду /randnum
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
async def cmd_randnum(message: types.Message):
|
async def cmd_randnum(message: types.Message):
|
||||||
text = "Работа с рандомом оценок!"
|
text = "Работа с рандомом оценок!"
|
||||||
@@ -27,4 +29,4 @@ async def cmd_randnum(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ from aiogram import Router, types, F
|
|||||||
from aiogram.filters import Command, CommandStart
|
from aiogram.filters import Command, CommandStart
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from keyboards.reply_kb.start_kb import get_start_kb
|
from keyboards.reply_kb.start_kb import get_start_kb
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера, переменных и настройка экспорта модулей
|
||||||
__all__ = ("router", "cmd_start", "log_type",)
|
__all__ = ("router", "cmd_start", "log_type", "description")
|
||||||
router = Router(name="start_router")
|
router = Router(name="start_router")
|
||||||
log_type = "Start"
|
log_type = "Start"
|
||||||
|
description = "Запустить бота"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
keywords = ["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы",
|
keywords = ["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы",
|
||||||
@@ -17,7 +19,7 @@ keywords = ["start", "старт", "запуск", "пуск", "on", "вкл", "
|
|||||||
|
|
||||||
|
|
||||||
# Обработчик команды /start
|
# Обработчик команды /start
|
||||||
@router.message(Command(*keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(keywords))
|
@router.message(F.text.lower().in_(keywords))
|
||||||
@router.message(CommandStart())
|
@router.message(CommandStart())
|
||||||
async def cmd_start(message: types.Message):
|
async def cmd_start(message: types.Message):
|
||||||
@@ -30,7 +32,7 @@ async def cmd_start(message: types.Message):
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -4,11 +4,13 @@
|
|||||||
from aiogram import Router, types, F
|
from aiogram import Router, types, F
|
||||||
from aiogram.filters import Command
|
from aiogram.filters import Command
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
from routers.msg_default import msg_default
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера, переменных и настройка экспорта модулей
|
||||||
__all__ = ("router", "start_time", "log_type",)
|
__all__ = ("router", "start_time", "log_type", "description")
|
||||||
router = Router(name="start_time_router")
|
router = Router(name="start_time_router")
|
||||||
log_type = "Start_Time"
|
log_type = "Start_Time"
|
||||||
|
description = "Время запуска"
|
||||||
|
|
||||||
# Список ключевых слов для команды
|
# Список ключевых слов для команды
|
||||||
start_time_keywords = ["start_time", "stime", "старт_время", "время_старта", "с_время",
|
start_time_keywords = ["start_time", "stime", "старт_время", "время_старта", "с_время",
|
||||||
@@ -17,7 +19,7 @@ start_time_keywords = ["start_time", "stime", "старт_время", "врем
|
|||||||
|
|
||||||
|
|
||||||
# Хэндлер на команду /start_time
|
# Хэндлер на команду /start_time
|
||||||
@router.message(Command(*start_time_keywords, prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command(*start_time_keywords, prefix=BotVariables.prefixs, ignore_case=True))
|
||||||
@router.message(F.text.lower().in_(start_time_keywords))
|
@router.message(F.text.lower().in_(start_time_keywords))
|
||||||
async def start_time(message: types.Message, started_at: str, started_at_msk: str):
|
async def start_time(message: types.Message, started_at: str, started_at_msk: str):
|
||||||
try:
|
try:
|
||||||
@@ -29,7 +31,7 @@ async def start_time(message: types.Message, started_at: str, started_at_msk: st
|
|||||||
|
|
||||||
# Активация логгера
|
# Активация логгера
|
||||||
await cmd_logginger(message, log_type, text)
|
await cmd_logginger(message, log_type, text)
|
||||||
return text
|
await msg_default(message)
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -4,22 +4,19 @@
|
|||||||
|
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
from aiogram import Router, types
|
from aiogram import Router, types
|
||||||
|
from routers.msg_default import *
|
||||||
from ..downloads.download_avatar_all import download_avatar
|
|
||||||
|
|
||||||
# Настройка экспорта модулей и роутера
|
# Настройка экспорта модулей и роутера
|
||||||
__all__ = ("router",)
|
__all__ = ("router",)
|
||||||
router = Router(name="common_message_router")
|
router = Router(name="common_message_router")
|
||||||
|
log_type = "Messages"
|
||||||
|
|
||||||
|
|
||||||
# Хэндлер на все сообщения и записывает данные
|
# Хэндлер на все сообщения и записывает данные
|
||||||
@router.message()
|
@router.message()
|
||||||
async def handle_all_messages(message: types.Message):
|
async def handle_all_messages(message: types.Message):
|
||||||
log_type = "Messages"
|
user_name = find_imp_id(message.from_user.id)
|
||||||
name = find_chat_id(message)
|
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
|
|
||||||
await logginger(message)
|
await common_msg_logginger(message, user_name, message_type, log_type)
|
||||||
await download_avatar(message)
|
await msg_default(message)
|
||||||
|
|
||||||
await common_msg_logginger(message, name, message_type, log_type)
|
|
||||||
return f"Получено новое сообщение!"
|
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
|
# BotCode/routers/common/phrase.py
|
||||||
|
# Обработчик особых команд
|
||||||
|
|
||||||
from aiogram import Router, types, F
|
from aiogram import Router, types, F
|
||||||
from aiogram.types import ReplyKeyboardRemove
|
from aiogram.types import ReplyKeyboardRemove
|
||||||
|
|
||||||
from BotLibrary import find_chat_id, types_message, common_msg_logginger
|
from routers.msg_default import *
|
||||||
|
from BotLibrary import find_imp_id, types_message, common_msg_logginger
|
||||||
from keyboards.reply_kb.start_kb import ButtonText
|
from keyboards.reply_kb.start_kb import ButtonText
|
||||||
|
|
||||||
# Настройка экспорта модулей и роутера
|
# Настройка экспорта модулей и роутера
|
||||||
__all__ = ("router",)
|
__all__ = ("router",)
|
||||||
|
|
||||||
router = Router(name="phrase_message_router")
|
router = Router(name="phrase_message_router")
|
||||||
|
|
||||||
|
|
||||||
@@ -14,7 +19,7 @@ router = Router(name="phrase_message_router")
|
|||||||
async def hello_message(message: types.Message):
|
async def hello_message(message: types.Message):
|
||||||
log_type = "Start_Button"
|
log_type = "Start_Button"
|
||||||
text_message = f"Привет, я бот. А ты кто?"
|
text_message = f"Привет, я бот. А ты кто?"
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
|
|
||||||
await message.reply(
|
await message.reply(
|
||||||
@@ -22,8 +27,7 @@ async def hello_message(message: types.Message):
|
|||||||
)
|
)
|
||||||
|
|
||||||
await common_msg_logginger(message, name, message_type, log_type)
|
await common_msg_logginger(message, name, message_type, log_type)
|
||||||
return text_message
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Ответ бота на кнопку или сообщение: "Помощь!"
|
# Ответ бота на кнопку или сообщение: "Помощь!"
|
||||||
@@ -31,7 +35,7 @@ async def hello_message(message: types.Message):
|
|||||||
async def help_message(message: types.Message):
|
async def help_message(message: types.Message):
|
||||||
log_type = "Help_Button"
|
log_type = "Help_Button"
|
||||||
text_message = f"Привет, я надеюсь помогу тебе... Лучше напиши /help.."
|
text_message = f"Привет, я надеюсь помогу тебе... Лучше напиши /help.."
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
|
|
||||||
await message.reply(
|
await message.reply(
|
||||||
@@ -39,7 +43,7 @@ async def help_message(message: types.Message):
|
|||||||
)
|
)
|
||||||
|
|
||||||
await common_msg_logginger(message, name, message_type, log_type)
|
await common_msg_logginger(message, name, message_type, log_type)
|
||||||
return text_message
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Ответ бота на кнопку или сообщение: "Пока-пока!"
|
# Ответ бота на кнопку или сообщение: "Пока-пока!"
|
||||||
@@ -47,7 +51,7 @@ async def help_message(message: types.Message):
|
|||||||
async def bye_message(message: types.Message):
|
async def bye_message(message: types.Message):
|
||||||
log_type = "Messages"
|
log_type = "Messages"
|
||||||
text_message = f"Надеюсь скоро увидимся! Захочешь поговорить нажми на /start!"
|
text_message = f"Надеюсь скоро увидимся! Захочешь поговорить нажми на /start!"
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
|
|
||||||
await message.reply(
|
await message.reply(
|
||||||
@@ -56,15 +60,15 @@ async def bye_message(message: types.Message):
|
|||||||
)
|
)
|
||||||
|
|
||||||
await common_msg_logginger(message, name, message_type, log_type)
|
await common_msg_logginger(message, name, message_type, log_type)
|
||||||
return text_message
|
await msg_default(message)
|
||||||
|
|
||||||
|
|
||||||
# Ответ бота на сообщение: "Кошмар"
|
# Ответ бота на сообщение: "Кошмар"
|
||||||
@router.message(F.text.lower() == "кошмар")
|
@router.message(F.text.lower() == "кошмар")
|
||||||
async def scary_message(message: types.Message):
|
async def scary_message(message: types.Message):
|
||||||
log_type = "Messages"
|
log_type = "Scary"
|
||||||
text_message = f"Кошмар, тот еще!"
|
text_message = f"Кошмар, тот еще!"
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
|
|
||||||
await message.reply(
|
await message.reply(
|
||||||
@@ -72,4 +76,4 @@ async def scary_message(message: types.Message):
|
|||||||
)
|
)
|
||||||
|
|
||||||
await common_msg_logginger(message, name, message_type, log_type)
|
await common_msg_logginger(message, name, message_type, log_type)
|
||||||
return text_message
|
await msg_default(message)
|
||||||
|
|||||||
@@ -3,15 +3,17 @@
|
|||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .download_handlers import router as download_media_router
|
from .download_handlers import router as download_media_router
|
||||||
from .download_user_avatar import router as user_avatar_router
|
|
||||||
|
from .download_avatar_all import *
|
||||||
|
from .download_chat_avatar import *
|
||||||
|
from .download_user_avatar import *
|
||||||
|
|
||||||
# Объявление роутера и настройка экспорта модулей
|
# Объявление роутера и настройка экспорта модулей
|
||||||
__all__ = ("router",)
|
__all__ = ("router", "download_avatar_all", "download_chat_avatar", "download_user_photos", "download_avatar")
|
||||||
router = Router(name="downloads_head_router")
|
router = Router(name="downloads_head_router")
|
||||||
|
|
||||||
|
|
||||||
# Список подключаемых роутеров сверху-вниз
|
# Список подключаемых роутеров сверху-вниз
|
||||||
router.include_routers(
|
router.include_routers(
|
||||||
download_media_router,
|
download_media_router,
|
||||||
user_avatar_router,
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
# BotCode/routers/downloads/download_avatar_all.py
|
# BotCode/routers/downloads/download_avatar_all.py
|
||||||
# Объединение закачки аватаров всех типов
|
# Объединение закачки аватаров всех типов
|
||||||
|
from BotLibrary import write_user_info_to_file
|
||||||
from .download_chat_avatar import download_chat_avatar
|
from .download_chat_avatar import download_chat_avatar
|
||||||
from .download_user_avatar import download_user_photos
|
from .download_user_avatar import download_user_photos
|
||||||
|
|
||||||
# Настройка экспорта модулей
|
# Настройка экспорта модулей
|
||||||
__all__ = ("download_avatar",)
|
__all__ = ("download_avatar", "download_chat_avatar", "download_user_photos")
|
||||||
|
|
||||||
|
|
||||||
# Функция объединения закачки аватарок
|
# Функция объединения закачки аватарок
|
||||||
async def download_avatar(message):
|
async def download_avatar(message):
|
||||||
await download_chat_avatar(message, message.chat)
|
await download_chat_avatar(message)
|
||||||
await download_user_photos(message)
|
await download_user_photos(message)
|
||||||
return f"Успешная закачка аватаров!"
|
write_user_info_to_file(message.from_user)
|
||||||
|
|||||||
@@ -1,32 +1,29 @@
|
|||||||
|
# BotCode/routers/downloads/download_chat_avatar.py
|
||||||
|
# Функция скачивания аватара чата
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import requests
|
import aiohttp
|
||||||
from aiogram import Router
|
|
||||||
from aiogram.types import Chat
|
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", "download_chat_avatar",)
|
__all__ = ("download_chat_avatar",)
|
||||||
router = Router(name="avatar_chat_router")
|
|
||||||
log_type = "AvatarChat"
|
log_type = "AvatarChat"
|
||||||
|
|
||||||
|
|
||||||
# Функция закачки аватарок чатов
|
# Функция закачки аватарок чатов
|
||||||
async def download_chat_avatar(message, chat: Chat):
|
async def download_chat_avatar(message):
|
||||||
try:
|
try:
|
||||||
|
chat = message.chat
|
||||||
# Проверка типа чата (группа или супергруппа)
|
# Проверка типа чата (группа или супергруппа)
|
||||||
if chat.type in ["group", "supergroup"]:
|
if chat.type in ["group", "supergroup"]:
|
||||||
# Получаем информацию о чате (включая фото)
|
|
||||||
chat_info = await bot.get_chat(chat.id)
|
chat_info = await bot.get_chat(chat.id)
|
||||||
|
|
||||||
chat_id = chat.id
|
# Проверка на наличие фотографий чата
|
||||||
|
|
||||||
# Проверка наличия аватара
|
|
||||||
if not chat_info.photo:
|
if not chat_info.photo:
|
||||||
text_error = f"Чат с ID {chat_id} не имеет аватара."
|
text_error = f"Чат с ID {chat.id} не имеет аватара."
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|
||||||
# Получаем file_id для фото (высокое качество приоритетно)
|
|
||||||
file_id = (
|
file_id = (
|
||||||
getattr(chat_info.photo, 'big_file_id', None) or
|
getattr(chat_info.photo, 'big_file_id', None) or
|
||||||
getattr(chat_info.photo, 'medium_file_id', None) or
|
getattr(chat_info.photo, 'medium_file_id', None) or
|
||||||
@@ -34,39 +31,41 @@ async def download_chat_avatar(message, chat: Chat):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not file_id:
|
if not file_id:
|
||||||
text_error = f"Не удалось получить file_id аватара чата с ID {chat_id}."
|
text_error = f"Не удалось получить file_id аватара чата с ID {chat.id}."
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|
||||||
# Получаем file_info для фото
|
|
||||||
file_info = await bot.get_file(file_id)
|
file_info = await bot.get_file(file_id)
|
||||||
|
|
||||||
# Строим URL для скачивания файла
|
|
||||||
file_url = f"https://api.telegram.org/file/bot{bot.token}/{file_info.file_path}"
|
file_url = f"https://api.telegram.org/file/bot{bot.token}/{file_info.file_path}"
|
||||||
|
|
||||||
# Формируем путь для сохранения фото
|
chat_id = find_imp_id(chat.id)
|
||||||
chat_id = find_chat_id(message)
|
save_dir = f"{ProjectPath.chat_avatar}/{chat_id}"
|
||||||
save_dir = f"{ImportantPath.chat_avatar}/{chat_id}"
|
|
||||||
os.makedirs(save_dir, exist_ok=True)
|
os.makedirs(save_dir, exist_ok=True)
|
||||||
|
|
||||||
file_extension = os.path.splitext(file_info.file_path)[-1]
|
file_extension = os.path.splitext(file_info.file_path)[-1]
|
||||||
file_name = f"avatar{file_extension}"
|
file_name = f"avatar{file_extension}"
|
||||||
save_path = os.path.join(save_dir, file_name)
|
save_path = os.path.join(save_dir, file_name)
|
||||||
|
|
||||||
# Скачиваем аватар
|
# Асинхронное скачивание
|
||||||
response = requests.get(file_url, stream=True)
|
async with aiohttp.ClientSession() as session:
|
||||||
if response.status_code == 200:
|
async with session.get(file_url) as response:
|
||||||
|
if response.status == 200:
|
||||||
with open(save_path, "wb") as file:
|
with open(save_path, "wb") as file:
|
||||||
for chunk in response.iter_content(chunk_size=8192):
|
while True:
|
||||||
|
chunk = await response.content.read(8192)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
file.write(chunk)
|
file.write(chunk)
|
||||||
return f"Фото аватара чата с ID {chat_id} успешно скачано."
|
return f"Фото аватара чата с ID {chat_id} успешно скачано."
|
||||||
|
|
||||||
else:
|
else:
|
||||||
text_error = f"Не удалось скачать фото аватара чата с ID {chat_id}. Статус: {response.status_code}"
|
text_error = f"Не удалось скачать фото аватара чата с ID {chat_id}. Статус: {response.status}"
|
||||||
logger.bind(log_type=log_type, user=chat_id).error(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
chat = message.chat
|
||||||
text_error = f"Ошибка при скачивании фото аватара чата с ID {chat.id}: {e}"
|
text_error = f"Ошибка при скачивании фото аватара чата с ID {chat.id}: {e}"
|
||||||
logger.bind(log_type=log_type, user=chat.id).exception(text_error)
|
logger.bind(log_type=log_type, user=chat.id).error(text_error)
|
||||||
return text_error
|
return text_error
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ log_type = "Media"
|
|||||||
async def handle_media(message: types.Message):
|
async def handle_media(message: types.Message):
|
||||||
try:
|
try:
|
||||||
await download_avatar(message)
|
await download_avatar(message)
|
||||||
name = find_chat_id(message)
|
name = find_imp_id(message.from_user.id)
|
||||||
await logginger(message)
|
await logginger(message)
|
||||||
file_id = None
|
file_id = None
|
||||||
|
|
||||||
@@ -28,8 +28,8 @@ async def handle_media(message: types.Message):
|
|||||||
media = message.video if message.content_type == types.ContentType.VIDEO else message.animation
|
media = message.video if message.content_type == types.ContentType.VIDEO else message.animation
|
||||||
file_extension = media.mime_type.split('/')[-1] # Получаем расширение файла (например, "mp4" или "gif")
|
file_extension = media.mime_type.split('/')[-1] # Получаем расширение файла (например, "mp4" или "gif")
|
||||||
file_name = f"{media.file_id}.{file_extension}" # Используем file_id и расширение для имени
|
file_name = f"{media.file_id}.{file_extension}" # Используем file_id и расширение для имени
|
||||||
save_dir = ImportantPath.video_directory if message.content_type == types.ContentType.VIDEO \
|
save_dir = ProjectPath.received_video if message.content_type == types.ContentType.VIDEO \
|
||||||
else ImportantPath.gif_directory
|
else ProjectPath.received_gif
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.PHOTO:
|
elif message.content_type == types.ContentType.PHOTO:
|
||||||
media = message.photo
|
media = message.photo
|
||||||
@@ -38,22 +38,22 @@ async def handle_media(message: types.Message):
|
|||||||
file_info = await bot.get_file(file_id)
|
file_info = await bot.get_file(file_id)
|
||||||
# Имя файла будет взято из file_path, который содержит оригинальное имя файла
|
# Имя файла будет взято из file_path, который содержит оригинальное имя файла
|
||||||
file_name = file_info.file_path.split('/')[-1] # Используем имя файла из пути
|
file_name = file_info.file_path.split('/')[-1] # Используем имя файла из пути
|
||||||
save_dir = ImportantPath.photo_directory
|
save_dir = ProjectPath.received_photo
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.VOICE:
|
elif message.content_type == types.ContentType.VOICE:
|
||||||
media = message.voice
|
media = message.voice
|
||||||
file_name = f"{media.file_id}.ogg" # Для голосовых сообщений используем file_id и расширение .ogg
|
file_name = f"{media.file_id}.ogg" # Для голосовых сообщений используем file_id и расширение .ogg
|
||||||
save_dir = ImportantPath.voice_directory
|
save_dir = ProjectPath.received_voice
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.VIDEO_NOTE:
|
elif message.content_type == types.ContentType.VIDEO_NOTE:
|
||||||
media = message.video_note
|
media = message.video_note
|
||||||
file_name = f"{media.file_id}.mp4" # Для видеосообщений используем file_id и расширение .mp4
|
file_name = f"{media.file_id}.mp4" # Для видеосообщений используем file_id и расширение .mp4
|
||||||
save_dir = ImportantPath.videonote_directory
|
save_dir = ProjectPath.received_videonote
|
||||||
|
|
||||||
elif message.content_type == types.ContentType.DOCUMENT:
|
elif message.content_type == types.ContentType.DOCUMENT:
|
||||||
media = message.document
|
media = message.document
|
||||||
file_name = media.file_name # Для видеосообщений используем file_id и расширение .mp4
|
file_name = media.file_name # Для видеосообщений используем file_id и расширение .mp4
|
||||||
save_dir = ImportantPath.document_directory
|
save_dir = ProjectPath.received_document
|
||||||
|
|
||||||
else:
|
else:
|
||||||
(logger.bind(log_type=log_type, user=message.from_user.username)
|
(logger.bind(log_type=log_type, user=message.from_user.username)
|
||||||
|
|||||||
@@ -2,35 +2,31 @@
|
|||||||
# Закачка всех аватаров пользователей
|
# Закачка всех аватаров пользователей
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from aiogram import Router, types
|
from aiogram import types
|
||||||
from aiogram.types import UserProfilePhotos
|
from aiogram.types import UserProfilePhotos
|
||||||
from BotLibrary import *
|
from BotLibrary import *
|
||||||
|
|
||||||
|
|
||||||
# Создание роутера и настройка экспорта модулей
|
# Создание роутера и настройка экспорта модулей
|
||||||
__all__ = ("router", "download_user_photos",)
|
__all__ = ("download_user_photos",)
|
||||||
router = Router(name="avatar_router")
|
|
||||||
log_type = "AvatarUser"
|
log_type = "AvatarUser"
|
||||||
|
|
||||||
|
|
||||||
# Функция закачки аватарок пользователя
|
# Функция закачки аватарок пользователя
|
||||||
async def download_user_photos(message: types.Message):
|
async def download_user_photos(message: types.Message):
|
||||||
try:
|
try:
|
||||||
# Получение ID пользователя
|
# Проверка на наличие в списке "важных" пользователей
|
||||||
user_id = message.from_user.id
|
user_id = find_imp_id(message.from_user.id)
|
||||||
|
|
||||||
# Получение аватарок пользователя
|
# Получение аватарок пользователя
|
||||||
user_profile_photos: UserProfilePhotos = await bot.get_user_profile_photos(user_id)
|
user_profile_photos: UserProfilePhotos = await bot.get_user_profile_photos(message.from_user.id)
|
||||||
|
|
||||||
# Проверка на наличие в списке "важных" пользователей
|
|
||||||
user_id = find_people_id(user_id)
|
|
||||||
|
|
||||||
# Проверка наличия фотографий
|
# Проверка наличия фотографий
|
||||||
if user_profile_photos.total_count == 0:
|
if user_profile_photos.total_count == 0:
|
||||||
return f"У пользователя {user_id} нет аватарок."
|
return f"У пользователя {user_id} нет аватарок."
|
||||||
|
|
||||||
# Объявление пути и создание директории
|
# Объявление пути и создание директории
|
||||||
user_directory = f'{ImportantPath.user_avatar}/{user_id}'
|
user_directory = f'{ProjectPath.user_avatar}/{user_id}'
|
||||||
os.makedirs(user_directory, exist_ok=True)
|
os.makedirs(user_directory, exist_ok=True)
|
||||||
|
|
||||||
# Закачка аватарок пользователя
|
# Закачка аватарок пользователя
|
||||||
|
|||||||
12
BotCode/routers/msg_default.py
Normal file
12
BotCode/routers/msg_default.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# BotCode/routers/common/msg_default.py
|
||||||
|
# Небольшое облегчение для команд
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
from routers.downloads.download_avatar_all import download_avatar
|
||||||
|
from BotLibrary.analitics.message_to_file import write_message_to_file
|
||||||
|
from BotLibrary.analitics.user_data_to_file import write_user_info_to_file
|
||||||
|
|
||||||
|
async def msg_default(message):
|
||||||
|
await download_avatar(message)
|
||||||
|
await write_message_to_file(message)
|
||||||
|
write_user_info_to_file(message.from_user)
|
||||||
@@ -5,4 +5,4 @@
|
|||||||
from .analitics import *
|
from .analitics import *
|
||||||
from .library import *
|
from .library import *
|
||||||
from .media import *
|
from .media import *
|
||||||
from .config import *
|
from .configs import *
|
||||||
|
|||||||
@@ -4,6 +4,6 @@
|
|||||||
# Импортируем библиотеки для экспорта
|
# Импортируем библиотеки для экспорта
|
||||||
from .start_info_out import *
|
from .start_info_out import *
|
||||||
from .message_to_file import *
|
from .message_to_file import *
|
||||||
from .type_messages import *
|
from .types_msg import *
|
||||||
from .user_data_to_file import *
|
from .user_data_to_file import *
|
||||||
from .find_ids import *
|
from .find_ids import *
|
||||||
|
|||||||
@@ -1,42 +1,35 @@
|
|||||||
# BotLibrary/analitics/find_ids.py
|
# BotLibrary/analitics/find_ids.py
|
||||||
# Проверка пользователя на нахождение в списках бота
|
# Проверка пользователя на нахождение в списках бота
|
||||||
|
|
||||||
from aiogram import types
|
from ..configs.list_ids import DataID
|
||||||
from config import ListId
|
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("find_people_id", "find_chat_id", "find_adm_id", "find_ban_id")
|
__all__ = ("find_imp_id", "find_adm_id", "find_ban_id")
|
||||||
log_type = "ID"
|
log_type = "ID"
|
||||||
|
|
||||||
|
|
||||||
# Функция поиска человека в списке администраторов
|
# Функция поиска человека в списке администраторов
|
||||||
def find_adm_id(message):
|
def find_adm_id(admin_id):
|
||||||
if message.from_user.id in ListId.adm_list_id:
|
admin_id = str(admin_id)
|
||||||
|
if admin_id in DataID.admins:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return f"Пользователь не является администратором!"
|
return f"Пользователь {admin_id} не является администратором!"
|
||||||
|
|
||||||
|
|
||||||
# Функция поиска человека в списке администраторов
|
# Функция поиска человека в списке забаненных пользователей
|
||||||
def find_ban_id(message):
|
def find_ban_id(ban_id):
|
||||||
if message.from_user.id in ListId.ban_list_id:
|
ban_id = str(ban_id)
|
||||||
|
if ban_id in DataID.ban_list:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return f"Пользователь не забанен!"
|
return f"Пользователь {ban_id} не забанен!"
|
||||||
|
|
||||||
|
|
||||||
# Функция поиска человека в списке "важных" пользователей
|
# Функция поиска человека в списке "важных" чатов
|
||||||
def find_people_id(user_id):
|
def find_imp_id(user_id):
|
||||||
# Проверка на наличие пользователя в списке "важных" пользователей
|
user_id = str(user_id)
|
||||||
if user_id in ListId.important_ids:
|
if user_id in DataID.important:
|
||||||
user_id = ListId.important_ids[user_id]
|
return DataID.important[user_id] # Возвращаем имя пользователя
|
||||||
|
else:
|
||||||
return user_id
|
return user_id
|
||||||
|
|
||||||
|
|
||||||
# Проверка на наличие чата в списке "важных" чатов
|
|
||||||
def find_chat_id(message: types.Message):
|
|
||||||
chat_id = message.chat.id
|
|
||||||
# Проверка на наличие чата в списке "важных" чатов
|
|
||||||
if chat_id in ListId.important_ids:
|
|
||||||
chat_id = ListId.important_ids[chat_id]
|
|
||||||
return chat_id
|
|
||||||
|
|||||||
@@ -5,9 +5,10 @@ import os
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from config import BotVariables
|
from ..configs import *
|
||||||
from .type_messages import *
|
from ..library.time import TimeVariable
|
||||||
from .find_ids import find_chat_id
|
from .types_msg import types_message, types_chat
|
||||||
|
from .find_ids import find_imp_id
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("write_message_to_file",)
|
__all__ = ("write_message_to_file",)
|
||||||
@@ -19,12 +20,12 @@ async def write_message_to_file(message):
|
|||||||
try:
|
try:
|
||||||
# Создание переменных с информацией
|
# Создание переменных с информацией
|
||||||
message_type = types_message(message)
|
message_type = types_message(message)
|
||||||
chat_id = find_chat_id(message)
|
chat_id = find_imp_id(message.from_user.id)
|
||||||
file_path = types_chat(message)
|
file_path = types_chat(message)
|
||||||
|
|
||||||
# Переменные для логов сообщений
|
# Переменные для логов сообщений
|
||||||
date = datetime.now().strftime(BotVariables.time_format)
|
date = datetime.now().strftime(TimeVariable.format)
|
||||||
username = message.from_user.username if message.from_user.username else "No username"
|
username = message.from_user.username if message.from_user.username else "Нет @username"
|
||||||
log_shablon = f"{date} | @{username} ({message.from_user.id}) |"
|
log_shablon = f"{date} | @{username} ({message.from_user.id}) |"
|
||||||
|
|
||||||
# Проверка и создание директорий
|
# Проверка и создание директорий
|
||||||
@@ -32,17 +33,14 @@ async def write_message_to_file(message):
|
|||||||
os.makedirs(os.path.dirname(file_path))
|
os.makedirs(os.path.dirname(file_path))
|
||||||
|
|
||||||
# Запись информации в файл
|
# Запись информации в файл
|
||||||
with open(file_path, "a", encoding=BotVariables.encoding) as file:
|
with open(file_path, "a", encoding=default_encod) as file:
|
||||||
# Проверка на наличие текста
|
# Проверка на наличие текста
|
||||||
if message.text is None:
|
if message.text is None:
|
||||||
file.write(f"{log_shablon} Тип: {message_type}\n\n")
|
file.write(f"{log_shablon} Тип: {message_type}\n\n")
|
||||||
else:
|
else:
|
||||||
file.write(f"{log_shablon} ChatID: {chat_id} | Текст: {message.text}\n\n")
|
file.write(f"{log_shablon} ChatID: {chat_id} | Текст: {message.text}\n\n")
|
||||||
|
|
||||||
return f"Сообщение пользователя успешно записано в файл."
|
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
text_error = f"Ошибка в сохранении сообщения в файл: {str(e)}"
|
text_error = f"Ошибка в сохранении сообщения в файл: {str(e)}"
|
||||||
logger.bind(custom_variable=log_type, user_var=f"@{message.from_user.username}").error(text_error)
|
logger.bind(custom_variable=log_type, user_var=f"@{message.from_user.username}").error(text_error)
|
||||||
return text_error
|
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
# Логирование стартов бота в bot_start.log
|
# Логирование стартов бота в bot_start.log
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from timer import sleep
|
from colorama import Fore
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
from config import ImportantPath, BotVariables
|
from ..configs import ProjectPath, default_encod
|
||||||
|
from ..library.time import TimeVariable
|
||||||
from ..library.bots import BotInfo
|
from ..library.bots import BotInfo
|
||||||
from ..library.decorator import TextDecorator
|
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("bot_info_out",)
|
__all__ = ("bot_info_out",)
|
||||||
@@ -17,14 +18,14 @@ log_type = "Start_INFO"
|
|||||||
|
|
||||||
# Функция для получения информации о боте и выводе ее в консоль и файл
|
# Функция для получения информации о боте и выводе ее в консоль и файл
|
||||||
def bot_info_out():
|
def bot_info_out():
|
||||||
bot_time = f"Бот @{BotInfo.username} запущен в {datetime.now().strftime(BotVariables.time_format)}\n"
|
bot_time = f"Бот @{BotInfo.username} запущен в {datetime.now().strftime(TimeVariable.format)}\n"
|
||||||
bot_name = f"Основное имя: {BotInfo.first_name}\n"
|
bot_name = f"Основное имя: {BotInfo.first_name}\n"
|
||||||
bot_postname = f" Доп. имя: {BotInfo.last_name}\n"
|
bot_postname = f" Доп. имя: {BotInfo.last_name}\n"
|
||||||
bot_username = f" Юзернейм: @{BotInfo.username}\n"
|
bot_username = f" Юзернейм: @{BotInfo.username}\n"
|
||||||
bot_id = f" ID: {BotInfo.id}\n"
|
bot_id = f" ID: {BotInfo.id}\n"
|
||||||
bot_language = f" Языковой код: {BotInfo.language_code}\n"
|
bot_language = f" Языковой код: {BotInfo.language_code}\n"
|
||||||
bot_can_join_groups = f" Может ли вступать в группы: {BotInfo.can_join_groups}\n"
|
bot_can_join_groups = f" Может ли вступать в группы: {BotInfo.can_join_groups}\n"
|
||||||
bot_can_read_all_group_messages = f" Чтение всех сообщений: {BotInfo.can_read_all_group_messages}\n"
|
bot_can_read_all_group_messages = f" Чтение всех сообщений: {BotInfo.can_read_all_group_messages}\n" # Теперь атрибут существует
|
||||||
bot_is_premium = f" Является премиум-ботом: {BotInfo.is_premium}\n"
|
bot_is_premium = f" Является премиум-ботом: {BotInfo.is_premium}\n"
|
||||||
bot_added_to_attachment_menu = f" Добавлен в меню вложений: {BotInfo.added_to_attachment_menu}\n"
|
bot_added_to_attachment_menu = f" Добавлен в меню вложений: {BotInfo.added_to_attachment_menu}\n"
|
||||||
bot_supports_inline_queries = f" Поддерживает инлайн-запросы: {BotInfo.supports_inline_queries}\n"
|
bot_supports_inline_queries = f" Поддерживает инлайн-запросы: {BotInfo.supports_inline_queries}\n"
|
||||||
@@ -39,20 +40,20 @@ def bot_info_out():
|
|||||||
|
|
||||||
# Печатаем все данные в консоль с задержкой в 1 секунду
|
# Печатаем все данные в консоль с задержкой в 1 секунду
|
||||||
sleep(1)
|
sleep(1)
|
||||||
print(TextDecorator.BLUE, bot_all_info, TextDecorator.RESET_DECORATOR)
|
print(Fore.CYAN + bot_all_info)
|
||||||
|
|
||||||
# Записываем информацию в файл
|
# Записываем информацию в файл
|
||||||
try:
|
try:
|
||||||
with open(ImportantPath.log_info, 'w', encoding=BotVariables.encoding) as log_file:
|
with open(ProjectPath.log_info, 'w', encoding=default_encod) as log_file:
|
||||||
log_file.write(f"{bot_time}{bot_all_info}")
|
log_file.write(f"{bot_time}{bot_all_info}")
|
||||||
|
|
||||||
# Создание файла bot_start.log
|
# Создание файла bot_start.log
|
||||||
with open(ImportantPath.log_start, 'a', encoding=BotVariables.encoding) as log_start_file:
|
with open(ProjectPath.log_start, 'a', encoding=default_encod) as log_start_file:
|
||||||
log_start_file.write(f"{bot_time}\n")
|
log_start_file.write(f"{bot_time}\n")
|
||||||
|
|
||||||
return bot_all_info
|
return bot_all_info
|
||||||
|
|
||||||
# Проверка на ошибку и ее логирование
|
# Проверка на ошибку и ее логирование
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
text_error = f"Ошибка при получении ID пользователя: {e}"
|
text_error = f"Ошибка при получении ID пользователя: {e}"
|
||||||
logger.bind(log_type="INFO", user=log_type).error(text_error)
|
logger.bind(log_type="INFO", user=log_type).error(text_error)
|
||||||
return text_error
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
# BotLibrary/analitics/log_type.py
|
|
||||||
# Определение типа сообщения
|
|
||||||
|
|
||||||
from .find_ids import find_chat_id
|
|
||||||
from config import BotEdit, ImportantPath
|
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
|
||||||
__all__ = ("types_message", "types_chat",)
|
|
||||||
log_type = "Type_message"
|
|
||||||
|
|
||||||
|
|
||||||
# Проверка на тип чата
|
|
||||||
def types_chat(message):
|
|
||||||
chat_id = find_chat_id(message)
|
|
||||||
if message.chat.type == "private":
|
|
||||||
file_path = f"{ImportantPath.private_message}/{chat_id}.txt"
|
|
||||||
else:
|
|
||||||
file_path = f"{ImportantPath.group_message}/{chat_id}.txt"
|
|
||||||
return file_path
|
|
||||||
|
|
||||||
|
|
||||||
# Проверка на тип сообщения
|
|
||||||
def types_message(message):
|
|
||||||
if message.pinned_message: # Закрепленное сообщение
|
|
||||||
file_type = "Закрепленное сообщение"
|
|
||||||
elif message.text:
|
|
||||||
first_char = message.text.strip()[0] if message.text.strip() else "" # Извлекаем первый символ текста
|
|
||||||
if first_char in BotEdit.prefixs:
|
|
||||||
file_type = "Команда"
|
|
||||||
else:
|
|
||||||
file_type = "Текст"
|
|
||||||
elif message.photo:
|
|
||||||
file_type = "Фото"
|
|
||||||
elif message.sticker:
|
|
||||||
file_type = "Стикер"
|
|
||||||
elif message.animation:
|
|
||||||
file_type = "Гиф"
|
|
||||||
elif message.voice:
|
|
||||||
file_type = "Голосовое сообщение"
|
|
||||||
elif message.video_note:
|
|
||||||
file_type = "Видеосообщение"
|
|
||||||
elif message.video:
|
|
||||||
file_type = "Видео"
|
|
||||||
elif message.audio:
|
|
||||||
file_type = "Аудио"
|
|
||||||
elif message.files:
|
|
||||||
file_type = "Документ"
|
|
||||||
elif message.contact:
|
|
||||||
file_type = "Контакт"
|
|
||||||
elif message.location:
|
|
||||||
file_type = "Локация"
|
|
||||||
elif message.venue:
|
|
||||||
file_type = "Место"
|
|
||||||
elif message.dice:
|
|
||||||
file_type = "Бросок кубика"
|
|
||||||
elif message.story:
|
|
||||||
file_type = "История"
|
|
||||||
elif message.game:
|
|
||||||
file_type = "Игра"
|
|
||||||
elif message.new_chat_members:
|
|
||||||
file_type = (f"Участник(и) присоединился(ись): "
|
|
||||||
f"{', '.join([member.username for member in message.new_chat_members if member.username])}")
|
|
||||||
elif message.left_chat_member:
|
|
||||||
file_type = f"Участник покинул чат: {message.left_chat_member.username or 'Неизвестный'}"
|
|
||||||
elif getattr(message, 'boost_added', False): # Проверяем наличие атрибута boost_added
|
|
||||||
file_type = "Буст чата!"
|
|
||||||
elif message.poll:
|
|
||||||
file_type = "Опрос"
|
|
||||||
elif message.forward_from or message.forward_from_chat:
|
|
||||||
file_type = "Пересланное сообщение"
|
|
||||||
else:
|
|
||||||
file_type = "Неизвестный тип сообщения"
|
|
||||||
return file_type
|
|
||||||
80
BotLibrary/analitics/types_msg.py
Normal file
80
BotLibrary/analitics/types_msg.py
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# BotLibrary/analitics/log_type.py
|
||||||
|
# Определение типа сообщения
|
||||||
|
|
||||||
|
from aiogram.types import ContentType
|
||||||
|
from configs import *
|
||||||
|
from .find_ids import find_imp_id
|
||||||
|
|
||||||
|
# Настройка экспорта модулей и логирования
|
||||||
|
__all__ = ("types_message", "types_chat",)
|
||||||
|
log_type = "Type_message"
|
||||||
|
|
||||||
|
|
||||||
|
# Проверка на тип чата
|
||||||
|
def types_chat(message):
|
||||||
|
chat_id = find_imp_id(message.from_user.id)
|
||||||
|
if message.chat.type == "private":
|
||||||
|
file_path = f"{ProjectPath.private_message}/{chat_id}.txt"
|
||||||
|
else:
|
||||||
|
file_path = f"{ProjectPath.group_message}/{chat_id}.txt"
|
||||||
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
|
def types_message(message):
|
||||||
|
# Словарь для соответствия типов сообщений
|
||||||
|
content_types = {
|
||||||
|
ContentType.TEXT: "Текст",
|
||||||
|
ContentType.PHOTO: "Фото",
|
||||||
|
ContentType.STICKER: "Стикер",
|
||||||
|
ContentType.ANIMATION: "Гиф",
|
||||||
|
ContentType.VOICE: "Голосовое сообщение",
|
||||||
|
ContentType.VIDEO_NOTE: "Видеосообщение",
|
||||||
|
ContentType.VIDEO: "Видео",
|
||||||
|
ContentType.AUDIO: "Аудио",
|
||||||
|
ContentType.DOCUMENT: "Документ",
|
||||||
|
ContentType.CONTACT: "Контакт",
|
||||||
|
ContentType.LOCATION: "Локация",
|
||||||
|
ContentType.VENUE: "Место",
|
||||||
|
ContentType.DICE: "Бросок кубика",
|
||||||
|
ContentType.STORY: "История",
|
||||||
|
ContentType.GAME: "Игра",
|
||||||
|
ContentType.POLL: "Опрос",
|
||||||
|
ContentType.FORUM_TOPIC_CREATED: "Создание темы на форуме",
|
||||||
|
ContentType.FORUM_TOPIC_EDITED: "Редактирование темы форума",
|
||||||
|
ContentType.FORUM_TOPIC_CLOSED: "Закрытие темы форума",
|
||||||
|
ContentType.FORUM_TOPIC_REOPENED: "Открытие темы форума",
|
||||||
|
ContentType.GENERAL_FORUM_TOPIC_HIDDEN: "Скрытие общей темы форума",
|
||||||
|
ContentType.GENERAL_FORUM_TOPIC_UNHIDDEN: "Раскрытие общей темы форума",
|
||||||
|
ContentType.GIVEAWAY_CREATED: "Создание розыгрыша",
|
||||||
|
ContentType.GIVEAWAY: "Розыгрыш",
|
||||||
|
ContentType.GIVEAWAY_WINNERS: "Победители розыгрыша",
|
||||||
|
ContentType.GIVEAWAY_COMPLETED: "Розыгрыш завершен",
|
||||||
|
ContentType.VIDEO_CHAT_SCHEDULED: "Запланированный видеочат",
|
||||||
|
ContentType.VIDEO_CHAT_STARTED: "Видеочат начат",
|
||||||
|
ContentType.VIDEO_CHAT_ENDED: "Видеочат завершен",
|
||||||
|
ContentType.VIDEO_CHAT_PARTICIPANTS_INVITED: "Участники приглашены в видеочат",
|
||||||
|
ContentType.PINNED_MESSAGE: "Закрепленное сообщение",
|
||||||
|
ContentType.INVOICE: "Счет",
|
||||||
|
ContentType.SUCCESSFUL_PAYMENT: "Успешный платеж",
|
||||||
|
ContentType.REFUNDED_PAYMENT: "Возврат платежа",
|
||||||
|
ContentType.USERS_SHARED: "Пользователи поделились",
|
||||||
|
ContentType.CHAT_SHARED: "Чат был передан",
|
||||||
|
ContentType.CONNECTED_WEBSITE: "Подключенный веб-сайт",
|
||||||
|
ContentType.WRITE_ACCESS_ALLOWED: "Разрешение на запись",
|
||||||
|
ContentType.PASSPORT_DATA: "Данные паспорта",
|
||||||
|
ContentType.PROXIMITY_ALERT_TRIGGERED: "Срабатывание предупреждения о близости",
|
||||||
|
ContentType.BOOST_ADDED: "Буст чата",
|
||||||
|
ContentType.CHAT_BACKGROUND_SET: "Установлен фон чата"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверяем тип сообщения и возвращаем описание
|
||||||
|
if message.pinned_message: # Закрепленное сообщение
|
||||||
|
return content_types.get(ContentType.PINNED_MESSAGE, "Закрепленное сообщение")
|
||||||
|
|
||||||
|
# Проверка для обычных сообщений
|
||||||
|
for content_type, description in content_types.items():
|
||||||
|
if getattr(message, content_type.value, None):
|
||||||
|
return description
|
||||||
|
|
||||||
|
# Если сообщение не соответствует ни одному из типов
|
||||||
|
return "Неизвестный тип сообщения"
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
# BotLibrary/analitics/user_data_to_file.py
|
# BotLibrary/analitics/user_data_to_file.py
|
||||||
# Запись информации о пользователях в файл "user_data.db" (Сделать счетчик пользователей)
|
# Запись информации о пользователи в базу данных
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
from config import ImportantPath, BotVariables
|
|
||||||
|
from aiogram.types import User, Birthdate
|
||||||
|
from configs import *
|
||||||
|
from ..library.time import TimeVariable
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("write_user_info_to_file", "format_user_record",)
|
__all__ = ("write_user_info_to_file", "format_user_record",)
|
||||||
@@ -12,13 +15,13 @@ log_type = "User_data_file"
|
|||||||
|
|
||||||
|
|
||||||
# Функция записи информации в JSON-файл
|
# Функция записи информации в JSON-файл
|
||||||
def write_user_info_to_file(user):
|
def write_user_info_to_file(user: User):
|
||||||
directory = os.path.dirname(ImportantPath.user_info_file)
|
directory = os.path.dirname(ProjectPath.user_info_file)
|
||||||
if not os.path.exists(directory):
|
if not os.path.exists(directory):
|
||||||
os.makedirs(directory)
|
os.makedirs(directory)
|
||||||
|
|
||||||
if os.path.exists(ImportantPath.user_info_file):
|
if os.path.exists(ProjectPath.user_info_file):
|
||||||
with open(ImportantPath.user_info_file, "r", encoding=BotVariables.encoding) as file:
|
with open(ProjectPath.user_info_file, "r", encoding=default_encod) as file:
|
||||||
try:
|
try:
|
||||||
user_data = json.load(file)
|
user_data = json.load(file)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
@@ -29,19 +32,24 @@ def write_user_info_to_file(user):
|
|||||||
user_record = format_user_record(user)
|
user_record = format_user_record(user)
|
||||||
user_data[str(user.id)] = user_record
|
user_data[str(user.id)] = user_record
|
||||||
|
|
||||||
with open(ImportantPath.user_info_file, "w", encoding=BotVariables.encoding) as file:
|
with open(ProjectPath.user_info_file, "w", encoding=default_encod) as file:
|
||||||
json.dump(user_data, file, ensure_ascii=False, indent=4)
|
json.dump(user_data, file, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
return f"Информация о пользователе успешно записана или обновлена."
|
|
||||||
|
|
||||||
|
|
||||||
# Функция форматирования вывода в JSON-файл
|
# Функция форматирования вывода в JSON-файл
|
||||||
def format_user_record(user):
|
def format_user_record(user: User):
|
||||||
first_name = getattr(user, 'first_name', '') # Получаем имя
|
first_name = getattr(user, 'first_name', '') # Получаем имя
|
||||||
last_name = getattr(user, 'last_name', '') # Получаем фамилию или пустую строку
|
last_name = getattr(user, 'last_name', '') # Получаем фамилию или пустую строку
|
||||||
|
|
||||||
|
# Получение даты рождения
|
||||||
|
birthdate = getattr(user, 'birthdate', None)
|
||||||
|
if isinstance(birthdate, Birthdate):
|
||||||
|
birthdate_str = f"{birthdate.day:02d}.{birthdate.month:02d}.{birthdate.year or 'Не указано'}"
|
||||||
|
else:
|
||||||
|
birthdate_str = "Не указано"
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"Время знакомства": datetime.datetime.now().strftime(BotVariables.time_format),
|
"Время знакомства": datetime.datetime.now().strftime(TimeVariable.format),
|
||||||
"Имя": first_name,
|
"Имя": first_name,
|
||||||
"Фамилия": last_name,
|
"Фамилия": last_name,
|
||||||
"Юзернейм": f"@{getattr(user, 'username', 'Не указано')}",
|
"Юзернейм": f"@{getattr(user, 'username', 'Не указано')}",
|
||||||
@@ -50,5 +58,5 @@ def format_user_record(user):
|
|||||||
"Бот": getattr(user, 'is_bot', False),
|
"Бот": getattr(user, 'is_bot', False),
|
||||||
"Премиум": getattr(user, 'is_premium', False),
|
"Премиум": getattr(user, 'is_premium', False),
|
||||||
"Язык": getattr(user, 'language_code', 'Не указано'),
|
"Язык": getattr(user, 'language_code', 'Не указано'),
|
||||||
|
"Дата рождения": birthdate_str, # Добавляем дату рождения
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,145 +0,0 @@
|
|||||||
# BotLibrary/configs/config.py
|
|
||||||
# Список практически всех переменных проекта
|
|
||||||
|
|
||||||
from os import getenv
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
from MySQL.list_ids import *
|
|
||||||
|
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
|
||||||
__all__ = ("LogsSet", "BotEdit", "ListId", "ImportantPath", "BotVariables",
|
|
||||||
"bot_token", "api_key", "web_api_key", )
|
|
||||||
log_type = "Config"
|
|
||||||
|
|
||||||
|
|
||||||
# Загружаем переменные из файла .env
|
|
||||||
load_dotenv()
|
|
||||||
bot_token = getenv("main_bot_token")
|
|
||||||
api_key = getenv("APIKey")
|
|
||||||
web_api_key = getenv("WebAPIKey")
|
|
||||||
important_id = getenv("important_id")
|
|
||||||
secret = getenv("secret")
|
|
||||||
|
|
||||||
|
|
||||||
# Класс для параметров логгера
|
|
||||||
class LogsSet:
|
|
||||||
# Максимальный размер лог-файла
|
|
||||||
max_size = "500 MB"
|
|
||||||
|
|
||||||
# Шаблон логов для обычного логгера
|
|
||||||
info_text = ("<green>{timer:YYYY-MM-DD HH:mm:ss}</green> <red> | </red> "
|
|
||||||
"<blue>PRIMO-{extra[log_type]}</blue> <red> | </red> "
|
|
||||||
"<red>{extra[user]} | </red> <level>{message}</level>")
|
|
||||||
|
|
||||||
# Шаблон логов для логгера-ошибок
|
|
||||||
error_text = ("<level>{timer:YYYY-MM-DD HH:mm:ss} | ERROR-{extra[log_type]} | "
|
|
||||||
"{extra[user]} | {message}</level>")
|
|
||||||
|
|
||||||
|
|
||||||
# Прочие переменные для проекта
|
|
||||||
class BotVariables:
|
|
||||||
# Основные настройки бота
|
|
||||||
encoding = "utf-8"
|
|
||||||
time_format = "%Y-%m-%d %H:%M:%S"
|
|
||||||
language = "Python-Aiogram"
|
|
||||||
time_zone = "Asia/Novosibirsk"
|
|
||||||
|
|
||||||
# Типы сообщений и список директорий для создания
|
|
||||||
private_msg = "Личные"
|
|
||||||
group_msg = "Группы"
|
|
||||||
bot_msg_directories = [private_msg, group_msg,]
|
|
||||||
|
|
||||||
# Названия директорий для хранения аватаров
|
|
||||||
user_avatar = "UserAvatar"
|
|
||||||
chat_avatar = "ChatAvatar"
|
|
||||||
channel_avatar = "ChannelAvatar"
|
|
||||||
bot_avatar_directories = [user_avatar, chat_avatar, channel_avatar,]
|
|
||||||
|
|
||||||
# Названия директорий-хранилищ
|
|
||||||
avatar = "Avatar"
|
|
||||||
photo = "Photo"
|
|
||||||
video = "Video"
|
|
||||||
videonote = "VideoNote"
|
|
||||||
gif = "GIF"
|
|
||||||
files = "Document"
|
|
||||||
voice = "Voice"
|
|
||||||
youtube = "YouTube"
|
|
||||||
|
|
||||||
# Список директорий для создания
|
|
||||||
bot_media_directories = [
|
|
||||||
avatar, photo, video, videonote, gif, files, voice, youtube,
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# Класс с параметрами бота
|
|
||||||
class BotEdit:
|
|
||||||
name = "Первородная Жемчужина" # Описание имени бота
|
|
||||||
description = ("Привет, мое имя - Эми! Я буду рада, вам помочь "
|
|
||||||
"посетить другие миры! Вместе!") # Описание бота
|
|
||||||
short_description = "Привет, это описание! Как дела?" # Описание виджета бота
|
|
||||||
prefixs = ('$', '!', '.', '%', '&', ':', '|', '+', '-', '/', '~', '?') # Доступные префиксы бота
|
|
||||||
|
|
||||||
|
|
||||||
# Создание списков с ids пользователей
|
|
||||||
class ListId:
|
|
||||||
# Получение списков из базы данных
|
|
||||||
ban_list_id = ban_list_ids
|
|
||||||
|
|
||||||
adm_list_id = important_adm_ids
|
|
||||||
important_users_list_id = important_users_list_ids
|
|
||||||
groups_list_id = important_groups_ids
|
|
||||||
channel_list_id = important_channel_ids
|
|
||||||
|
|
||||||
# Создание единого словаря важных ID с использованием оператора |
|
|
||||||
important_ids = (important_adm_ids | important_users_list_ids |
|
|
||||||
important_groups_ids | important_channel_ids)
|
|
||||||
|
|
||||||
|
|
||||||
# Класс с важными переменными-пути
|
|
||||||
class ImportantPath:
|
|
||||||
# Путь к аватарам проекта
|
|
||||||
bot_avatar = f"BotLibrary/MediaPersonal/bot_avatar.png"
|
|
||||||
console_app_avatar = f"BotLibrary/MediaPersonal/console_avatar.png"
|
|
||||||
|
|
||||||
# Пути к файлам логирования
|
|
||||||
log_start = f"BotLogs/bot_start.log"
|
|
||||||
log_file = f"BotLogs/bot.log"
|
|
||||||
log_info = f"BotLogs/bot_info.log"
|
|
||||||
log_error_file = f"BotLogs/bot_error.log"
|
|
||||||
|
|
||||||
# Пути к хранению сообщений
|
|
||||||
msg = f"BotLogs/BotMessages"
|
|
||||||
private_message = f"{msg}/{BotVariables.private_msg}"
|
|
||||||
group_message = f"{msg}/{BotVariables.group_msg}"
|
|
||||||
|
|
||||||
# Путь к хранилищу базы данных
|
|
||||||
user_info_file = f"MySQL/user_data.json"
|
|
||||||
|
|
||||||
# Пути к хранению медиа
|
|
||||||
bot_files = f"BotFiles"
|
|
||||||
bot_personal_media = f"BotLibrary/media"
|
|
||||||
bot_received_media = f"BotFiles/MediaReceived"
|
|
||||||
user_avatar = f"{bot_files}/{BotVariables.user_avatar}"
|
|
||||||
chat_avatar = f"{bot_files}/{BotVariables.chat_avatar}"
|
|
||||||
channel_avatar = f"{bot_files}/{BotVariables.channel_avatar}"
|
|
||||||
|
|
||||||
|
|
||||||
# Названия директорий-хранилищ для медиа
|
|
||||||
bot_avatar_directory = f"{bot_personal_media}/{BotVariables.avatar}/"
|
|
||||||
bot_photo_directory = f"{bot_personal_media}/{BotVariables.photo}/"
|
|
||||||
bot_video_directory = f"{bot_personal_media}/{BotVariables.video}/"
|
|
||||||
bot_videonote_directory = f"{bot_personal_media}/{BotVariables.videonote}/"
|
|
||||||
bot_gif_directory = f"{bot_personal_media}/{BotVariables.gif}/"
|
|
||||||
bot_document_directory = f"{bot_personal_media}/{BotVariables.files}/"
|
|
||||||
bot_voice_directory = f"{bot_personal_media}/{BotVariables.voice}/"
|
|
||||||
bot_youtube_directory = f"{bot_personal_media}/{BotVariables.youtube}/"
|
|
||||||
|
|
||||||
# Названия директорий-хранилищ для закачки
|
|
||||||
avatar_directory = f"{bot_received_media}/{BotVariables.avatar}/"
|
|
||||||
photo_directory = f"{bot_received_media}/{BotVariables.photo}/"
|
|
||||||
video_directory = f"{bot_received_media}/{BotVariables.video}/"
|
|
||||||
videonote_directory = f"{bot_received_media}/{BotVariables.videonote}/"
|
|
||||||
gif_directory = f"{bot_received_media}/{BotVariables.gif}/"
|
|
||||||
document_directory = f"{bot_received_media}/{BotVariables.files}/"
|
|
||||||
voice_directory = f"{bot_received_media}/{BotVariables.voice}/"
|
|
||||||
youtube_directory = f"{bot_received_media}/{BotVariables.youtube}/"
|
|
||||||
8
BotLibrary/configs/__init__.py
Normal file
8
BotLibrary/configs/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# BotLibrary/library/__init__.py
|
||||||
|
# Инициализация пакета library, для работы с собственными библиотеками
|
||||||
|
|
||||||
|
# Импортируем библиотеки для экспорта
|
||||||
|
from .config import *
|
||||||
|
from .settings import *
|
||||||
|
from .list_ids import *
|
||||||
|
from .important_path import *
|
||||||
5
BotLibrary/configs/config.py
Normal file
5
BotLibrary/configs/config.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# BotLibrary/configs/config.py
|
||||||
|
# Базовые переменные для проекта
|
||||||
|
|
||||||
|
# Базовая кодировка файлов
|
||||||
|
default_encod = "utf-8"
|
||||||
87
BotLibrary/configs/important_path.py
Normal file
87
BotLibrary/configs/important_path.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# BotLibrary/configs/important_path.py
|
||||||
|
# Хранилище всех важных путей
|
||||||
|
|
||||||
|
|
||||||
|
# Класс для хранения типов директорий
|
||||||
|
class TypeDirectory:
|
||||||
|
# Типы сообщений и список директорий для создания
|
||||||
|
private_msg = "Личные"
|
||||||
|
group_msg = "Группы"
|
||||||
|
msg_directories = [private_msg, group_msg]
|
||||||
|
|
||||||
|
# Названия директорий для хранения аватаров
|
||||||
|
user_avatar = "UserAvatar"
|
||||||
|
chat_avatar = "ChatAvatar"
|
||||||
|
channel_avatar = "ChannelAvatar"
|
||||||
|
avatar_directories = [user_avatar, chat_avatar, channel_avatar]
|
||||||
|
|
||||||
|
# Названия директорий-хранилищ
|
||||||
|
avatar = "Avatar"
|
||||||
|
photo = "Photo"
|
||||||
|
video = "Video"
|
||||||
|
videonote = "VideoNote"
|
||||||
|
gif = "GIF"
|
||||||
|
files = "Document"
|
||||||
|
voice = "Voice"
|
||||||
|
youtube = "YouTube"
|
||||||
|
|
||||||
|
# Список директорий для создания
|
||||||
|
media_directories = [avatar, photo, video, videonote,
|
||||||
|
gif, files, voice, youtube]
|
||||||
|
|
||||||
|
|
||||||
|
# Класс с важными путями и настройками
|
||||||
|
class ProjectPath:
|
||||||
|
# Пути к файлам логирования
|
||||||
|
logs = "BotLogs"
|
||||||
|
log_start = f"{logs}/start.log"
|
||||||
|
log_file = f"{logs}/bot.log"
|
||||||
|
log_info = f"{logs}/info.log"
|
||||||
|
log_error_file = f"{logs}/error.log"
|
||||||
|
|
||||||
|
|
||||||
|
# Пути к хранилищу сообщений
|
||||||
|
msg = f"{logs}/BotMessages"
|
||||||
|
private_message = f"{msg}/{TypeDirectory.private_msg}"
|
||||||
|
group_message = f"{msg}/{TypeDirectory.group_msg}"
|
||||||
|
|
||||||
|
|
||||||
|
# Путь к хранилищу базы данных
|
||||||
|
SQL = "MySQL"
|
||||||
|
user_info_file = f"{SQL}/user_data.json"
|
||||||
|
list_id = f"{SQL}/list_ids.json"
|
||||||
|
|
||||||
|
|
||||||
|
# Пути к хранилищу медиа
|
||||||
|
bot_files = "BotFiles"
|
||||||
|
personal_media = f"BotLibrary/media"
|
||||||
|
received_media = f"{bot_files}/MediaReceived"
|
||||||
|
|
||||||
|
|
||||||
|
# Пути к папкам аватаров
|
||||||
|
user_avatar = f"{bot_files}/{TypeDirectory.user_avatar}"
|
||||||
|
chat_avatar = f"{bot_files}/{TypeDirectory.chat_avatar}"
|
||||||
|
channel_avatar = f"{bot_files}/{TypeDirectory.channel_avatar}"
|
||||||
|
|
||||||
|
|
||||||
|
# Путь к папкам хранения медиа
|
||||||
|
console_app_avatar = f"{personal_media}/console_avatar.png"
|
||||||
|
personal_avatar = f"{personal_media}/{TypeDirectory.avatar}"
|
||||||
|
personal_photo = f"{personal_media}/{TypeDirectory.photo}"
|
||||||
|
personal_video = f"{personal_media}/{TypeDirectory.video}"
|
||||||
|
personal_videonote = f"{personal_media}/{TypeDirectory.videonote}"
|
||||||
|
personal_gif = f"{personal_media}/{TypeDirectory.gif}"
|
||||||
|
personal_document = f"{personal_media}/{TypeDirectory.files}"
|
||||||
|
personal_voice = f"{personal_media}/{TypeDirectory.voice}"
|
||||||
|
personal_youtube = f"{personal_media}/{TypeDirectory.youtube}"
|
||||||
|
|
||||||
|
|
||||||
|
# Путь к папкам получения медиа
|
||||||
|
received_avatar = f"{received_media}/{TypeDirectory.avatar}"
|
||||||
|
received_photo = f"{received_media}/{TypeDirectory.photo}"
|
||||||
|
received_video = f"{received_media}/{TypeDirectory.video}"
|
||||||
|
received_videonote = f"{received_media}/{TypeDirectory.videonote}"
|
||||||
|
received_gif = f"{received_media}/{TypeDirectory.gif}"
|
||||||
|
received_document = f"{received_media}/{TypeDirectory.files}"
|
||||||
|
received_voice = f"{received_media}/{TypeDirectory.voice}"
|
||||||
|
received_youtube = f"{received_media}/{TypeDirectory.youtube}"
|
||||||
71
BotLibrary/configs/list_ids.py
Normal file
71
BotLibrary/configs/list_ids.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# BotLibrary/configs/list_ids.py
|
||||||
|
# Получение id пользователей из базы данных
|
||||||
|
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
from .config import *
|
||||||
|
from .important_path import ProjectPath
|
||||||
|
|
||||||
|
# Настройка экспорта модулей и логирования
|
||||||
|
__all__ = ("load_ids_from_json", "save_ids_to_json", "DataID")
|
||||||
|
default_file = ProjectPath.list_id
|
||||||
|
log_type = "ListID"
|
||||||
|
|
||||||
|
|
||||||
|
# Чтение данных из файла JSON с обработкой ошибок
|
||||||
|
def load_ids_from_json(file=default_file, encoding=default_encod):
|
||||||
|
try:
|
||||||
|
# Проверка существования файла
|
||||||
|
if not os.path.exists(file):
|
||||||
|
# Если файл не существует, создаем его с пустым содержимым
|
||||||
|
with open(file, "w", encoding=encoding) as f:
|
||||||
|
json.dump({}, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
|
# Чтение данных из файла
|
||||||
|
with open(file, "r", encoding=encoding) as f:
|
||||||
|
return json.load(f)
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
(logger.bind(log_type=log_type, user="Файл id")
|
||||||
|
.error(f"Файл {file} не найден!"))
|
||||||
|
return {}
|
||||||
|
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
(logger.bind(log_type=log_type, user="Декодирование id")
|
||||||
|
.error(f"Ошибка декодирования JSON в файле {file}"))
|
||||||
|
return {}
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
(logger.bind(log_type=log_type, user="Чтение id")
|
||||||
|
.error(f"Произошла ошибка при чтении файла {file}: {e}"))
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
# Запись данных в файл JSON с обработкой ошибок
|
||||||
|
def save_ids_to_json(file=default_file, encoding=default_encod, data=None):
|
||||||
|
try:
|
||||||
|
with open(file, "w", encoding=encoding) as f:
|
||||||
|
json.dump(data, f, ensure_ascii=False, indent=4)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
(logger.bind(log_type=log_type, user="Запись id")
|
||||||
|
.error(f"Произошла ошибка при записи в файл {file}: {e}"))
|
||||||
|
|
||||||
|
|
||||||
|
# Класс для хранения данных из JSON
|
||||||
|
class DataID:
|
||||||
|
# Получение информации из списка важных айди, забанненых айди и общих
|
||||||
|
data_list_id = load_ids_from_json(ProjectPath.list_id)
|
||||||
|
data_user_data = load_ids_from_json(ProjectPath.user_info_file)
|
||||||
|
|
||||||
|
# Список забанненых пользователей
|
||||||
|
ban_list = data_list_id.get("ban_list_ids", {})
|
||||||
|
|
||||||
|
# Список важных айди
|
||||||
|
admins = data_list_id.get("important_adm_ids", {})
|
||||||
|
groups = data_list_id.get("important_groups_ids", {})
|
||||||
|
users = data_list_id.get("important_users_list_ids", {})
|
||||||
|
channels = data_list_id.get("important_channel_ids", {})
|
||||||
|
important = {**admins, **groups, **users, **channels}
|
||||||
32
BotLibrary/configs/settings.py
Normal file
32
BotLibrary/configs/settings.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# BotLibrary/configs/settings.py
|
||||||
|
# Список практически всех переменных проекта
|
||||||
|
|
||||||
|
from os import getenv
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
# Настройка экспорта модулей
|
||||||
|
__all__ = ("BotEdit", "BotVariables", "bot_token", "api_key",
|
||||||
|
"web_api_key", "important_id", "secret")
|
||||||
|
|
||||||
|
|
||||||
|
# Класс с параметрами бота
|
||||||
|
class BotEdit:
|
||||||
|
name = "Первородная Жемчужина" # Описание имени бота
|
||||||
|
description = ("Привет, мое имя - Эми! Я буду рада помочь вам "
|
||||||
|
"посетить другие миры! Вместе!") # Описание бота
|
||||||
|
short_description = "Привет, это описание! Как дела?" # Описание виджета бота
|
||||||
|
|
||||||
|
|
||||||
|
# Важные параметры бота
|
||||||
|
class BotVariables:
|
||||||
|
language = "Python3-Aiogram"
|
||||||
|
prefixs = ('$', '!', '.', '%', '&', ':', '|', '+', '-', '/', '~', '?')
|
||||||
|
|
||||||
|
|
||||||
|
# Загружаем переменные из файла .env
|
||||||
|
load_dotenv(".env")
|
||||||
|
bot_token = getenv("main_bot_token")
|
||||||
|
api_key = getenv("APIKey")
|
||||||
|
web_api_key = getenv("WebAPIKey")
|
||||||
|
important_id = getenv("important_id")
|
||||||
|
secret = getenv("secret")
|
||||||
@@ -3,7 +3,11 @@
|
|||||||
|
|
||||||
# Импортируем библиотеки для экспорта
|
# Импортируем библиотеки для экспорта
|
||||||
from .bots import *
|
from .bots import *
|
||||||
from .decorator import *
|
|
||||||
from .logger import *
|
from .logger import *
|
||||||
from .edit_bot import *
|
from .edit_bot import *
|
||||||
from .directory import *
|
from .directory import *
|
||||||
|
from .time import *
|
||||||
|
|
||||||
|
from art import *
|
||||||
|
from colorama import *
|
||||||
|
from termcolor import *
|
||||||
|
|||||||
@@ -1,53 +1,29 @@
|
|||||||
# BotLibrary/library/bots.py
|
# BotLibrary/library/bots.py
|
||||||
# Создание и настройка бота в одном файле
|
# Создание и настройка бота в одном файле
|
||||||
|
|
||||||
import pytz
|
|
||||||
from tzlocal import get_localzone
|
|
||||||
from datetime import datetime
|
|
||||||
from aiogram import Dispatcher, Bot, F
|
from aiogram import Dispatcher, Bot, F
|
||||||
from aiogram.client.default import DefaultBotProperties
|
from aiogram.client.default import DefaultBotProperties
|
||||||
from aiogram.enums import ParseMode
|
from aiogram.enums import ParseMode
|
||||||
|
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
from config import bot_token, BotVariables
|
from .time import *
|
||||||
|
from configs import bot_token, BotVariables
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("bot_token", "dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info")
|
__all__ = ("dp", "bot", "scheduler", "F_Media", "BotInfo", "bot_get_info")
|
||||||
log_type = "Bot"
|
log_type = "Bot"
|
||||||
|
|
||||||
|
|
||||||
# Получение времени по UTC
|
|
||||||
utc_now = datetime.now(pytz.utc)
|
|
||||||
|
|
||||||
# Получение локального времени хоста (с использованием локального часового пояса)
|
|
||||||
local_tz = get_localzone() # Автоматически определяет локальный часовой пояс
|
|
||||||
local_now = utc_now.astimezone(local_tz)
|
|
||||||
|
|
||||||
# Получение московского времени
|
|
||||||
moscow_tz = pytz.timezone("Europe/Moscow")
|
|
||||||
moscow_now = utc_now.astimezone(moscow_tz)
|
|
||||||
|
|
||||||
# Форматирование времени UTC
|
|
||||||
utc_time = utc_now.strftime("%Y-%m-%d %H:%M:%S") + " (UTC)"
|
|
||||||
|
|
||||||
# Форматирование времени хоста со сдвигом
|
|
||||||
utc_offset_host = local_now.utcoffset().total_seconds() / 3600 # Смещение в часах
|
|
||||||
host_time = local_now.strftime("%Y-%m-%d %H:%M:%S") + f" (UTC{int(utc_offset_host):+})"
|
|
||||||
|
|
||||||
# Форматирование московского времени со сдвигом
|
|
||||||
utc_offset_moscow = moscow_now.utcoffset().total_seconds() / 3600 # Смещение в часах
|
|
||||||
moscow_time = moscow_now.strftime("%Y-%m-%d %H:%M:%S") + f" (UTC{int(utc_offset_moscow):+})"
|
|
||||||
|
|
||||||
|
|
||||||
# Создание экземпляра диспатчера и его параметров
|
# Создание экземпляра диспатчера и его параметров
|
||||||
dp = Dispatcher()
|
dp = Dispatcher()
|
||||||
dp["started_at"] = host_time
|
dp["started_at"] = host_time
|
||||||
dp["started_at_msk"] = moscow_time
|
dp["started_at_msk"] = get_choice_time(TimeVariable.choice_utc_msk)
|
||||||
dp["is_active"] = True # Флаг активности бота
|
dp["is_active"] = True # Флаг активности бота
|
||||||
dp["logs"] = []
|
dp["logs"] = []
|
||||||
dp["users"] = {}
|
dp["users"] = {}
|
||||||
dp["sessions"] = {}
|
dp["sessions"] = {}
|
||||||
dp["task_queue"] = []
|
dp["task_queue"] = []
|
||||||
dp["config"] = {"max_connections": 100, "retry_interval": 5, "time_format": BotVariables.time_format}
|
dp["configs"] = {"max_connections": 100, "retry_interval": 5, "time_format": TimeVariable.format}
|
||||||
dp["metrics"] = {"messages_received": 0, "messages_sent": 0, "errors": 0}
|
dp["metrics"] = {"messages_received": 0, "messages_sent": 0, "errors": 0}
|
||||||
dp["modules"] = {}
|
dp["modules"] = {}
|
||||||
dp["state"] = {}
|
dp["state"] = {}
|
||||||
@@ -58,21 +34,33 @@ dp["database"] = None
|
|||||||
|
|
||||||
|
|
||||||
# Объявление экземпляров и переменных
|
# Объявление экземпляров и переменных
|
||||||
bot = Bot(token=bot_token, default=DefaultBotProperties(parse_mode=ParseMode.HTML)) # Объявление бота
|
bot_properties = DefaultBotProperties(
|
||||||
scheduler = AsyncIOScheduler(timezone=BotVariables.time_zone) # Создание планировщика
|
parse_mode=ParseMode.HTML, # Устанавливаем формат HTML для всех сообщений
|
||||||
|
disable_notification=True, # Отключаем уведомления при отправке сообщений
|
||||||
|
protect_content=True, # Защищаем содержимое сообщений от копирования
|
||||||
|
allow_sending_without_reply=True, # Разрешаем отправлять сообщения без ответа на другое сообщение
|
||||||
|
# link_preview=LinkPreviewOptions(), # Настройка для предварительного просмотра ссылок
|
||||||
|
link_preview_is_disabled=True, # Отключаем предварительный просмотр ссылок
|
||||||
|
show_caption_above_media=False, # Показываем подпись выше медиа
|
||||||
|
)
|
||||||
|
bot = Bot(token=bot_token, default=bot_properties) # Объявление бота
|
||||||
|
scheduler = AsyncIOScheduler(timezone=get_time_zone()) # Создание планировщика
|
||||||
F_Media = F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр-медиа
|
F_Media = F.photo | F.files | F.video | F.animation | F.voice | F.video_note # Фильтр-медиа
|
||||||
|
|
||||||
|
|
||||||
# Класс для хранения данных о боте (некоторые переменные даны как шаблон)
|
# Класс для хранения данных о боте (некоторые переменные даны как шаблон)
|
||||||
class BotInfo:
|
class BotInfo:
|
||||||
# Статические переменные для хранения данных
|
# Статические переменные для хранения данных
|
||||||
id = 10000000
|
id = None
|
||||||
first_name = "TESTBOT"
|
first_name = None
|
||||||
last_name = ""
|
last_name = None
|
||||||
username = "testbot"
|
username = None
|
||||||
|
description = None
|
||||||
|
short_description = None
|
||||||
can_join_groups = None
|
can_join_groups = None
|
||||||
can_read_all_group_messages = None
|
can_read_all_group_messages = None
|
||||||
language_code = BotVariables.language
|
language_code = BotVariables.language
|
||||||
|
prefixs = BotVariables.prefixs
|
||||||
is_premium = None
|
is_premium = None
|
||||||
added_to_attachment_menu = None
|
added_to_attachment_menu = None
|
||||||
supports_inline_queries = None
|
supports_inline_queries = None
|
||||||
@@ -86,13 +74,16 @@ class BotInfo:
|
|||||||
cls.first_name = bot_info.first_name
|
cls.first_name = bot_info.first_name
|
||||||
cls.last_name = bot_info.last_name
|
cls.last_name = bot_info.last_name
|
||||||
cls.username = bot_info.username
|
cls.username = bot_info.username
|
||||||
cls.can_join_groups = bot_info.can_join_groups
|
cls.description = getattr(bot_info, 'description', '') # Default to empty string if no description
|
||||||
cls.can_read_all_group_messages = bot_info.can_read_all_group_messages
|
cls.short_description = getattr(bot_info, 'description', '')
|
||||||
|
cls.language_code = bot_info.language_code
|
||||||
cls.is_premium = bot_info.is_premium
|
cls.is_premium = bot_info.is_premium
|
||||||
cls.added_to_attachment_menu = bot_info.added_to_attachment_menu
|
cls.added_to_attachment_menu = bot_info.added_to_attachment_menu
|
||||||
cls.supports_inline_queries = bot_info.supports_inline_queries
|
cls.supports_inline_queries = bot_info.supports_inline_queries
|
||||||
cls.can_connect_to_business = bot_info.can_connect_to_business
|
cls.can_connect_to_business = bot_info.can_connect_to_business
|
||||||
cls.has_main_web_app = bot_info.has_main_web_app
|
cls.has_main_web_app = bot_info.has_main_web_app
|
||||||
|
cls.can_join_groups = getattr(bot_info, 'can_join_groups', None) # Default to None if no attribute
|
||||||
|
cls.can_read_all_group_messages = getattr(bot_info, 'can_read_all_group_messages', None) # Default to None
|
||||||
|
|
||||||
|
|
||||||
# Функция получения данных о боте
|
# Функция получения данных о боте
|
||||||
@@ -110,12 +101,14 @@ async def bot_get_info():
|
|||||||
'first_name': bot_info_data.first_name,
|
'first_name': bot_info_data.first_name,
|
||||||
'last_name': bot_info_data.last_name,
|
'last_name': bot_info_data.last_name,
|
||||||
'username': bot_info_data.username,
|
'username': bot_info_data.username,
|
||||||
'can_join_groups': bot_info_data.can_join_groups,
|
'description': getattr(bot_info_data, 'description', ''),
|
||||||
'can_read_all_group_messages': bot_info_data.can_read_all_group_messages,
|
'short_description': getattr(bot_info_data, 'description', ''),
|
||||||
'language_code': BotVariables.language,
|
'language_code': bot_info_data.language_code,
|
||||||
|
'prefixs': BotVariables.prefixs,
|
||||||
'is_premium': bot_info_data.is_premium,
|
'is_premium': bot_info_data.is_premium,
|
||||||
'added_to_attachment_menu': bot_info_data.added_to_attachment_menu,
|
'added_to_attachment_menu': bot_info_data.added_to_attachment_menu,
|
||||||
'supports_inline_queries': bot_info_data.supports_inline_queries,
|
'supports_inline_queries': bot_info_data.supports_inline_queries,
|
||||||
'can_connect_to_business': bot_info_data.can_connect_to_business,
|
'can_connect_to_business': bot_info_data.can_connect_to_business,
|
||||||
'has_main_web_app': bot_info_data.has_main_web_app,
|
'has_main_web_app': bot_info_data.has_main_web_app,
|
||||||
|
'can_join_groups': getattr(bot_info_data, 'can_join_groups', None),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,74 +0,0 @@
|
|||||||
# BotLibrary/library/decorator.py
|
|
||||||
# Небольшая библиотека для декорирования текста
|
|
||||||
|
|
||||||
from art import *
|
|
||||||
from colorama import *
|
|
||||||
from termcolor import *
|
|
||||||
|
|
||||||
# Подключение ANSI в стандартное Windows_cmd
|
|
||||||
just_fix_windows_console()
|
|
||||||
|
|
||||||
|
|
||||||
# Некоторые возможности библиотеки art и termcolor (не полный, проще использовать сам art)
|
|
||||||
class ArtObject:
|
|
||||||
text_hw = colored("Привет, Мир!", "red", attrs=["reverse", "blink"])
|
|
||||||
|
|
||||||
coffe_art = art("coffee", number=1, space=1) # c[_]
|
|
||||||
women_art = art("woman", number=1, space=1) # ▓⚗_⚗▓ ▓⚗_⚗▓
|
|
||||||
butterfly_art = art("butterfly", number=1, space=1) # Ƹ̵̡Ӝ̵̨̄Ʒ
|
|
||||||
happy_art = art("happy", number=1, space=1) # ۜ\(סּںסּَ` )/ۜ
|
|
||||||
random_art = art("random", number=1, space=1) # Вывод случайного арта из библиотеки
|
|
||||||
|
|
||||||
block_font = 'block' # Делает большие квадраты вокруг рисунка
|
|
||||||
white_buble = 'white_bubble' # Делает вокруг букв белый кружок
|
|
||||||
cybermedium = 'cybermedium' # Делает текст более "киберпанковым"
|
|
||||||
random_font = 'random' # Делает случайный фон вокруг рисунка
|
|
||||||
|
|
||||||
|
|
||||||
# Коды для редактирования текста
|
|
||||||
class TextDecorator:
|
|
||||||
RESET_DECORATOR = "\033[0m" # Код для сброса форматирования
|
|
||||||
BOLD = "\033[1m" # Код для включения жирного текста
|
|
||||||
FAINT = "\033[2m" # Код для включения тонкого текста (редко поддерживается)
|
|
||||||
KURTIV = "\033[3m" # Код для включения курсива
|
|
||||||
UNDERLINE = "\033[4m" # Код для включения подчеркнутого текста
|
|
||||||
BLINK = "\033[5m" # Код для включения мигающего текста (редко поддерживается)
|
|
||||||
INVERT = "\033[7m" # Код для инверсированного цвета
|
|
||||||
HIDDEN = "\033[8m" # Код для скрытого текста
|
|
||||||
STRIKETHROUGH = "\033[9m" # Код для зачеркнутого текста
|
|
||||||
|
|
||||||
# Коды для цвета текста
|
|
||||||
BLACK = "\033[30m" # Черный текст
|
|
||||||
RED = "\033[31m" # Красный текст
|
|
||||||
GREEN = "\033[32m" # Зеленый текст
|
|
||||||
YELLOW = "\033[33m" # Желтый текст
|
|
||||||
BLUE = "\033[34m" # Синий текст
|
|
||||||
MAGENTA = "\033[35m" # Пурпурный текст
|
|
||||||
CYAN = "\033[36m" # Бирюзовый текст
|
|
||||||
WHITE = "\033[37m" # Белый текст
|
|
||||||
LIGHT_BLACK = "\033[90m" # Светлый черный (серый) текст
|
|
||||||
LIGHT_RED = "\033[91m" # Светлый красный текст
|
|
||||||
LIGHT_GREEN = "\033[92m" # Светлый зеленый текст
|
|
||||||
LIGHT_YELLOW = "\033[93m" # Светлый желтый текст
|
|
||||||
LIGHT_BLUE = "\033[94m" # Светлый синий текст
|
|
||||||
LIGHT_MAGENTA = "\033[95m" # Светлый пурпурный текст
|
|
||||||
LIGHT_CYAN = "\033[96m" # Светлый бирюзовый текст
|
|
||||||
LIGHT_WHITE = "\033[97m" # Светлый белый текст
|
|
||||||
|
|
||||||
# Коды для цвета фона
|
|
||||||
BLACK_BACKGROUND = "\033[40m" # Черный фон
|
|
||||||
RED_BACKGROUND = "\033[41m" # Красный фон
|
|
||||||
GREEN_BACKGROUND = "\033[42m" # Зеленый фон
|
|
||||||
YELLOW_BACKGROUND = "\033[43m" # Желтый фон
|
|
||||||
BLUE_BACKGROUND = "\033[44m" # Синий фон
|
|
||||||
MAGENTA_BACKGROUND = "\033[45m" # Пурпурный фон
|
|
||||||
CYAN_BACKGROUND = "\033[46m" # Бирюзовый фон
|
|
||||||
WHITE_BACKGROUND = "\033[47m" # Белый фон
|
|
||||||
LIGHT_BLACK_BACKGROUND = "\033[100m" # Светлый черный фон
|
|
||||||
LIGHT_RED_BACKGROUND = "\033[101m" # Светлый красный фон
|
|
||||||
LIGHT_GREEN_BACKGROUND = "\033[102m" # Светлый зеленый фон
|
|
||||||
LIGHT_YELLOW_BACKGROUND = "\033[103m" # Светлый желтый фон
|
|
||||||
LIGHT_BLUE_BACKGROUND = "\033[104m" # Светлый синий фон
|
|
||||||
LIGHT_MAGENTA_BACKGROUND = "\033[105m" # Светлый пурпурный фон
|
|
||||||
LIGHT_CYAN_BACKGROUND = "\033[106m" # Светлый бирюзовый фон
|
|
||||||
LIGHT_WHITE_BACKGROUND = "\033[107m" # Светлый белый фон
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# Небольшая библиотека для создания директорий
|
# Небольшая библиотека для создания директорий
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from config import ImportantPath, BotVariables
|
from BotLibrary.configs import ProjectPath, TypeDirectory
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("create_directories", "setup_directories", )
|
__all__ = ("create_directories", "setup_directories", )
|
||||||
@@ -22,8 +22,7 @@ def create_directories(base_directory, subdirectories):
|
|||||||
|
|
||||||
# Начальная установка пустых директорий
|
# Начальная установка пустых директорий
|
||||||
def setup_directories():
|
def setup_directories():
|
||||||
create_directories(ImportantPath.bot_personal_media, BotVariables.bot_media_directories)
|
create_directories(ProjectPath.personal_media, TypeDirectory.media_directories)
|
||||||
create_directories(ImportantPath.bot_received_media, BotVariables.bot_media_directories)
|
create_directories(ProjectPath.received_media, TypeDirectory.media_directories)
|
||||||
create_directories(ImportantPath.msg, BotVariables.bot_msg_directories)
|
create_directories(ProjectPath.bot_files, TypeDirectory.avatar_directories)
|
||||||
create_directories(ImportantPath.bot_files, BotVariables.bot_avatar_directories)
|
create_directories(ProjectPath.msg, TypeDirectory.msg_directories)
|
||||||
return f"Пустые директории - успешно созданы!"
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
from aiogram.types import ChatAdministratorRights
|
from aiogram.types import ChatAdministratorRights
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from config import BotEdit
|
from BotLibrary.configs import BotEdit
|
||||||
from BotLibrary.library.bots import bot
|
from BotLibrary.library.bots import bot
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
|
|||||||
@@ -3,21 +3,56 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from config import ImportantPath, LogsSet
|
|
||||||
from ..analitics.message_to_file import write_message_to_file
|
from BotLibrary.configs import ProjectPath
|
||||||
from ..analitics.user_data_to_file import write_user_info_to_file
|
from BotLibrary.analitics.message_to_file import write_message_to_file
|
||||||
|
from BotLibrary.analitics.user_data_to_file import write_user_info_to_file
|
||||||
|
|
||||||
# Настройка экспорта модулей и логирования
|
# Настройка экспорта модулей и логирования
|
||||||
__all__ = ("logger", "setup_logger", "cmd_logginger", "error_cmd_logginger",
|
__all__ = ("logger", "setup_logger", "cmd_logginger", "error_cmd_logginger",
|
||||||
"logginger", "common_msg_logginger", )
|
"logginger", "common_msg_logginger", )
|
||||||
|
|
||||||
|
|
||||||
|
# Класс для параметров логгера
|
||||||
|
class LogsSet:
|
||||||
|
# Максимальный размер лог-файла
|
||||||
|
max_size = "500 MB"
|
||||||
|
|
||||||
|
# Шаблон логов для информации
|
||||||
|
info_text = (
|
||||||
|
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> <red>|</red> "
|
||||||
|
"<blue>PRIMO-{extra[log_type]}</blue> <red>|</red> "
|
||||||
|
"<red>{extra[user]} |</red> <level>{message}</level>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Шаблон логов для ошибок
|
||||||
|
error_text = (
|
||||||
|
"<level>{time:YYYY-MM-DD HH:mm:ss} | "
|
||||||
|
"<bold>ERROR-{extra[log_type]}</bold> | "
|
||||||
|
"{extra[user]} | {message}</level>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Шаблон логов для отладки
|
||||||
|
debug_text = (
|
||||||
|
"<cyan>{time:YYYY-MM-DD HH:mm:ss}</cyan> <red>|</red> "
|
||||||
|
"<magenta>DEBUG-{extra[log_type]}</magenta> <red>|</red> "
|
||||||
|
"<yellow>{extra[user]} |</yellow> <level>{message}</level>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Шаблон логов для предупреждений
|
||||||
|
warning_text = (
|
||||||
|
"<yellow>{time:YYYY-MM-DD HH:mm:ss}</yellow> <red>|</red> "
|
||||||
|
"<orange>WARNING-{extra[log_type]}</orange> <red>|</red> "
|
||||||
|
"<red>{extra[user]} |</red> <level>{message}</level>"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Создание обычного логгера + логгер в файл
|
# Создание обычного логгера + логгер в файл
|
||||||
async def setup_logger():
|
async def setup_logger():
|
||||||
logger.remove() # Удаляем все логгеры
|
logger.remove() # Удаляем все логгеры
|
||||||
|
|
||||||
# Пустой логгер для записи отступов в файл уровня TRACE
|
# Пустой логгер для записи отступов в файл уровня TRACE
|
||||||
logger.add(ImportantPath.log_file,
|
logger.add(ProjectPath.log_file,
|
||||||
rotation=LogsSet.max_size,
|
rotation=LogsSet.max_size,
|
||||||
format="\n\n\n",
|
format="\n\n\n",
|
||||||
backtrace=True,
|
backtrace=True,
|
||||||
@@ -32,7 +67,7 @@ async def setup_logger():
|
|||||||
format=LogsSet.info_text,
|
format=LogsSet.info_text,
|
||||||
level="INFO",
|
level="INFO",
|
||||||
filter=lambda record: record["level"].name == "INFO")
|
filter=lambda record: record["level"].name == "INFO")
|
||||||
logger.add(ImportantPath.log_file,
|
logger.add(ProjectPath.log_file,
|
||||||
rotation=LogsSet.max_size,
|
rotation=LogsSet.max_size,
|
||||||
format=LogsSet.info_text,
|
format=LogsSet.info_text,
|
||||||
backtrace=True,
|
backtrace=True,
|
||||||
@@ -46,21 +81,19 @@ async def setup_logger():
|
|||||||
format=LogsSet.error_text,
|
format=LogsSet.error_text,
|
||||||
level="ERROR",
|
level="ERROR",
|
||||||
filter=lambda record: record["level"].name == "ERROR")
|
filter=lambda record: record["level"].name == "ERROR")
|
||||||
logger.add(ImportantPath.log_error_file,
|
logger.add(ProjectPath.log_error_file,
|
||||||
rotation=LogsSet.max_size,
|
rotation=LogsSet.max_size,
|
||||||
format=LogsSet.error_text,
|
format=LogsSet.error_text,
|
||||||
backtrace=True,
|
backtrace=True,
|
||||||
diagnose=True,
|
diagnose=True,
|
||||||
level="ERROR",
|
level="ERROR",
|
||||||
filter=lambda record: record["level"].name == "ERROR")
|
filter=lambda record: record["level"].name == "ERROR")
|
||||||
return f"Логгеры - подключены!"
|
|
||||||
|
|
||||||
|
|
||||||
# Запись сообщения в файл и информации о пользователи
|
# Запись сообщения в файл и информации о пользователи
|
||||||
async def logginger(message):
|
async def logginger(message):
|
||||||
write_user_info_to_file(message.from_user)
|
write_user_info_to_file(message.from_user)
|
||||||
await write_message_to_file(message)
|
await write_message_to_file(message)
|
||||||
return f"Сообщение и информация о пользователи - успешно записаны!"
|
|
||||||
|
|
||||||
|
|
||||||
# Создание функции логирования на обычные сообщения
|
# Создание функции логирования на обычные сообщения
|
||||||
@@ -72,14 +105,12 @@ async def common_msg_logginger(message, name, message_type, log_type):
|
|||||||
else:
|
else:
|
||||||
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").info(
|
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").info(
|
||||||
f"Получено сообщение из ({name}) : {message.text}")
|
f"Получено сообщение из ({name}) : {message.text}")
|
||||||
return f"Логгер на обычный сообщения - успешно активирован"
|
|
||||||
|
|
||||||
|
|
||||||
# Специальный логгер для команд. Вывод в консоль, файл и запись информации о пользователи
|
# Специальный логгер для команд. Вывод в консоль, файл и запись информации о пользователи
|
||||||
async def cmd_logginger(message, log_type, text):
|
async def cmd_logginger(message, log_type, text):
|
||||||
await logginger(message)
|
await logginger(message)
|
||||||
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").info(text)
|
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").info(text)
|
||||||
return f"Логгер на команду - успешно активирован"
|
|
||||||
|
|
||||||
|
|
||||||
# Специальный логгер для ошибок с командами. Вывод в консоль, файл и запись информации о пользователи
|
# Специальный логгер для ошибок с командами. Вывод в консоль, файл и запись информации о пользователи
|
||||||
@@ -87,4 +118,3 @@ async def error_cmd_logginger(message, log_type, e):
|
|||||||
text_error = f"Ошибка при использовании команды /{log_type.lower()}: {str(e)}\n"
|
text_error = f"Ошибка при использовании команды /{log_type.lower()}: {str(e)}\n"
|
||||||
await logginger(message)
|
await logginger(message)
|
||||||
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").error(text_error)
|
logger.bind(log_type=log_type, user=f"@{message.from_user.username}").error(text_error)
|
||||||
return text_error
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# BotLibrary/library/time.py
|
||||||
|
# Библиотека поиски времени
|
||||||
|
|
||||||
|
import pytz
|
||||||
|
from tzlocal import get_localzone
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
# Настройка экспорта модулей и логирования
|
||||||
|
__all__ = ("TimeVariable", "host_time", "get_choice_time", "get_time_zone")
|
||||||
|
log_type = "Time"
|
||||||
|
|
||||||
|
|
||||||
|
"""Создание класса с временными параметрами"""
|
||||||
|
class TimeVariable:
|
||||||
|
format = "%Y-%m-%d %H:%M:%S"
|
||||||
|
another_format = "%S:%M:%H %d-%m-%Y"
|
||||||
|
choice_main_utc = "Asia/Novosibirsk"
|
||||||
|
choice_utc_msk = "Europe/Moscow"
|
||||||
|
|
||||||
|
|
||||||
|
"""Получение времени хоста и иного места"""
|
||||||
|
timezone = pytz.timezone(TimeVariable.choice_utc_msk)
|
||||||
|
host_time = datetime.now(timezone)
|
||||||
|
|
||||||
|
|
||||||
|
"""Функция получения локальной временной зоны"""
|
||||||
|
def get_time_zone():
|
||||||
|
local_timezone = get_localzone()
|
||||||
|
return local_timezone.key
|
||||||
|
|
||||||
|
|
||||||
|
"""Возвращает текущее время по выбранному часовому поясу в формате строки"""
|
||||||
|
def get_choice_time(choice_utc):
|
||||||
|
# Текущее время в UTC
|
||||||
|
utc_now = datetime.now(pytz.utc)
|
||||||
|
|
||||||
|
# Московский часовой пояс
|
||||||
|
choice_tz = pytz.timezone(choice_utc)
|
||||||
|
|
||||||
|
# Перевод времени в московский часовой пояс
|
||||||
|
choice_now = utc_now.astimezone(choice_tz)
|
||||||
|
|
||||||
|
# Смещение UTC для Москвы
|
||||||
|
utc_offset_choice = choice_now.utcoffset().total_seconds() / 3600 # Смещение в часах
|
||||||
|
|
||||||
|
# Форматирование времени
|
||||||
|
choice_time = choice_now.strftime(TimeVariable.format) + f" (UTC{int(utc_offset_choice):+})"
|
||||||
|
|
||||||
|
return choice_time
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ __all__ = ("router", "db")
|
|||||||
|
|
||||||
# Импортируем библиотеки для экспорта
|
# Импортируем библиотеки для экспорта
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .db import *
|
|
||||||
|
|
||||||
|
|
||||||
# Создание роутера "sql_router"
|
# Создание роутера "sql_router"
|
||||||
|
|||||||
33
MySQL/list_ids.json
Normal file
33
MySQL/list_ids.json
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"ban_list_ids": {
|
||||||
|
"6666666666666": "Забанненый"
|
||||||
|
},
|
||||||
|
"important_adm_ids": {
|
||||||
|
"6751720805": "Лейн",
|
||||||
|
"7051557370": "Рикси",
|
||||||
|
"1570652377": "Риша",
|
||||||
|
"1398573474": "Финаки",
|
||||||
|
"1851081467": "Финик",
|
||||||
|
"929782381": "Хиде",
|
||||||
|
"6714237814": "Слешик"
|
||||||
|
},
|
||||||
|
"important_groups_ids": {
|
||||||
|
"1087968824": "GroupAnonymousBot",
|
||||||
|
"-1002247934490": "Сплетни_лавочек",
|
||||||
|
"-1002124483077": "Труба_Сквад",
|
||||||
|
"-1002123850090": "Тест_Чат",
|
||||||
|
"-1001552311087": "Все_Будет_Хорошо"
|
||||||
|
},
|
||||||
|
"important_users_list_ids": {
|
||||||
|
"7145369362": "Артур",
|
||||||
|
"1219440132": "Данил",
|
||||||
|
"1443833264": "Виктор",
|
||||||
|
"5424384921": "Олег",
|
||||||
|
"556943853": "Ваня",
|
||||||
|
"1295708467": "Степан"
|
||||||
|
},
|
||||||
|
"important_channel_ids": {
|
||||||
|
"10000000000000": "Канал1",
|
||||||
|
"20000000000000": "Канал2"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
# MySQL/list_ids.py
|
|
||||||
# Хранилище забанненых и важных пользователей и чатов
|
|
||||||
|
|
||||||
# Айди забанненых пользователей
|
|
||||||
ban_list_ids = {
|
|
||||||
6666666666666: "Лох", # @username_ban1
|
|
||||||
# 6751720805: "Лейн", # @verdise
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Айди администраторов бота
|
|
||||||
important_adm_ids = {
|
|
||||||
6751720805: "Лейн", # @verdise
|
|
||||||
7051557370: "Рикси", # @exetreon
|
|
||||||
1570652377: "Риша", # @ariinwx
|
|
||||||
1398573474: "Финаки", # @fin_aki
|
|
||||||
1851081467: "Финик", # @Huuuvs
|
|
||||||
929782381: "Хиде", # @tghjudy
|
|
||||||
6714237814: "Слешик", # @Slashichan
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Айди групп-администраторов
|
|
||||||
important_groups_ids = {
|
|
||||||
1087968824: "GroupAnonymousBot",
|
|
||||||
-1002247934490: "Сплетни_лавочек",
|
|
||||||
-1002124483077: "Труба_Сквад",
|
|
||||||
-1002123850090: "Тест_Чат",
|
|
||||||
-1001552311087: "Все_Будет_Хорошо",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Айди важных пользователей бота
|
|
||||||
important_users_list_ids = {
|
|
||||||
7145369362: "Артур", # @i_toksichen
|
|
||||||
1219440132: "Данил", # @ohwtfuck
|
|
||||||
1443833264: "Виктор", # @B500OP98
|
|
||||||
5424384921: "Олег", # @s1s2s3sf
|
|
||||||
556943853: "Ваня", # @skodaracing24
|
|
||||||
1295708467: "Степан", # @No_step_toback
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Айди важных каналов
|
|
||||||
important_channel_ids = {
|
|
||||||
# 7145369362: "Артур", # @i_toksichen
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,7 @@ command_text = "BAN"
|
|||||||
|
|
||||||
# Функция проверки блокировки пользователя в боте
|
# Функция проверки блокировки пользователя в боте
|
||||||
@router.message(lambda message: message.from_user.id in ListId.ban_list_id)
|
@router.message(lambda message: message.from_user.id in ListId.ban_list_id)
|
||||||
async def banned_user(message: types.Message):
|
async def banned_user(message: types_msg.Message):
|
||||||
try:
|
try:
|
||||||
# Вывод сообщения пользователю
|
# Вывод сообщения пользователю
|
||||||
chat_id = await find_chat_id(message)
|
chat_id = await find_chat_id(message)
|
||||||
@@ -36,7 +36,7 @@ async def banned_user(message: types.Message):
|
|||||||
|
|
||||||
# Обработчик команды /ban
|
# Обработчик команды /ban
|
||||||
@router.message(Command("ban", "ифт", "бан", ",fy", prefix=BotEdit.prefixs, ignore_case=True))
|
@router.message(Command("ban", "ифт", "бан", ",fy", prefix=BotEdit.prefixs, ignore_case=True))
|
||||||
async def ban_user_by_username(message: types.Message):
|
async def ban_user_by_username(message: types_msg.Message):
|
||||||
try:
|
try:
|
||||||
text = f"использовал(а) команду /{command_text.lower()}"
|
text = f"использовал(а) команду /{command_text.lower()}"
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,10 @@ command_text = "Send"
|
|||||||
|
|
||||||
|
|
||||||
# Обработчик команды /send для отправки сообщения определенному пользователю (в разработке)
|
# Обработчик команды /send для отправки сообщения определенному пользователю (в разработке)
|
||||||
@router.message(F.from_user.id.in_(ListId.important_ids),
|
@router.message(F.from_user.id.in_(ListId.important),
|
||||||
Command("send", "отправить", "отправ", "s", "ыутв", "jnghfdbnm", "jnghfd",
|
Command("send", "отправить", "отправ", "s", "ыутв", "jnghfdbnm", "jnghfd",
|
||||||
prefix=BotEdit.prefixs, ignore_case=True))
|
prefix=BotEdit.prefixs, ignore_case=True))
|
||||||
async def send_message(message: types.Message):
|
async def send_message(message: types_msg.Message):
|
||||||
try:
|
try:
|
||||||
if message.chat.id in ListId.adm_list_id:
|
if message.chat.id in ListId.adm_list_id:
|
||||||
text = f"использовал(а) команду /{command_text.lower()}"
|
text = f"использовал(а) команду /{command_text.lower()}"
|
||||||
@@ -37,7 +37,7 @@ async def send_message(message: types.Message):
|
|||||||
await bot.send_message(chat_id=user_id, text=text_send)
|
await bot.send_message(chat_id=user_id, text=text_send)
|
||||||
|
|
||||||
# Логирование
|
# Логирование
|
||||||
user_id = find_people_id(user_id)
|
user_id = find_imp_id(user_id)
|
||||||
await cmd_logginger(message, command_text, text)
|
await cmd_logginger(message, command_text, text)
|
||||||
|
|
||||||
# Логирование и отчет об отправке
|
# Логирование и отчет об отправке
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ router = Router(name="media_func")
|
|||||||
|
|
||||||
|
|
||||||
# @router.message(F.photo, ~F.caption)
|
# @router.message(F.photo, ~F.caption)
|
||||||
async def handle_photo_wo_caption(message: types.Message):
|
async def handle_photo_wo_caption(message: types_msg.Message):
|
||||||
caption = f"Простите, я не могу это увидеть. Вы можете описать что это?"
|
caption = f"Простите, я не могу это увидеть. Вы можете описать что это?"
|
||||||
await message.reply_photo(
|
await message.reply_photo(
|
||||||
photo=message.photo[-1].file_id,
|
photo=message.photo[-1].file_id,
|
||||||
@@ -22,14 +22,14 @@ async def handle_photo_wo_caption(message: types.Message):
|
|||||||
|
|
||||||
|
|
||||||
# @router.message(F.photo, F.caption.contains("please"))
|
# @router.message(F.photo, F.caption.contains("please"))
|
||||||
async def handle_photo_with_please_caption(message: types.Message):
|
async def handle_photo_with_please_caption(message: types_msg.Message):
|
||||||
text = f"Простите, я не могу это увидеть."
|
text = f"Простите, я не могу это увидеть."
|
||||||
await message.reply(text)
|
await message.reply(text)
|
||||||
return text
|
return text
|
||||||
|
|
||||||
|
|
||||||
# @router.message(any_media_filter, ~F.caption)
|
# @router.message(any_media_filter, ~F.caption)
|
||||||
async def handle_any_media_wo_caption(message: types.Message):
|
async def handle_any_media_wo_caption(message: types_msg.Message):
|
||||||
if message.document:
|
if message.document:
|
||||||
await message.reply_document(
|
await message.reply_document(
|
||||||
document=message.document.file_id,
|
document=message.document.file_id,
|
||||||
@@ -49,7 +49,7 @@ async def handle_any_media_wo_caption(message: types.Message):
|
|||||||
|
|
||||||
|
|
||||||
# @router.message(any_media_filter, F.caption)
|
# @router.message(any_media_filter, F.caption)
|
||||||
async def handle_any_media_w_caption(message: types.Message):
|
async def handle_any_media_w_caption(message: types_msg.Message):
|
||||||
text = f"Что-то на медиа. Твой текст: {message.caption!r}"
|
text = f"Что-то на медиа. Твой текст: {message.caption!r}"
|
||||||
await message.reply(text)
|
await message.reply(text)
|
||||||
return text
|
return text
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from magic_filter import RegexpMode
|
|||||||
from re import Match
|
from re import Match
|
||||||
|
|
||||||
from BotLibrary import logginger
|
from BotLibrary import logginger
|
||||||
import config
|
import configs
|
||||||
|
|
||||||
# Настройка экспорта модулей и роутера
|
# Настройка экспорта модулей и роутера
|
||||||
__all__ = ("router",)
|
__all__ = ("router",)
|
||||||
@@ -15,7 +15,7 @@ router = Router(name="regular_handlers")
|
|||||||
|
|
||||||
# Хэндлер на циферный код (регулярная функция)
|
# Хэндлер на циферный код (регулярная функция)
|
||||||
@router.message(
|
@router.message(
|
||||||
F.from_user.id.in_(config.ListId.adm_list_id),
|
F.from_user.id.in_(configs.ListId.adm_list_id),
|
||||||
F.text.regexp(r"(\d+)", mode=RegexpMode.MATCH).as_("code"),
|
F.text.regexp(r"(\d+)", mode=RegexpMode.MATCH).as_("code"),
|
||||||
)
|
)
|
||||||
async def handle_code(message: types.Message, code: Match[str]):
|
async def handle_code(message: types.Message, code: Match[str]):
|
||||||
|
|||||||
7
main.py
7
main.py
@@ -9,6 +9,9 @@ from BotCode.routers import set_commands
|
|||||||
|
|
||||||
# Запуск основного кода
|
# Запуск основного кода
|
||||||
async def main():
|
async def main():
|
||||||
|
# Создание логгера
|
||||||
|
await setup_logger()
|
||||||
|
|
||||||
# Подключение ANSI в стандартное Windows_cmd
|
# Подключение ANSI в стандартное Windows_cmd
|
||||||
just_fix_windows_console()
|
just_fix_windows_console()
|
||||||
|
|
||||||
@@ -22,12 +25,12 @@ async def main():
|
|||||||
await set_commands() # Установка команд бота
|
await set_commands() # Установка команд бота
|
||||||
await bot_get_info() # Получение информации о боте
|
await bot_get_info() # Получение информации о боте
|
||||||
|
|
||||||
# Создание логгера и оповещение о запуске
|
# Оповещение о запуске с информацией бота
|
||||||
await setup_logger()
|
|
||||||
logger.bind(log_type="AEP", user="Console").info(f"Начало запуска бота @{BotInfo.username}...")
|
logger.bind(log_type="AEP", user="Console").info(f"Начало запуска бота @{BotInfo.username}...")
|
||||||
bot_info_out()
|
bot_info_out()
|
||||||
|
|
||||||
# Включение опроса бота
|
# Включение опроса бота
|
||||||
|
await bot.delete_webhook()
|
||||||
await dp.start_polling(bot)
|
await dp.start_polling(bot)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
poetry.lock
generated
2
poetry.lock
generated
@@ -1331,4 +1331,4 @@ propcache = ">=0.2.0"
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.10"
|
python-versions = "^3.10"
|
||||||
content-hash = "5c732bafa39062b05f576fe9af74f08f65896e2af2788bbc502ccc8194f3cb68"
|
content-hash = "097c1d241fa62752422275b6a77b4a01de1d4774329740c01f9abffed43ee7c1"
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
|
# project_count_line.py
|
||||||
|
# Файл для подсчета количества строк и файлов
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# Настройка экспорта модулей
|
# Настройка экспорта модулей
|
||||||
__all__ = ("count_lines_in_python_files",)
|
__all__ = ("count_lines_in_python_files",)
|
||||||
type_messages = "count_lines_project"
|
type_messages = "count_lines_project"
|
||||||
|
|
||||||
|
|
||||||
|
# Функция подсчета строк и кода python3
|
||||||
def count_lines_in_python_files(directory):
|
def count_lines_in_python_files(directory):
|
||||||
total_lines = 0
|
total_lines = 0
|
||||||
total_files = 0
|
total_files = 0
|
||||||
@@ -32,8 +37,8 @@ def count_lines_in_python_files(directory):
|
|||||||
return total_lines, total_files
|
return total_lines, total_files
|
||||||
|
|
||||||
# Задайте путь к вашей директории
|
# Задайте путь к вашей директории
|
||||||
directory_path = r'/'
|
directory_path = r'./'
|
||||||
lines_count, files_count = count_lines_in_python_files(directory_path)
|
lines_count, files_count = count_lines_in_python_files(directory_path)
|
||||||
|
|
||||||
print(f'Общее количество строк в файлах .py: {lines_count}')
|
print(f"Общее количество строк в файлах .py: {lines_count}")
|
||||||
print(f'Общее количество файлов .py: {files_count}')
|
print(f"Общее количество файлов .py: {files_count}")
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ charset-normalizer = "^3.4.0"
|
|||||||
frozenlist = "^1.5.0"
|
frozenlist = "^1.5.0"
|
||||||
customtkinter = "^5.2.2"
|
customtkinter = "^5.2.2"
|
||||||
pillow = "^11.0.0"
|
pillow = "^11.0.0"
|
||||||
|
certifi = "^2024.12.14"
|
||||||
|
idna = "^3.10"
|
||||||
|
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
|
|||||||
169
start.bat
169
start.bat
@@ -1,93 +1,158 @@
|
|||||||
@echo off
|
@echo off
|
||||||
REM start.bat
|
REM start.bat
|
||||||
REM Этот файл нужно запускать перед стартом проекта
|
REM Этот файл нужно запускать перед стартом проекта.
|
||||||
REM Он создает локальное окружение, скачивает все зависимости
|
REM Он создает локальное окружение, скачивает все зависимости.
|
||||||
REM Чтобы запустить файл используйте: start start или ./start
|
REM Чтобы запустить файл, используйте: start start или ./start.
|
||||||
|
|
||||||
REM Включение кодировки для Windows
|
REM Установить кодировку UTF-8 и заголовок для консоли.
|
||||||
chcp 65001 > nul
|
chcp 65001 > nul
|
||||||
|
title Запуск Бота-aiogram
|
||||||
cls
|
cls
|
||||||
|
|
||||||
REM Изменяем заголовок окна консоли
|
REM Проверка установки PyPy.
|
||||||
title Запуск Бота-aiogram
|
|
||||||
|
|
||||||
REM Убедитесь, что PyPy установлен и доступен
|
|
||||||
echo Проверка наличия PyPy...
|
echo Проверка наличия PyPy...
|
||||||
pypy --version || (
|
pypy --version > nul 2>&1 || (
|
||||||
color C
|
color C
|
||||||
echo PyPy не установлен. Установите PyPy и повторите попытку.
|
echo [ОШИБКА]: PyPy не установлен. Установите PyPy и повторите попытку.
|
||||||
echo Установите его по ссылке: https://www.pypy.org/download.html
|
echo Ссылка для установки: https://www.pypy.org/download.html
|
||||||
title Проект - PyPy не установлен!
|
title Проект - PyPy не установлен!
|
||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
echo [OK]: PyPy установлен.
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Проверка наличия Git
|
REM Проверка установки Git.
|
||||||
echo Проверка наличия Git...
|
echo Проверка наличия Git...
|
||||||
git --version > nul 2>&1 || (
|
git --version > nul 2>&1 || (
|
||||||
color C
|
color C
|
||||||
echo Git не установлен. Установите Git и повторите попытку.
|
echo [ОШИБКА]: Git не установлен. Установите Git и повторите попытку.
|
||||||
echo Установите его по ссылке: https://git-scm.com/downloads
|
echo Ссылка для установки: https://git-scm.com/downloads
|
||||||
title Проект - Git не установлен!
|
title Проект - Git не установлен!
|
||||||
pause
|
pause
|
||||||
exit /b
|
exit /b
|
||||||
)
|
)
|
||||||
|
echo [OK]: Git установлен.
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Проверка наличия Git репозитория
|
REM Проверка и инициализация Git репозитория.
|
||||||
if not exist .git (
|
if not exist .git (
|
||||||
echo Создание Git репозитория...
|
echo Создание Git репозитория...
|
||||||
git init
|
git init > nul
|
||||||
echo Добавление удалённого репозитория...
|
git remote add origin https://github.com/Whyverum/PrimoPearlBot > nul
|
||||||
git remote add origin https://github.com/Whyverum/PrimoPearlBot
|
echo [OK]: Git репозиторий создан и настроен.
|
||||||
) else (
|
) else (
|
||||||
echo Удалённый репозиторий уже настроен.
|
echo [OK]: Git репозиторий уже настроен.
|
||||||
)
|
)
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Создание .env для хранения токенов
|
REM Создание виртуального окружения, если его еще нет.
|
||||||
echo Создаётся файл .env...
|
|
||||||
(
|
|
||||||
echo main_bot_token=Вставьте Токен бота с @BotFather
|
|
||||||
echo APIKey=Иной ключ-api
|
|
||||||
echo WebAPIKey=Иной ключ web-api
|
|
||||||
echo important_id=Иной важный айди
|
|
||||||
echo secret=Некий секрет
|
|
||||||
) > .env
|
|
||||||
echo.
|
|
||||||
echo Файл .env - успешно создан!
|
|
||||||
echo Пожалуйста, перейдите в файл и вставьте свои ключи.
|
|
||||||
pause > Вы готовы продолжить? Нажмите ENTER, чтобы продолжить!
|
|
||||||
echo.
|
|
||||||
pause > Вы уверены???Нажмите ENTER, чтобы продолжить!
|
|
||||||
|
|
||||||
REM Создание виртуального окружения, если его еще нет
|
|
||||||
if not exist .venv (
|
if not exist .venv (
|
||||||
echo Создание виртуального окружения...
|
echo Создание виртуального окружения...
|
||||||
pypy -m venv .venv
|
pypy -m venv .venv > nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
color C
|
||||||
|
echo [ОШИБКА]: Не удалось создать виртуальное окружение.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
echo [OK]: Виртуальное окружение создано.
|
||||||
|
) else (
|
||||||
|
echo [OK]: Виртуальное окружение уже существует.
|
||||||
|
)
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
|
REM Создание файла .env с вводом данных из консоли в папке .venv.
|
||||||
|
if not exist .venv\.env (
|
||||||
|
echo Создаётся файл .env в папке .venv...
|
||||||
|
set /p main_bot_token=Введите токен бота (main_bot_token):
|
||||||
|
set /p APIKey=Введите ключ API (APIKey):
|
||||||
|
set /p WebAPIKey=Введите ключ Web API (WebAPIKey):
|
||||||
|
set /p important_id=Введите важный ID (important_id):
|
||||||
|
set /p secret=Введите секретный ключ (secret):
|
||||||
|
|
||||||
|
REM Проверяем пустые значения.
|
||||||
|
if "%main_bot_token%"=="" (
|
||||||
|
echo [ОШИБКА]: Токен бота не может быть пустым.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if "%APIKey%"=="" (
|
||||||
|
echo [ОШИБКА]: Ключ API не может быть пустым.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if "%WebAPIKey%"=="" (
|
||||||
|
echo [ОШИБКА]: Ключ Web API не может быть пустым.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if "%important_id%"=="" (
|
||||||
|
echo [ОШИБКА]: Важный ID не может быть пустым.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
if "%secret%"=="" (
|
||||||
|
echo [ОШИБКА]: Секретный ключ не может быть пустым.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
)
|
)
|
||||||
|
|
||||||
REM Активируем виртуальное окружение
|
REM Создание файла .env.
|
||||||
|
(
|
||||||
|
echo main_bot_token=%main_bot_token%
|
||||||
|
echo APIKey=%APIKey%
|
||||||
|
echo WebAPIKey=%WebAPIKey%
|
||||||
|
echo important_id=%important_id%
|
||||||
|
echo secret=%secret%
|
||||||
|
) > .venv\.env
|
||||||
|
echo [OK]: Файл .env успешно создан в папке .venv!
|
||||||
|
) else (
|
||||||
|
echo [OK]: Файл .env уже существует в папке .venv.
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM Активация виртуального окружения.
|
||||||
echo Активация виртуального окружения...
|
echo Активация виртуального окружения...
|
||||||
call .venv\Scripts\activate
|
call .venv\Scripts\activate > nul
|
||||||
echo.
|
if %errorlevel% neq 0 (
|
||||||
|
color C
|
||||||
REM Установка Poetry, если не установлен
|
echo [ОШИБКА]: Не удалось активировать виртуальное окружение.
|
||||||
echo Проверка наличия Poetry...
|
pause
|
||||||
poetry --version || (
|
exit /b
|
||||||
echo Установка Poetry...
|
|
||||||
pip install poetry
|
|
||||||
)
|
)
|
||||||
|
echo [OK]: Виртуальное окружение активировано.
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Установка зависимостей из poetry.lock и pyproject.toml
|
REM Проверка и установка Poetry.
|
||||||
echo Установка зависимостей...
|
echo Проверка наличия Poetry...
|
||||||
poetry install
|
poetry --version > nul 2>&1 || (
|
||||||
poetry update
|
echo Установка Poetry...
|
||||||
|
pip install poetry > nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
color C
|
||||||
|
echo [ОШИБКА]: Не удалось установить Poetry.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
echo [OK]: Poetry успешно установлен.
|
||||||
|
)
|
||||||
|
echo [OK]: Poetry установлен.
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
REM Очистка консоли перед запуском main.py
|
REM Установка зависимостей.
|
||||||
|
echo Установка зависимостей проекта...
|
||||||
|
poetry install > nul
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
color C
|
||||||
|
echo [ОШИБКА]: Не удалось установить зависимости.
|
||||||
|
pause
|
||||||
|
exit /b
|
||||||
|
)
|
||||||
|
echo [OK]: Зависимости установлены.
|
||||||
|
echo.
|
||||||
|
|
||||||
|
REM Очистка консоли перед запуском.
|
||||||
cls
|
cls
|
||||||
pause > Настройте конфигуратор или запустите main.py!
|
echo Все готово! Настройте конфигурацию или запустите main.py.
|
||||||
|
pause
|
||||||
|
|||||||
Reference in New Issue
Block a user