Третья часть: сделаны обработчики команд
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
from aiogram import Router
|
from aiogram import Router
|
||||||
from .routers import router as all_routers
|
from .routers import router as all_routers
|
||||||
|
from .inline import *
|
||||||
|
from .keyboards import *
|
||||||
|
|
||||||
# Объявление главного роутера
|
# Объявление главного роутера
|
||||||
router = Router(name="main_router")
|
router = Router(name="main_router")
|
||||||
|
|||||||
@@ -2,3 +2,5 @@
|
|||||||
# Инициализация модуля keyboards, для создания клавиатур
|
# Инициализация модуля keyboards, для создания клавиатур
|
||||||
|
|
||||||
# Экспортирование модулей во внешние слои проекта
|
# Экспортирование модулей во внешние слои проекта
|
||||||
|
from .inline_kb import *
|
||||||
|
from .reply_kb import *
|
||||||
|
|||||||
@@ -2,3 +2,4 @@
|
|||||||
# Инициализация модуля inline_kb, для inline-клавиатур
|
# Инициализация модуля inline_kb, для inline-клавиатур
|
||||||
|
|
||||||
# Экспортирование модулей во внешние слои проекта
|
# Экспортирование модулей во внешние слои проекта
|
||||||
|
from start_inline_kb import get_start_kb
|
||||||
|
|||||||
19
BotCode/keyboards/inline_kb/start_inline_kb.py
Normal file
19
BotCode/keyboards/inline_kb/start_inline_kb.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# BotCode/keyboards/inline_kb/start_inline_kb.py
|
||||||
|
# Создания инлайн-клавиатуры на команду: /start
|
||||||
|
|
||||||
|
from aiogram.types import InlineKeyboardMarkup
|
||||||
|
from BotLibrary import ikb
|
||||||
|
|
||||||
|
# Создание роутера и настройка экспорта
|
||||||
|
__all__ = ("get_start_kb",)
|
||||||
|
|
||||||
|
|
||||||
|
# Функция создания клавиатуры на команду: /actor
|
||||||
|
def get_start_kb() -> InlineKeyboardMarkup:
|
||||||
|
# Добавляем кнопки, группируя их по строкам
|
||||||
|
ikb.button(text="Посмотреть инфо-канал", url="https://t.me/laveilinfo")
|
||||||
|
ikb.button(text="Отправить анкету", url="https://t.me/laveilinfo")
|
||||||
|
ikb.button(text="Предложить союз", url="https://t.me/laveilinfo")
|
||||||
|
|
||||||
|
ikb.adjust(1)
|
||||||
|
return ikb.as_markup()
|
||||||
@@ -2,12 +2,14 @@
|
|||||||
# # Работа с командой /start, для запуска бота
|
# # Работа с командой /start, для запуска бота
|
||||||
|
|
||||||
from .user_cmd_class import CommandHandler
|
from .user_cmd_class import CommandHandler
|
||||||
|
from BotCode.keyboards import get_start_kb
|
||||||
|
|
||||||
# Создание команды /start с нужными параметрами
|
# Создание команды /start с нужными параметрами
|
||||||
start_cmd = CommandHandler(
|
start_cmd = CommandHandler(
|
||||||
name="start",
|
name="start",
|
||||||
description="Запустить бота",
|
description="Добро пожаловать!",
|
||||||
keywords=["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы",
|
keywords=["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы",
|
||||||
"ыефке", "cnfhn", "pfgecr", "gecr", "щт", "drk", "restart", "куыефке"],
|
"ыефке", "cnfhn", "pfgecr", "gecr", "щт", "drk", "restart", "куыефке"],
|
||||||
text_msg="Старт!",
|
text_msg="Старт!",
|
||||||
|
keyboard=get_start_kb,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ from BotLibrary import *
|
|||||||
|
|
||||||
# Класс-шаблон для команд
|
# Класс-шаблон для команд
|
||||||
class CommandHandler:
|
class CommandHandler:
|
||||||
def __init__(self, name: str, description: str,
|
def __init__(self, name: str, keywords : list,
|
||||||
keywords: list, text_msg: str,
|
description: str = "Описание команды", text_msg : str = "Сообщение",
|
||||||
keyboard=None, prefix = BotVar.prefix,
|
keyboard = None, prefix = BotVar.prefix,
|
||||||
ignore_case = True,
|
ignore_case : bool = True, activate_keywoards : bool = True,
|
||||||
|
activate_commands : bool = True,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Универсальный обработчик команд для бота.
|
Универсальный обработчик команд для бота.
|
||||||
@@ -30,9 +31,9 @@ class CommandHandler:
|
|||||||
self.keyboard = keyboard
|
self.keyboard = keyboard
|
||||||
|
|
||||||
# Привязываем хэндлер к роутеру
|
# Привязываем хэндлер к роутеру
|
||||||
self.router.message(
|
if activate_commands:
|
||||||
Command(*keywords, prefix=prefix, ignore_case=ignore_case)
|
self.router.message(Command(*keywords, prefix=prefix, ignore_case=ignore_case))(self.handler)
|
||||||
)(self.handler)
|
if activate_keywoards:
|
||||||
self.router.message(F.text.lower().in_(keywords))(self.handler)
|
self.router.message(F.text.lower().in_(keywords))(self.handler)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
13
BotCode/servey/__init__.py
Normal file
13
BotCode/servey/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# BotCode/routers/servey/__init__.py
|
||||||
|
# Инициализация пакета servey, для работы с последствиями
|
||||||
|
|
||||||
|
from aiogram import Router
|
||||||
|
|
||||||
|
# Объявление роутера и настройка экспорта модулей
|
||||||
|
__all__ = ("router",)
|
||||||
|
router = Router(name="servey_head_router")
|
||||||
|
|
||||||
|
# Идет самым последним, если другие роутеры не сработали
|
||||||
|
router.include_routers(
|
||||||
|
|
||||||
|
)
|
||||||
52
BotCode/servey/adm_answer.py
Normal file
52
BotCode/servey/adm_answer.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
from aiogram import Router, types
|
||||||
|
from aiogram.fsm.context import FSMContext
|
||||||
|
from aiogram.fsm.state import StatesGroup, State
|
||||||
|
|
||||||
|
from BotLibrary import *
|
||||||
|
|
||||||
|
# Настройка роутера
|
||||||
|
router = Router(name="anketa_router")
|
||||||
|
|
||||||
|
# Определение состояния для работы с админом
|
||||||
|
class AdmAnswer(StatesGroup):
|
||||||
|
waiting_for_message = State() # Состояние ожидания сообщения от администратора
|
||||||
|
|
||||||
|
# Обработчик callback-запроса (нажатие на кнопку "Ответить пользователю")
|
||||||
|
@router.callback_query(lambda c: c.data.startswith("answer_user_"))
|
||||||
|
async def handle_respond_button(callback_query: types.CallbackQuery, state: FSMContext):
|
||||||
|
# Извлекаем ID пользователя из callback_data
|
||||||
|
user_id = int(callback_query.data.split("_")[2])
|
||||||
|
|
||||||
|
# Сохраняем ID пользователя для дальнейшего использования
|
||||||
|
await state.update_data(user_id=user_id)
|
||||||
|
|
||||||
|
# Устанавливаем состояние для ожидания сообщения от администратора
|
||||||
|
await state.set_state(AdmAnswer.waiting_for_message)
|
||||||
|
|
||||||
|
# Отправляем админу запрос на ввод сообщения
|
||||||
|
await callback_query.message.answer("Напишите сообщение, которое вы хотите отправить пользователю:")
|
||||||
|
|
||||||
|
# Убираем кнопку из сообщения
|
||||||
|
await callback_query.answer()
|
||||||
|
|
||||||
|
# Обработчик для получения сообщения от администратора и отправки его пользователю
|
||||||
|
@router.message(AdmAnswer.waiting_for_message)
|
||||||
|
async def handle_admin_message(message: types.Message, state: FSMContext):
|
||||||
|
user_data = await state.get_data()
|
||||||
|
user_id = user_data.get("user_id")
|
||||||
|
|
||||||
|
if user_id:
|
||||||
|
try:
|
||||||
|
# Отправляем сообщение пользователю
|
||||||
|
await bot.send_message(user_id, f"Администратор: {message.text}")
|
||||||
|
|
||||||
|
# Подтверждаем админу, что сообщение отправлено
|
||||||
|
await message.answer("Сообщение успешно отправлено пользователю.")
|
||||||
|
except Exception as e:
|
||||||
|
await message.answer(f"Произошла ошибка при отправке сообщения: {e}")
|
||||||
|
finally:
|
||||||
|
# Сбрасываем состояние
|
||||||
|
await state.clear()
|
||||||
|
else:
|
||||||
|
# Если данные отсутствуют, информируем администратора
|
||||||
|
await message.answer("Произошла ошибка. Попробуйте снова.")
|
||||||
@@ -3,3 +3,4 @@
|
|||||||
|
|
||||||
# Экспортирование модулей во внешние слои проекта
|
# Экспортирование модулей во внешние слои проекта
|
||||||
from .email_valid import *
|
from .email_valid import *
|
||||||
|
from .username import *
|
||||||
|
|||||||
11
BotLibrary/validators/username.py
Normal file
11
BotLibrary/validators/username.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# BotLibrary/validators/username.py
|
||||||
|
# Получение юзера пользователя
|
||||||
|
|
||||||
|
from aiogram.types import message
|
||||||
|
|
||||||
|
# Настройка экспорта из модуля
|
||||||
|
__all__ = ("username",)
|
||||||
|
|
||||||
|
# Функция получения юзера или id пользователя
|
||||||
|
def username(message: message.Message):
|
||||||
|
return f"@{message.from_user.username or message.from_user.id}"
|
||||||
Reference in New Issue
Block a user