Files
Solo_bot/handlers/start.py
T
2024-09-25 02:24:25 +03:00

125 lines
5.4 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 Router, types
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.types import (CallbackQuery, InlineKeyboardButton,
InlineKeyboardMarkup, Message)
from aiogram.types import BufferedInputFile
import os
from bot import bot
from config import ADMIN_ID, CHANNEL_URL
router = Router()
class FeedbackState(StatesGroup):
waiting_for_feedback = State()
async def send_welcome_message(chat_id: int):
# Новый текст приветствия
welcome_text = (
"*SoloNet — ваш провайдер в бесцензурный интернет!*\n\n"
"Получите высокую скорость и самый безопасный протокол VPN, "
"который работает даже в Китае."
)
# Путь к изображению
image_path = os.path.join(os.path.dirname(__file__), 'pic.jpg')
# Проверка существования файла
if not os.path.isfile(image_path):
await bot.send_message(chat_id, "Файл изображения не найден.")
return
# Создаем inline-клавиатуру
inline_keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text='👤 Мой профиль', callback_data='view_profile')],
[InlineKeyboardButton(text='🔒 О VPN', callback_data='about_vpn')],
[InlineKeyboardButton(text='📝 Обратная связь', callback_data='feedback')],
[InlineKeyboardButton(text='📢 Наш канал', url=CHANNEL_URL)]
])
# Отправляем изображение с инлайн-клавиатурой
with open(image_path, 'rb') as image_from_buffer:
await bot.send_photo(
chat_id,
BufferedInputFile(image_from_buffer.read(), filename="solo_pic.png"),
caption=welcome_text,
parse_mode='Markdown',
reply_markup=inline_keyboard # Inline-клавиатура
)
@router.message(Command('start'))
async def start_command(message: Message):
await send_welcome_message(message.chat.id)
@router.callback_query(lambda c: c.data == 'about_vpn')
async def handle_about_vpn(callback_query: CallbackQuery):
# Удаляем сообщение главного меню
await callback_query.message.delete()
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.answer(
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):
# Удаляем текущее сообщение
await callback_query.message.delete()
# Отправляем приветственное сообщение
await send_welcome_message(callback_query.from_user.id)
await callback_query.answer()
@router.callback_query(lambda c: c.data == 'feedback')
async def handle_feedback(callback_query: CallbackQuery, state: FSMContext):
# Удаляем сообщение главного меню
await callback_query.message.delete()
feedback_text = "Напишите нам, если у вас возникли трудности с подключением, есть отзыв или предложение. @pocomacho"
button_back = InlineKeyboardButton(text='⬅️ Назад', callback_data='back_to_menu')
inline_keyboard_back = InlineKeyboardMarkup(inline_keyboard=[[button_back]])
await callback_query.message.answer(
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()