Загрузка данных


import telebot
from telebot import types
import logging

# Настройка логгирования
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# Токен бота (замени на свой)
TOKEN = 'ТВОЙ_ТОКЕН'
# ID закрытого канала (можно получить через @getidsbot)
CHANNEL_ID = -1001234567890
# Цена в рублях
PRICE = 500

bot = telebot.TeleBot(TOKEN)

# Команда /start
@bot.message_handler(commands=['start'])
def start(message):
    markup = types.InlineKeyboardMarkup()
    btn_buy = types.InlineKeyboardButton("Купить доступ", callback_data='buy_access')
    btn_info = types.InlineKeyboardButton("Подробнее", callback_data='info')
    markup.add(btn_buy)
    markup.add(btn_info)
    
    bot.send_message(message.chat.id, 
                     f"Продажа доступа в закрытый канал.\n\n"
                     f"Цена: {PRICE} руб.\n"
                     f"После оплаты доступ навсегда.\n\n"
                     f"Выбери действие:", 
                     reply_markup=markup)

# Обработка инлайн кнопок
@bot.callback_query_handler(func=lambda call: True)
def callback_handler(call):
    if call.data == 'buy_access':
        # Создание ссылки на оплату (замени на свою платёжную систему)
        markup = types.InlineKeyboardMarkup()
        btn_pay = types.InlineKeyboardButton("Оплатить", url='https://yoomoney.ru/...')  # Замени на свою ссылку оплаты
        btn_check = types.InlineKeyboardButton("Я оплатил", callback_data='check_payment')
        markup.add(btn_pay)
        markup.add(btn_check)
        
        bot.edit_message_text(chat_id=call.message.chat.id,
                              message_id=call.message.message_id,
                              text=f"Для получения доступа:\n"
                                   f"1. Оплати {PRICE} руб.\n"
                                   f"2. Нажми 'Я оплатил'\n"
                                   f"3. Ожидай подтверждения\n\n"
                                   f"После проверки придёт ссылка-приглашение.",
                              reply_markup=markup)
    
    elif call.data == 'info':
        bot.answer_callback_query(call.id, 
                                  "Закрытый канал с эксклюзивным контентом. "
                                  "Доступ навсегда после однократной оплаты.",
                                  show_alert=True)
    
    elif call.data == 'check_payment':
        # Здесь должна быть проверка оплаты через API платёжной системы
        # Для примера - сразу выдаём ссылку (в реальности нужна проверка)
        try:
            invite_link = bot.create_chat_invite_link(CHANNEL_ID, member_limit=1)
            markup = types.InlineKeyboardMarkup()
            btn_join = types.InlineKeyboardButton("Войти в канал", url=invite_link.invite_link)
            markup.add(btn_join)
            
            bot.edit_message_text(chat_id=call.message.chat.id,
                                  message_id=call.message.message_id,
                                  text=f"Оплата подтверждена!\n"
                                       f"Твоя персональная ссылка (одноразовая):\n\n"
                                       f"{invite_link.invite_link}\n\n"
                                       f"Нажми кнопку ниже для входа.",
                                  reply_markup=markup)
            
            # Уведомление админу
            bot.send_message(ADMIN_ID, 
                            f"Новый покупатель!\n"
                            f"User ID: {call.from_user.id}\n"
                            f"Username: @{call.from_user.username}\n"
                            f"Имя: {call.from_user.first_name}")
            
        except Exception as e:
            logger.error(f"Ошибка создания ссылки: {e}")
            bot.send_message(call.message.chat.id, "Ошибка. Свяжись с админом.")
    
    elif call.data == 'admin_approve':
        # Обработка подтверждения оплаты админом вручную
        pass

# Команда для админа - проверка ручных платежей
@bot.message_handler(commands=['approve'])
def approve_payment(message):
    if message.from_user.id != ADMIN_ID:
        return
    
    try:
        parts = message.text.split()
        user_id = int(parts[1])
        
        invite_link = bot.create_chat_invite_link(CHANNEL_ID, member_limit=1)
        bot.send_message(user_id,
                        f"Твой платёж подтверждён админом!\n"
                        f"Ссылка для входа:\n"
                        f"{invite_link.invite_link}")
        
        bot.send_message(ADMIN_ID, f"Ссылка отправлена пользователю {user_id}")
        
    except Exception as e:
        logger.error(f"Ошибка: {e}")

# Запуск бота
if __name__ == '__main__':
    logger.info("Бот запущен")
    bot.polling(none_stop=True)