Files
Solo_bot/handlers/start.py
T
2024-09-20 03:48:41 +03:00

158 lines
7.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from aiogram import Bot, Dispatcher, Router, types
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery, Message, ReplyKeyboardMarkup, KeyboardButton
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from config import API_TOKEN, ADMIN_ID, CHANNEL_URL
from bot import dp, bot # Убедитесь, что bot и dp импортируются из правильного места
router = Router()
class FeedbackState(StatesGroup):
waiting_for_feedback = State()
async def start_command(message: types.Message):
welcome_text = (
"*Добро пожаловать в наш сервис!*\n\n"
"Вы можете воспользоваться следующими функциями:\n\n"
"🔑 *Создать ключ для подключения VPN* - Получите уникальный ключ для доступа к VPN.\n"
"📅 *Узнать дату окончания ключа* - Проверьте, когда истекает срок действия вашего ключа.\n"
"👤 *Просмотреть ваш профиль* - Получите информацию о вашем аккаунте и балансе.\n\n"
"Нажмите на соответствующую кнопку ниже, чтобы начать!"
)
button_view_profile = InlineKeyboardButton(text='👤 Мой профиль', callback_data='view_profile')
button_about_vpn = InlineKeyboardButton(text='🔒 О VPN', callback_data='about_vpn')
button_feedback = InlineKeyboardButton(text='📝 Обратная связь', callback_data='feedback')
button_channel = InlineKeyboardButton(text='📢 Наш канал', url=CHANNEL_URL)
inline_keyboard = InlineKeyboardMarkup(inline_keyboard=[
[button_view_profile],
[button_about_vpn],
[button_feedback],
[button_channel]
])
reply_keyboard = ReplyKeyboardMarkup(
keyboard=[
[KeyboardButton(text="Меню")],
# [KeyboardButton(text="Мой профиль")]
],
resize_keyboard=True
)
await message.bot.send_message(
chat_id=message.chat.id,
text=welcome_text,
parse_mode='Markdown',
reply_markup=inline_keyboard
)
await message.bot.send_message(
chat_id=message.chat.id,
text="Выберите действие:",
reply_markup=reply_keyboard
)
@router.callback_query(lambda c: c.data == 'about_vpn')
async def handle_about_vpn(callback_query: CallbackQuery):
info_message = (
"*О VPN*\n\n"
"Мы используем VLESS для обеспечения безопасного и надежного подключения к интернету. "
"Каждому пользователю предоставляется индивидуальный ключ для подключения. "
"Этот ключ необходим для использования нашего VPN-сервиса."
)
# Кнопка "Назад"
button_back = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_menu')
# Обновлённая клавиатура с кнопкой "Назад"
inline_keyboard_back = InlineKeyboardMarkup(inline_keyboard=[
[button_back]
])
await callback_query.message.edit_text(
info_message,
parse_mode='Markdown',
reply_markup=inline_keyboard_back # Добавление клавиатуры с кнопкой "Назад"
)
await callback_query.answer()
@router.callback_query(lambda c: c.data == 'back_to_menu')
async def handle_back_to_menu(callback_query: CallbackQuery):
welcome_text = (
"*Добро пожаловать в наш сервис!*\n\n"
"Вы можете воспользоваться следующими функциями:\n\n"
"🔑 *Создать ключ для подключения VPN* - Получите уникальный ключ для доступа к VPN.\n"
"📅 *Узнать дату окончания ключа* - Проверьте, когда истекает срок действия вашего ключа.\n"
"👤 *Просмотреть ваш профиль* - Получите информацию о вашем аккаунте и балансе.\n\n"
"Нажмите на соответствующую кнопку ниже, чтобы начать!"
)
button_view_profile = InlineKeyboardButton(text='👤 Мой профиль', callback_data='view_profile')
button_about_vpn = InlineKeyboardButton(text='🔒 О VPN', callback_data='about_vpn')
button_feedback = InlineKeyboardButton(text='📝 Обратная связь', callback_data='feedback')
button_channel = InlineKeyboardButton(text='📢 Наш канал', url=CHANNEL_URL)
inline_keyboard = InlineKeyboardMarkup(inline_keyboard=[
[button_view_profile],
[button_about_vpn],
[button_feedback],
[button_channel]
])
# Редактирование сообщения на главное меню
await callback_query.message.edit_text(
welcome_text,
parse_mode='Markdown',
reply_markup=inline_keyboard
)
await callback_query.answer()
@router.callback_query(lambda c: c.data == 'feedback')
async def handle_feedback(callback_query: CallbackQuery, state: FSMContext):
feedback_text = "Напишите нам, если у вас возникли трудности с подключением, есть отзыв или предложение. @pocomacho"
# Кнопка "Назад"
button_back = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_menu')
# Обновлённая клавиатура с кнопкой "Назад"
inline_keyboard_back = InlineKeyboardMarkup(inline_keyboard=[
[button_back]
])
# Редактирование сообщения с кнопкой "Назад"
await callback_query.message.edit_text(
feedback_text,
parse_mode='Markdown',
reply_markup=inline_keyboard_back # Клавиатура с кнопкой "Назад"
)
await state.set_state(FeedbackState.waiting_for_feedback)
await state.update_data(user_id=callback_query.from_user.id)
await callback_query.answer()
@router.message(FeedbackState.waiting_for_feedback)
async def receive_feedback(message: types.Message, state: FSMContext):
user_data = await state.get_data()
user_id = user_data.get('user_id')
feedback_message = (
f"Обратная связь от пользователя {user_id}:\n\n"
f"{message.text}"
)
try:
await bot.send_message(ADMIN_ID, feedback_message)
await message.answer("Спасибо за ваше сообщение! Мы свяжемся с вами, если это будет необходимо.")
except Exception as e:
await message.answer("Произошла ошибка при отправке вашего сообщения.")
print(f"Ошибка при отправке обратной связи: {e}") # Логирование ошибок
await state.clear()
# Пример обработки команды старт
@router.message(Command('start'))
async def cmd_start(message: Message):
await start_command(message)