diff --git a/.idea/PRIMOWORLD.iml b/.idea/PRIMOWORLD.iml
index 0e26cf7..7594385 100644
--- a/.idea/PRIMOWORLD.iml
+++ b/.idea/PRIMOWORLD.iml
@@ -16,9 +16,9 @@
-
+
diff --git a/BotCode/routers/commands/user_cmd/start_cmd.py b/BotCode/routers/commands/user_cmd/start_cmd.py
index 14ebf36..6a24508 100644
--- a/BotCode/routers/commands/user_cmd/start_cmd.py
+++ b/BotCode/routers/commands/user_cmd/start_cmd.py
@@ -3,21 +3,17 @@
from BotLibrary import CommandHandler
from BotCode.keyboards import get_start_kb
-user = "2"
-# Создание команды /start
+
+# Создание команды /start с несколькими медиа
start_cmd = CommandHandler(
name="start",
description="Добро пожаловать!",
- keywords=["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы",
- "ыефке", "cnfhn", "pfgecr", "gecr", "щт", "drk", "restart", "куыефке"],
- callbackdata="keywords",
+ keywords=["start"],
keyboard=get_start_kb,
media="photo",
- path_to_media="ProjectsFiles/media/Banners/start_banner.jpg",
- tg_links=True,
- text_msg=f"""
-Здравствуй, дорогой Путник.
-Мое имя - Эми! Я - ваш путеводитель в этом прекрасном месте!
-Вы готовы отправиться в этот дивный мир?
-""",
+ path_to_media=[
+ "ProjectsFiles/media/Banners/start_banner.jpg",
+ ],
+ tg_links=False,
+ text_msg="Привет! Вот группа фото!",
)
diff --git a/BotLibrary/samples/user_cmd_class.py b/BotLibrary/samples/user_cmd_class.py
index 46a9ce5..f670c24 100644
--- a/BotLibrary/samples/user_cmd_class.py
+++ b/BotLibrary/samples/user_cmd_class.py
@@ -4,6 +4,7 @@
from aiogram import Router, types, F
from aiogram.enums import ChatAction
from aiogram.filters import Command
+from aiogram.types import InputMediaPhoto
from BotLibrary import valid_url
from ProjectsFiles import BotVar
@@ -13,16 +14,16 @@ from BotLibrary.loggers import Logs
# Настройки экспорта в модули
__all__ = ("CommandHandler",)
+
# Класс-шаблон для команд
class CommandHandler:
- def __init__(self, text_msg, name: str, keywords : list, chat_action : bool = False,
- description: str = "Описание команды", tg_links : bool = False,
- keyboard = None, prefix = BotVar.prefix, callbackdata = None,
- ignore_case : bool = True, activate_keywoards : bool = True,
- activate_commands : bool = True, activate_callback : bool = True,
- media : str = "message", path_to_media : str = None, parse_mode : str = BotVar.parse_mode,
- disable_notification : bool = False,
- ):
+ def __init__(self, text_msg, name: str, keywords: list, chat_action: bool = False,
+ description: str = "Описание команды", tg_links: bool = False,
+ keyboard=None, prefix=BotVar.prefix, callbackdata=None,
+ ignore_case: bool = True, activate_keywoards: bool = True,
+ activate_commands: bool = True, activate_callback: bool = True,
+ media: str = "message", path_to_media=None, parse_mode: str = BotVar.parse_mode,
+ disable_notification: bool = False):
self.router = Router(name=f"{name}_router")
self.name = name
@@ -37,14 +38,20 @@ class CommandHandler:
self.disable_notification = disable_notification
self.media = media.lower()
- self.path_to_media = path_to_media
+ # Поддержка до 10 медиафайлов через список
+ if path_to_media is None:
+ self.path_to_media = []
+ elif isinstance(path_to_media, (str, types.FSInputFile)):
+ self.path_to_media = [path_to_media]
+ elif isinstance(path_to_media, list):
+ self.path_to_media = path_to_media[:10] # Ограничение до 10 элементов
self.tg_links = tg_links
+
if callbackdata == "keywords":
self.callbackdata = keywords
else:
self.callbackdata = callbackdata
-
# Привязываем хэндлер к роутеру
if activate_commands:
self.router.message(Command(*keywords, prefix=prefix, ignore_case=ignore_case))(self.handler)
@@ -53,15 +60,14 @@ class CommandHandler:
if activate_callback:
self.router.message(F.text.lower().in_(callbackdata))(self.handler)
-
async def handler(self, message: types.Message):
"""Основной хэндлер команды."""
try:
- url : bool = valid_url(self.path_to_media)
if self.tg_links:
self.text_msg = self.text_msg.replace("", str(message.from_user.id))
Logs.info(log_type=self.log_type, user=username(message), text=f"использовал(а) команду /{self.name}")
+
if self.media == "message":
await message.reply(
text=self.text_msg,
@@ -75,122 +81,180 @@ class CommandHandler:
action=ChatAction.TYPING,
)
else:
- if self.media == "photo":
- if url:
- await message.reply_photo(photo=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_photo(photo=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
+ if self.media == "photo" and len(self.path_to_media) > 1:
+ # Отправка медиагруппы для фотографий
+ media_group = []
+ for media_path in self.path_to_media:
+ url = valid_url(media_path)
+ if url:
+ media_group.append(InputMediaPhoto(media=media_path))
+ else:
+ media_group.append(InputMediaPhoto(media=types.FSInputFile(path=media_path)))
+ # Добавляем подпись и клавиатуру к последнему элементу
+ media_group[-1].caption = self.text_msg
+ media_group[-1].parse_mode = self.parse_mode
+
+ await message.reply_media_group(
+ media=media_group,
+ disable_notification=self.disable_notification
+ )
+ # Отправка клавиатуры отдельным сообщением, если есть
+ if self.keyboard:
+ await message.reply(
+ text=" ",
+ reply_markup=self.keyboard(),
+ disable_notification=self.disable_notification
+ )
if self.chat_action:
await message.bot.send_chat_action(
chat_id=message.chat.id,
action=ChatAction.UPLOAD_PHOTO,
)
+ else:
+ # Одиночное медиа или другие типы
+ for idx, media_path in enumerate(self.path_to_media):
+ is_last = idx == len(self.path_to_media) - 1
+ url = valid_url(media_path)
- elif self.media == "gif":
- if url:
- await message.reply_animation(animation=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_animation(animation=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- if self.chat_action:
- await message.bot.send_chat_action(
- chat_id=message.chat.id,
- action=ChatAction.UPLOAD_VIDEO,
- )
+ if self.media == "photo":
+ if url:
+ await message.reply_photo(
+ photo=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_photo(
+ photo=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_PHOTO,
+ )
+ elif self.media == "gif":
+ if url:
+ await message.reply_animation(
+ animation=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_animation(
+ animation=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_VIDEO,
+ )
- elif self.media == "video":
- if url:
- await message.reply_video(video=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_video(video=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- if self.chat_action:
- await message.bot.send_chat_action(
- chat_id=message.chat.id,
- action=ChatAction.UPLOAD_VIDEO,
- )
+ elif self.media == "video":
+ if url:
+ await message.reply_video(
+ video=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_video(
+ video=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_VIDEO,
+ )
- elif self.media == "videonote":
- if url:
- await message.reply_video_note(video_note=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_video_note(video_note=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- if self.chat_action:
- await message.bot.send_chat_action(
- chat_id=message.chat.id,
- action=ChatAction.UPLOAD_VIDEO_NOTE,
- )
+ elif self.media == "videonote":
+ if url:
+ await message.reply_video_note(
+ video_note=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_video_note(
+ video_note=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_VIDEO_NOTE,
+ )
- elif self.media == "audio":
- if url:
- await message.reply_audio(audio=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_audio(audio=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- if self.chat_action:
- await message.bot.send_chat_action(
- chat_id=message.chat.id,
- action=ChatAction.UPLOAD_VOICE,
- )
+ elif self.media == "audio":
+ if url:
+ await message.reply_audio(
+ audio=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_audio(
+ audio=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_VOICE,
+ )
- elif self.media == "file":
- if url:
- await message.reply_document(document=self.path_to_media,
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- else:
- await message.reply_document(document=types.FSInputFile(path=self.path_to_media),
- caption=self.text_msg,
- reply_markup=self.keyboard() if self.keyboard else None,
- parse_mode=self.parse_mode,
- disable_notification=self.disable_notification)
- if self.chat_action:
- await message.bot.send_chat_action(
- chat_id=message.chat.id,
- action=ChatAction.UPLOAD_DOCUMENT,
- )
+ elif self.media == "file":
+ if url:
+ await message.reply_document(
+ document=media_path,
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ else:
+ await message.reply_document(
+ document=types.FSInputFile(path=media_path),
+ caption=self.text_msg if is_last else None,
+ reply_markup=self.keyboard() if is_last and self.keyboard else None,
+ parse_mode=self.parse_mode,
+ disable_notification=self.disable_notification
+ )
+ if self.chat_action and is_last:
+ await message.bot.send_chat_action(
+ chat_id=message.chat.id,
+ action=ChatAction.UPLOAD_DOCUMENT,
+ )
# Проверка на ошибку
except Exception as e:
- Logs.error(log_type=self.log_type, user=username(message), text=f"Ошибка команды: {e}")
+ Logs.error(log_type=self.log_type, user=username(message), text=f"Ошибка команды: {e}")
\ No newline at end of file
diff --git a/Test/GUI/__init__.py b/GUI/__init__.py
similarity index 100%
rename from Test/GUI/__init__.py
rename to GUI/__init__.py
diff --git a/Test/GUI/console.py b/GUI/console.py
similarity index 100%
rename from Test/GUI/console.py
rename to GUI/console.py
diff --git a/Test/GUI/console_0.py b/GUI/console_0.py
similarity index 100%
rename from Test/GUI/console_0.py
rename to GUI/console_0.py
diff --git a/Test/__init__.py b/Test/__init__.py
index b37c6a3..c10beb9 100644
--- a/Test/__init__.py
+++ b/Test/__init__.py
@@ -3,10 +3,6 @@
# Импортируем библиотеки для экспорта
from aiogram import Router
-from .commands import *
-from .GUI import *
-from .old_files import *
-
# Создание роутера "test_router"
router = Router(name="test_router")