This commit is contained in:
2026-03-18 09:36:10 +03:00
parent d307061669
commit b9cd26abf1
4 changed files with 69 additions and 0 deletions
@@ -4,6 +4,7 @@ from dutylog.application.bot.user_dialogs.user_menu.main_menu import main_menu_w
from dutylog.application.bot.user_dialogs.user_menu.history import history_window
from dutylog.application.bot.user_dialogs.user_menu.top_residents import top_residents_window
from dutylog.application.bot.user_dialogs.user_menu.faq import faq_window
from dutylog.application.bot.user_dialogs.user_menu.feedback import feedback_window
main_menu_dialog = Dialog(
@@ -11,4 +12,5 @@ main_menu_dialog = Dialog(
history_window,
top_residents_window,
faq_window,
feedback_window,
)
@@ -6,6 +6,7 @@ class MainMenuSG(StatesGroup):
history = State()
top_residents = State()
faq = State()
feedback = State()
class AdminMenuSG(StatesGroup):
@@ -0,0 +1,60 @@
from aiogram import Bot
from aiogram.types import Message
from aiogram_dialog import Window, DialogManager
from aiogram_dialog.widgets.text import Const
from aiogram_dialog.widgets.kbd import SwitchTo
from aiogram_dialog.widgets.input import MessageInput
from dishka import FromDishka
from dishka.integrations.aiogram_dialog import inject
from dutylog.application.bot.user_dialogs.states import MainMenuSG
from dutylog.infrastructure.database.repositories.users_repository import UsersRepository
from dutylog.infrastructure.database.repositories.residents_repository import ResidentsRepository
from dutylog.infrastructure.utils.config import Config
@inject
async def on_feedback_message(
message: Message,
widget: MessageInput,
dialog_manager: DialogManager,
users_repository: FromDishka[UsersRepository],
residents_repository: FromDishka[ResidentsRepository],
config: FromDishka[Config],
) -> None:
assert message.bot
bot: Bot = message.bot
user = await users_repository.get_user_by_id(message.from_user.id)
resident = await residents_repository.get_resident_by_user_id(message.from_user.id)
username = f"@{user.username}" if user and user.username else "без username"
name = resident.real_name if resident and resident.real_name else (user.first_name if user and user.first_name else "Неизвестно")
meta = (
f"📬 <b>Обратная связь</b>\n\n"
f"👤 {name} ({username})\n"
f"🆔 <code>{message.from_user.id}</code>"
)
await bot.send_message(config.bot.creator_id, meta)
await bot.copy_message(
chat_id=config.bot.creator_id,
from_chat_id=message.chat.id,
message_id=message.message_id,
)
await message.answer("✅ Сообщение отправлено. Спасибо за обратную связь!")
await dialog_manager.switch_to(MainMenuSG.main)
feedback_window = Window(
Const(
"💬 <b>Обратная связь</b>\n\n"
"Напишите ваше сообщение — предложение по улучшению, вопрос, жалоба или что угодно ещё.\n\n"
"<i>🔒 Сообщение полностью анонимно.</i>"
),
MessageInput(on_feedback_message),
SwitchTo(Const("◀️ Назад"), id="back_from_feedback", state=MainMenuSG.main),
state=MainMenuSG.feedback,
)
@@ -137,6 +137,12 @@ main_menu_window = Window(
state=MainMenuSG.faq,
when="is_regular_user",
),
SwitchTo(
Const("💬 Обратная связь"),
id="feedback_btn",
state=MainMenuSG.feedback,
when="is_regular_user",
),
state=MainMenuSG.main,
getter=get_main_menu_data,
)