@maksim4ik69

Не работает проверка подписки телеграмбота, как исправить?

Делаю бота для проверки подписки на телеграм каналы, столкнулся с проблемой, не могу нормально реализовать логику проверки подписки на каналы, как не пробовал выдает ошибку, мб кто-то знает как это решить?
вот код:
spoiler
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

API_TOKEN = 'API_TOKEN'

# Ініціалізуємо бота та диспетчера
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

# Налаштування журналування
logging.basicConfig(level=logging.INFO)

# Список каналів, на які треба підписатись
channel_list = [
    'КАНАЛ_ІД_1, КАНАЛ_ІД_2, КАНАЛ_ІД3'
]

# Головне меню з кнопкою для перевірки підписки
async def main_menu(message: types.Message):
    keyboard = types.InlineKeyboardMarkup(row_width=1)
    subscribe_button = types.InlineKeyboardButton("Перевірити підписку", callback_data='check_subscription')
    keyboard.add(subscribe_button)
    await message.answer("Список каналів для підписки:\n" + '\n'.join(channel_list), reply_markup=keyboard)

# Перевірка підписки користувача
async def check_subscription(callback_query: types.CallbackQuery):
    subscribed_channels = []
    for channel_name in channel_list:
        channel_info = await bot.get_chat_member(callback_query.message.from_user.id, channel_name)
        subscribed_channels.append(channel_info)
    subscribed_channels = [channel.channel.username for channel in subscribed_channels]
    if set(channel_list).issubset(subscribed_channels):
        await callback_query.answer('Ви підписані на всі канали!')
        await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
        await bot.send_message(callback_query.message.chat.id, "Введіть код фільму:")
        # Переходимо до наступної функції для пошуку фільмів
        await search_movies(callback_query.message)
    else:
        await callback_query.answer('Ви не підписані на всі канали!')
        await bot.delete_message(callback_query.message.chat.id, callback_query.message.message_id)
        await main_menu(callback_query.message)  # Повторно виводимо головне меню зі списком каналів


# Обробник натискання кнопки
@dp.callback_query_handler(text='check_subscription')
async def process_callback_button(callback_query: types.CallbackQuery):
    await check_subscription(callback_query)

# Функція пошуку фільмів
async def search_movies(message: types.Message):
    # логіка пошуку фільмів
    pass

# Обробник повідомлення для команди /start
@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    await main_menu(message)

# Запуск бота
if __name__ == '__main__':
    from aiogram import executor
    executor.start_polling(dp, skip_updates=True)


А вот ошибка которую выводит бот:
spoiler
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-14' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=BadRequest('Invalid user_id specified')>
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 283, in process_update
    return await self.callback_query_handlers.notify(update.callback_query)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "F:\python\botrkeb\bottgperehodnic.py", line 49, in process_callback_button
    await check_subscription(callback_query)
  File "F:\python\botrkeb\bottgperehodnic.py", line 31, in check_subscription
    channel_info = await bot.get_chat_member(callback_query.message.from_user.id, channel_name)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\bot\bot.py", line 2464, in get_chat_member
    result = await self.request(api.Methods.GET_CHAT_MEMBER, payload)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\bot\base.py", line 236, in request
    return await api.make_request(await self.get_session(), self.server, self.__token, method, data, files,
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\bot\api.py", line 140, in make_request
    return check_result(method, response.content_type, response.status, await response.text())
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\bot\api.py", line 115, in check_result
    exceptions.BadRequest.detect(description)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\aiogram\utils\exceptions.py", line 141, in detect
    raise cls(description)
aiogram.utils.exceptions.BadRequest: Invalid user_id specified
INFO:aiogram.dispatcher.dispatcher:Stop polling...
WARNING:aiogram:Goodbye!
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы