@Felihita

Почему бот отправляет сообщение мне, а не пользователю?

Бот присылает мне ссылку на канал, но нужно чтобы пользователю она отправилась после одобрения

from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

bot = Bot(token="")
dp = Dispatcher(bot)

# Создаем клавиатуры для удобства пользователя
start_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
start_keyboard.add("Купить подписку")

confirm_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
confirm_keyboard.add("Да", "Нет")

cancel_keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
cancel_keyboard.add("Отмена")


# Создаем хэндлер для команды /start
@dp.message_handler(commands=["start"])
async def start(message: types.Message):
    # Приветствуем пользователя и предлагаем купить подписку
    await message.answer("Привет! Я бот, который предлагает тебе подписку на крутой сервис.\n"
                         "Чтобы купить подписку, нажми на кнопку ниже.", reply_markup=start_keyboard)


# Создаем хэндлер для кнопки "Купить подписку"
@dp.message_handler(lambda message: message.text == "Купить подписку")
async def buy_subscription(message: types.Message):
    # Переводим пользователя в состояние ожидания скриншота оплаты
    # Просим пользователя отправить скриншот оплаты
    await message.answer("Отлично! Чтобы купить подписку, тебе нужно оплатить ее через сервис QIWI.\n"
                         "Стоимость подписки - 100 рублей на месяц.\n"
                         "Номер кошелька - +79991234567.\n"
                         "После оплаты отправь мне скриншот чека.", reply_markup=cancel_keyboard)


@dp.message_handler(content_types=['photo'])
async def handle_screenshot(message: types.Message):
    # Получаем файл фотографии
    photo = await bot.get_file(message.photo[-1].file_id)

    # Загружаем фотографию
    photo_data = await bot.download_file(photo.file_path)

    # Создаем инлайн-клавиатуру с кнопками одобрения и отклонения
    approval_keyboard = InlineKeyboardMarkup(row_width=2)
    approval_keyboard.add(InlineKeyboardButton("Одобрить", callback_data="approve"),
                          InlineKeyboardButton("Отклонить", callback_data="reject"))

    
    owner_chat_id = 
    await bot.send_photo(owner_chat_id, photo_data, reply_markup=approval_keyboard)

    # Отправляем ответ пользователю
    await message.answer("Спасибо, я получил ваш скриншот и отправил его владельцу бота на рассмотрение!")

@dp.callback_query_handler(lambda c: c.data in ["approve", "reject"])
async def process_callback(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    action = callback_query.data
    user_id = callback_query.from_user.id

    if action == "approve":
        # Отправляем ссылку на приватный канал пользователю
        private_channel_link = "https://t.me/your_private_channel"
        await bot.send_message(user_id, f"Ваша подписка одобрена! Вот ссылка на приватный канал: {private_channel_link}")
    else:
        # Отправляем сообщение об отклонении
        await bot.send_message(user_id, "К сожалению, ваша подписка не была одобрена.")



if name == 'main':
    executor.start_polling(dp)
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Потому что вы жмете кнопку в своем чате с ботом, поэтому и отправляете себе.

Можно добавить к callback_data параметром с ID чата.

approval_keyboard.add(InlineKeyboardButton("Одобрить", callback_data=f"approve_message.chat.id"),
                          InlineKeyboardButton("Отклонить", callback_data=f"reject_message.chat.id"))


Переписать хэндлер как

@dp.callback_query_handler(lambda c: c.data.startswith('approve_') or c.data.startswith('reject_') )


Ну и в самой функции через сплит достать ID человека
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы