Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 10.01.2017
Сообщений: 16
1

Бот для telegram (pyTelegramBotAPI) Метод не возвращает статус подписки

17.03.2020, 19:26. Просмотров 1494. Ответов 1

Добрый день товарищи программисты. Первый раз работаю с api Telegram. Суть работы бота в том, что нужно пользователю подписаться на канал, и бот продолжает работу после того как проверит что он является подписчиком на канале.
На просторах интернета нашёл только один способ. Это использование метода getChatMember для получения статуса пользователя. Проблема в том что при запросе Telegram отвечает на него ошибкой. Проблема точно не в библиотеке telebot, так как при обычном get запросе через браузер, ошибка та же. Видимо какая-то особенность api Telegram, которую я никак не могу понять.
В общем вот код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import telebot
import config
 
from telebot import types
 
bot = telebot.TeleBot(config.TOKEN)
 
 
@bot.message_handler(commands=['start'])
def welcome(message):
 
    # Keyboard
    button_hi = types.KeyboardButton("СТАРТ")
    start_kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
    start_kb.add(button_hi)
 
    bot.send_message(message.chat.id, "Описание работы бота\nИтак нажмите кнопку <b>«СТАРТ»</b> и следуйте инструкциям!".format(message.from_user, bot.get_me()), parse_mode='html', reply_markup=start_kb)
 
 
@bot.message_handler(content_types=['text'])
def lalala(message):
    button_next = types.KeyboardButton("ПРОДОЛЖИТЬ")
    next_kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
    next_kb.add(button_next)
    if message.chat.type == 'private':
        if message.text == "СТАРТ":
            bot.send_message(message.chat.id, "✉️ Подпишитесь на 1-ый из 5-ти каналов - @idmanik", reply_markup=next_kb)
        elif message.text == 'ПРОДОЛЖИТЬ':
            button_next2 = types.KeyboardButton("К 2-МУ КАНАЛУ")
            next_kb2 = types.ReplyKeyboardMarkup(resize_keyboard=True)
            next_kb2.add(button_next2)
            status = ['creator', 'administrator', 'member']
            for chri in status:
                if chri == bot.get_chat_member(chat_id="@idmanik", user_id=message.from_user.id).status:
                    bot.send_message(message.chat.id, "Подписка подтверждена!")
                    break
            else:
                    bot.send_message(message.chat.id, "Кажется вы не подписались!")
        else:
            bot.send_message(message.chat.id, "Я не знаю что ответить")
 
 
# RUN
bot.polling(none_stop=True)
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Running] python -u "c:\Users\tumen\OneDriveокументы\GitHub\TelegramBOT\bot_to_sem.py"
2020-03-17 21:23:13,043 (util.py:66 WorkerThread2) ERROR - TeleBot: "ApiException occurred, args=('A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:\n[b\'{"ok":false,"error_code":400,"description":"Bad Request: user not found"}\']',)
Traceback (most recent call last):
  File "C:\Users\tumen\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telebot\util.py", line 60, in run
    task(*args, **kwargs)
  File "c:\Users\tumen\OneDrive\Документы\GitHub\TelegramBOT\bot_to_sem.py", line 35, in lalala
    if chri == bot.get_chat_member(chat_id="@idmanik", user_id=message.from_user.id).status:
  File "C:\Users\tumen\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telebot\__init__.py", line 579, in get_chat_member
    result = apihelper.get_chat_member(self.token, chat_id, user_id)
  File "C:\Users\tumen\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telebot\apihelper.py", line 246, in get_chat_member
    return _make_request(token, method_url, params=payload)
  File "C:\Users\tumen\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telebot\apihelper.py", line 60, in _make_request
    return _check_result(method_name, result)['result']
  File "C:\Users\tumen\AppData\Local\Programs\Python\Python38-32\lib\site-packages\telebot\apihelper.py", line 79, in _check_result
    raise ApiException(msg, method_name, result)
telebot.apihelper.ApiException: A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{"ok":false,"error_code":400,"description":"Bad Request: user not found"}']
"
2020-03-17 21:23:13,043 (__init__.py:420 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. The server returned HTTP 400 Bad Request. Response body:
[b'{"ok":false,"error_code":400,"description":"Bad Request: user not found"}']"
В случае работы через браузер с помощью прямого запроса ответ тот же. Видимо это особенность апи. Но какая?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2020, 19:26
Ответы с готовыми решениями:

Проблема с Telegram ботом библиотека pyTelegramBotAPI
Не работет код, проверял множество раз правильность установленной библиотеки Ошибка: 2020-02-05...

Бот telegram не может подключиться к https://api.telegram.org:443: (Java)
Здравствуйте! Возникла такая проблема при запуске бота в intelij idea ultimate программа выдает...

Бот для Telegram
Как написать бота, который при отправлении команд в телеграмм выполнял заданные команды на...

Бот для telegram на Питоне
Очень хотел написать бота для telegram, долго изучал эту тему и наконец написал программу. Писал...

1
0 / 0 / 0
Регистрация: 10.01.2017
Сообщений: 16
18.03.2020, 14:07  [ТС] 2
Проблему решил обратившись к первоисточнику. Где то на форуме вычитал что в документации telegram указано что для проверки ботом подписчиков канала, он должен быть его администратором и иметь соответствующие права.
Добавил бота в администраторы, как это сделать инфы полно в гугле. Программа заработала.

P/S: Если кто принимал участие и пробовал поломать голову, благодарю
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2020, 14:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Чат бот Telegram для сбора данных от пользователя
В общем решил разбираться с созданием Telegram ботов, хочу попробовать научить его собирать данные...

Telegram бот
Всем привет. Кто-нибудь создавал Telegram бота в Питоне? Почему в консоле такое вылазит? Смотрел...

Telegram - бот
В обще всем доброго времени суток, господа! Сам я не программист, но написал скрипт, который криво...

Telegram-бот
Здравствуйте! Разбираю пример телеграм-бота, написанного с помощью модуля node-telegram-bot-api.Бот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.