from aiogram import Dispatcher, types
from aiogram.dispatcher import FSMContext
from app.core.states.user_settings import UserSettings
from app.services.database.dao import get_status, switch_status, register_report
async def user_settings(message: types.Message):
await UserSettings.settings.set()
available_actions = []
status = await get_status(message.from_user.id)
if status == 0:
available_actions.append("Включить уведомления")
else:
available_actions.append("Отключить уведомления")
available_actions.append("Написать автору бота")
available_actions.append("Выйти из настроек")
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add(*available_actions)
await message.answer("Настройки профиля:", reply_markup=keyboard)
async def switch_user_status(message: types.Message):
await UserSettings.switch_popups.set()
status = await get_status(message.from_user.id)
await switch_status(message.from_user.id, status)
await message.answer("Успешно!")
status = bool(status)
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add("Вернуться")
if not status is False:
await message.answer("Теперь вы не будете получать уведомления о новых версиях. ",
reply_markup=keyboard)
else:
await message.answer("Теперь вы получаете уведомления о новых версиях. ",
reply_markup=keyboard)
async def quit_settings(message: types.Message, state: FSMContext):
await message.answer("Вы вышли из настроек.", reply_markup=types.ReplyKeyboardRemove())
await state.finish()
async def pick_type_of_message(message: types.Message):
print(f"Пользователь {message.from_user.first_name} {message.from_user.last_name} хочет написать"
f"сообщение администратору. Интересно, с какой целью?")
print('----------------------------------------------------------------------')
await UserSettings.type_of_message.set()
available_topics = ["Вопрос", "Отзыв или предложение", "Баг / ошибка", "Жалоба"]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=4)
keyboard.add(*available_topics)
await message.answer("Выберите тип обращения:", reply_markup=keyboard)
async def compose_message_to_admin(message: types.Message, state: FSMContext):
available_topics = ["Вопрос", "Отзыв или предложение", "Баг / ошибка", "Жалоба", "Нет, хочу отредактировать"]
if message.text not in available_topics:
await message.answer("Пожалуйста, выберите тип обращения, используя клавиатуру ниже.")
return
await state.update_data(message_type=message.text)
await UserSettings.compose_message.set()
await message.answer("Введите ваше сообщение:", reply_markup=types.ReplyKeyboardRemove())
async def confirm_message_to_admin(message: types.Message, state: FSMContext):
await UserSettings.confirm_message.set()
await state.update_data(user_text=message.text)
available_actions = ["Да", "Нет, хочу отредактировать"]
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add(*available_actions)
await state.update_data(user_first_name=message.from_user.first_name)
await state.update_data(user_last_name=message.from_user.last_name)
await state.update_data(user_username=message.from_user.username)
await state.update_data(user_id=message.from_user.id)
user_data = await state.get_data()
await message.answer(f"Я прочитал: \n'{user_data['user_text']}.' \nВсё верно?", reply_markup=keyboard)
async def deliver_message_to_admin(message: types.Message, state: FSMContext):
user_data = await state.get_data()
if user_data['message_type'] == "Вопрос":
await message.bot.send_message(1141585194, f"Пришел вопрос от пользователя {user_data['user_first_name']} "
f"{user_data['user_last_name']}, "
f"@{user_data['user_username']}, "
f"айди {user_data['user_id']}: \n"
f"{user_data['user_text']}")
elif user_data['message_type'] == "Отзыв или предложение":
await message.bot.send_message(1141585194, f"Пришел отзыв или предложение от пользователя "
f"{user_data['user_first_name']} "
f"{user_data['user_last_name']}, "
f"@{user_data['user_username']}, "
f"айди {user_data['user_id']}: \n"
f"{user_data['user_text']}")
elif user_data['message_type'] == "Жалоба":
await message.bot.send_message(1141585194, f"Пришла жалоба от пользователя {user_data['user_first_name']} "
f"{user_data['user_last_name']}, "
f"@{user_data['user_username']}, "
f"айди {user_data['user_id']}: \n"
f"{user_data['user_text']}")
elif user_data['message_type'] == "Баг / ошибка":
await message.bot.send_message(1141585194, f"Пришел багрепорт от пользователя {user_data['user_first_name']} "
f"{user_data['user_last_name']}, "
f"@{user_data['user_username']}, "
f"айди {user_data['user_id']}: \n"
f"{user_data['user_text']}")
await register_report(user_data['user_id'], user_data['message_type'], user_data['user_text'])
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
keyboard.add("Вернуться")
await UserSettings.message_delivered.set()
await message.answer("Успешно!", reply_markup=keyboard)
def register_settings(dp: Dispatcher):
dp.register_message_handler(user_settings, commands="settings")
dp.register_message_handler(user_settings, text="Вернуться", state=UserSettings.switch_popups)
dp.register_message_handler(switch_user_status, text=["Включить уведомления", "Отключить уведомления"],
state=UserSettings.settings)
dp.register_message_handler(quit_settings, text="Выйти из настроек", state=UserSettings.settings)
dp.register_message_handler(pick_type_of_message, text="Написать автору бота", state=UserSettings.settings)
dp.register_message_handler(compose_message_to_admin, state=UserSettings.type_of_message)
dp.register_message_handler(compose_message_to_admin, text="Нет, хочу отредактировать", state=UserSettings.confirm_message)
dp.register_message_handler(confirm_message_to_admin, state=UserSettings.compose_message)
dp.register_message_handler(deliver_message_to_admin, text="Да", state=UserSettings.confirm_message)
dp.register_message_handler(user_settings, text="Вернуться", state=UserSettings.message_delivered)