Message handler telegram bot error

Вот такая ошибка: Traceback (most recent call last): File "C:/Users/User/PycharmProjects/trial3bot/tg.py", line 4, in @bot.message_handler(content_types=['text']) AttributeError: ...

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

pypybeg opened this issue

Jan 12, 2018

· 25 comments

Comments

@pypybeg

Вот такая ошибка:
Traceback (most recent call last):
File «C:/Users/User/PycharmProjects/trial3bot/tg.py», line 4, in
@bot.message_handler(content_types=[‘text’])
AttributeError: ‘TeleBot’ object has no attribute ‘message_handler’

Удалил библиотеку telebot и обновил pytelegrambotapi

Буду рад вашей помощи,пользуюсь питоном третий день.

@MasterGroosha
MasterGroosha

changed the title
‘TeleBot’ object has no attribute ‘message_handler’ (Python) Самый новичок из новичков

‘TeleBot’ object has no attribute ‘message_handler’

Jan 12, 2018

@MasterGroosha

  1. Убедитесь, что все последующие действия совершаются именно для той версии Python, которой запускается бот.
  2. Если Python 3-й версии, то выполните pip3 uninstall telebot, затем pip3 install pytelegrambotapi --upgrade.
  3. Желательно перелогиниться или перезагрузиться.
atom1kk, IhorKosovych, aorgou, logvinenkas, pigel, nikolya98, Blucknote, VitalyGladyshev, Slezhuk, sshu-ya, and 16 more reacted with thumbs up emoji

@pypybeg

default
сделал как вы сказали,в первом случае ничего не удалило,так как ничего не обнаружило,а то еще раз обновилось.
но все равно та же ошибка :(

@MasterGroosha

File -> Settings -> Project Interpreter

У pyTelegramBotAPI какая версия указана в среднем столбце?

@pypybeg

@MasterGroosha

@pypybeg

@MasterGroosha

@pypybeg

default

@MasterGroosha

@pypybeg

@MasterGroosha

В таком случае, я уже не знаю, чем Вам помочь.
Судя по этому комментарию, telebot Вы не сразу удалили (хотя в первом сообщении писали обратное). Видимо, и здесь тоже что-то не то.
Если и после перезагрузки останутся хвосты telebot, попробуйте удалить дополнительно pyTelegramBotAPI и сразу же установить заново (всё там же в PyCharm).
Если и это не поможет — Вам на StackOverflow.

@pypybeg

@pypybeg

Ураа!))
Получилось,спасибо вам большое!)

@MasterGroosha

@blendedw

@evgeniygazetdinov

вот поэтому не нужно пользоваться pycharm.vim + терминал

@atom1kk

  1. Убедитесь, что все последующие действия совершаются именно для той версии Python, которой запускается бот.
  2. Если Python 3-й версии, то выполните pip3 uninstall telebot, затем pip3 install pytelegrambotapi --upgrade.
  3. Желательно перелогиниться или перезагрузиться.

Спасибо, помогло)

@jenjajenjaBot

Безымянный
что делать, помогите плз(

@MasterGroosha

mouse1500, Burdeinick, and-semakin, Slezhuk, sukhrobbek, Gr1z-zly, JaneKhus, YaWasabi, CookieMonster79, and velencie reacted with thumbs up emoji
Wedyarit, meth1337, and h2sm reacted with laugh emoji

@jenjajenjaBot

@jenjajenjaBot попробуйте вместо массажа использовать сообщение

в смысле?
вместо сообщения использывать сообщение?

@MasterGroosha

kali-ui, lzrdblzzrd, basilik52, hntirgeam, fullshow1337, CyberEssence, Armaniooo, kuksag, Burdeinick, l1naqou, and 15 more reacted with laugh emoji

@ibro187

@MasterGroosha

@ibro187

2. pip3 uninstall telebot

я застрял на телеграмм боте ошибка пуля в пулю как у человека который создал эту тему
а еще я использую мак

@MasterGroosha

Repository owner

locked as off-topic and limited conversation to collaborators

Nov 28, 2021

Реализация собственного обработчика ошибок для Telegram бота.

Внимание! Пакеты python-telegram-bot версии 13.x будут придерживаться многопоточной парадигмы программирования (на данный момент актуальна версия 13.14). Пакеты версий 20.x и новее будут полностью асинхронными и на октябрь 2022 года, первый из них находится в предрелизе. Дополнительно смотрите основные изменения в пакете python-telegram-bot версии 20.x.

В python-telegram-bot все ошибки, связанные с Telegram, инкапсулируются в класс исключения TelegramError и его подклассы, расположенные в модуле telegram.error.

Любая ошибка, включая TelegramError, которая возникает в одном из обработчиков сообщений или при вызове Updater.get_updates(), перенаправляется всем зарегистрированным обработчикам ошибок, чтобы можно было на них отреагировать.

Что бы зарегистрировать обработчик ошибок, необходимо вызвать Dispatcher.add_error_handler(callback), где обратный вызов callback — это функция, которая принимает обновление update и контекст context. Объект update будет обновлением, вызвавшим ошибку (или None, если ошибка не была вызвана update, например, для Jobs), а context.error — возникшей ошибкой.

Пример

: пытаемся отправить сообщение, но пользователь заблокировал бота. Будет вызвано исключение Unauthorized, подкласса TelegramError, которое будет доставлено обработчику ошибок. В обработчике ошибок можно удалить этот контакт из списка контактов бота.

Примечание

. Можно обрабатывать исключения по мере их возникновения. Обработчику ошибок python-telegram-bot перенаправляются только неперехваченные исключения.

Пример собственного обработчика ошибок.

Очень простой пример того, как можно реализовать собственный обработчик ошибок.

import html
import json
import logging
import traceback

from telegram import Update, ParseMode
from telegram.ext import Updater, CommandHandler

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO
)

logger = logging.getLogger(__name__)

# Токен, который получен от @botfather при создании бота
BOT_TOKEN = "TOKEN"

# Это может быть ваш собственный идентификатор 
# или идентификатор группы/канала.
# Можно использовать команду `/start` этого бота, 
# чтобы увидеть свой идентификатор чата.
CHAT_ID = 123456789

# Функция-обработчик ошибок
def error_handler(update, context):
    """
        Регистрирует ошибку и уведомляет   
        разработчика сообщением telegram.
    """
    # Пишем ошибку, прежде чем что-то делать. Вдруг что-то сломается.
    logger.error(msg="Исключение при обработке сообщения:", exc_info=context.error)

    # `traceback.format_exception` возвращает обычное сообщение python 
    # об исключении в виде списка строк, поэтому объединяем их вместе.
    tb_list = traceback.format_exception(None, context.error, context.error.__traceback__)
    tb_string = ''.join(tb_list)

    # Создаем сообщение с некоторой разметкой и дополнительной 
    # информацией о том, что произошло. Возможно, придется добавить некоторую 
    # логику для работы с сообщениями длиной более 4096 символов.
    update_str = update.to_dict() if isinstance(update, Update) else str(update)
    message = (
        f'Возникло исключение при обработке сообщения.n'
        f'<pre>update = {html.escape(json.dumps(update_str, indent=2, ensure_ascii=False))}'
        '</pre>nn'
        f'<pre>context.chat_data = {html.escape(str(context.chat_data))}</pre>nn'
        f'<pre>context.user_data = {html.escape(str(context.user_data))}</pre>nn'
        f'<pre>{html.escape(tb_string)}</pre>'
    )

    # Отправляем сообщение разработчику
    context.bot.send_message(chat_id=CHAT_ID, text=message, parse_mode=ParseMode.HTML)

# объект `update` в функции не используется, заменяем его на `_`
def bad_command(_, context):
    """Вызывает ошибку, чтобы вызвать обработчик ошибок."""
    context.bot.wrong_method_name()

# объект `context` в функции не используется, заменяем его на `_`
def start(update, _):
    update.effective_message.reply_html(
        'Принудительный вызов ошибки `/bad_command`n'
        f'Ваш идентификатор чата <code>{update.effective_chat.id}</code>.'
    )


if __name__ == '__main__':

    updater = Updater(BOT_TOKEN)
    dispatcher = updater.dispatcher

    # Зарегистрируем команды...
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('bad_command', bad_command))

    # ...и обработчик ошибок
    dispatcher.add_error_handler(error_handler)

    # Запускаем бота
    updater.start_polling()
    updater.idle()

Хороший обработчик ошибок.

Следующий фрагмент кода уведомляет пользователя, когда происходит ошибка, и уведомляет разработчиков об ошибке, включая трассировку и место ее возникновения. Комментарии в коде объясняют, что именно происходит, когда и почему, поэтому редактировать его в соответствии с особыми потребностями должно быть проще простого.

from telegram import ParseMode
from telegram.utils.helpers import mention_html
import sys
import traceback

# это общая функция обработчика ошибок. 
# Если нужна дополнительная информация о конкретном типе сообщения, 
# добавьте ее в полезную нагрузку в соответствующем предложении `if ...`
def error(update, context):
    # добавьте все идентификаторы разработчиков в этот список. 
    # Можно добавить идентификаторы каналов или групп.
    devs = [208589966]
   # Уведомление пользователя об этой проблеме. 
   # Уведомления будут работать, только если сообщение НЕ является 
   # обратным вызовом, встроенным запросом или обновлением опроса. 
   # В случае, если это необходимо, то имейте в виду, что отправка 
   # сообщения может потерпеть неудачу
    if update.effective_message:
        text = "К сожалению произошла ошибка в момент обработки сообщения. " 
               "Мы уже работаем над этой проблемой."
        update.effective_message.reply_text(text)
    # Трассировка создается из `sys.exc_info`, которая возвращается в  
    # как третье значение возвращаемого кортежа. Затем используется  
    # `traceback.format_tb`, для получения `traceback` в виде строки.
    trace = "".join(traceback.format_tb(sys.exc_info()[2]))
    # попробуем получить как можно больше информации из обновления telegram
    payload = []
    # обычно всегда есть пользователь. Если нет, то это 
    # либо канал, либо обновление опроса.
    if update.effective_user:
        bad_user = mention_html(update.effective_user.id, update.effective_user.first_name)
        payload.append(f' с пользователем {bad_user}')
    # есть ситуаций, когда что то с чатом
    if update.effective_chat:
        payload.append(f' внутри чата <i>{update.effective_chat.title}</i>')
        if update.effective_chat.username:
            payload.append(f' (@{update.effective_chat.username})')
    # полезная нагрузка - опрос
    if update.poll:
        payload.append(f' с id опроса {update.poll.id}.')
    # Поместим это в 'хорошо' отформатированный текст
    text = f"Ошибка <code>{context.error}</code> случилась{''.join(payload)}. " 
           f"Полная трассировка:nn<code>{trace}</code>"
    # и отправляем все разработчикам
    for dev_id in devs:
        context.bot.send_message(dev_id, text, parse_mode=ParseMode.HTML)
    # Необходимо снова вызывать ошибку, для того, чтобы модуль `logger` ее записал.
    # Если вы не используете этот модуль, то самое время задуматься.
    raise
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import telebot
from telebot import types
 
 
token = ''
bot = telebot.TeleBot(token)
 
 
@bot.message_handler(commands=['vaif'])
def welcome(message):
 
    markup_reply = types.ReplyKeyboardMarkup()
    item_hi = types.KeyboardButton('Привет')
    item_bye = types.KeyboardButton('Пока')
 
    markup_reply.add(item_hi, item_bye)
    bot.send_message(message.chat.id,  "Добро пожаловать, {0.first_name}!nЯ - <b>{1.first_name}</b>, создан служить господину.".format(message.from_user, bot.get_me()), parse_mode = 'html', reply_markup = markup_reply)
 
 
@bot.message_handler(content_types=['text'])
def answer(message):
    if message.text == 'Привет':
        markup_reply = types.InlineKeyboardMarkup(row_width=2)
        item_pic = types.InlineKeyboardButton(text = 'картинка', callback_data = 'pic')
        item_audio = types.InlineKeyboardButton(text = 'песенка', callback_data = 'aud')
 
        markup_reply.add(item_pic,  item_audio)
        bot.send_message(message.chat.id, 'Могу я для вас что-то сделать господин?', reply_markup=markup_reply)
    elif message.text == 'Пока':
        bot.send_message(message.chat.id, 'Хорошо господин')
 
@bot.callback_query_handler(func=lambda call: True)
def answer1(call):
    if call.data == 'pic':
        markup_reply = types.ReplyKeyboardMarkup(resize_keyboard=True)
        pic1 = types.KeyboardButton('Топ Вайфу')
        pic2 = types.KeyboardButton('Даня')
        pic3 = types.KeyboardButton('Люблю тебя')
 
        markup_reply.add(pic1, pic2, pic3)
        bot.send_message(call.message.chat.id, 'Выбирайте из этого господин:3', reply_markup=markup_reply)
    elif call.data == 'aud':
        markup_reply = types.ReplyKeyboardMarkup(resize_keyboard=True)
        mus1 = types.KeyboardButton('Для гулей')
        mus2 = types.KeyboardButton('Тёма лув')
        mus3 = types.KeyboardButton('Топ чартов')
 
        markup_reply.add(mus1, mus2, mus3)
        bot.send_message(call.message.chat.id, 'Выбирай из этого:3', reply_markup=markup_reply)
 
 
@bot.message_handler(content_types=['text'])
def get_text_messages1(message):
    if message.text == 'Для гулей':
        bot.send_message(message.from_user.id, 'https://open.spotify.com/track/1ghdJUMhmLEpUitNwyNMWH?si=675eb5a3e48a4bf9')
    elif message.text == 'Тёма лув':
        bot.send_message(message.from_user.id, 'https://open.spotify.com/track/6H167kbd8gY2Eewzf14YjD?si=91eeba1c6cb84fab')
    elif message.text == 'Топ Чартов':
        bot.send_message(message.from_user.id, 'https://open.spotify.com/track/6t1ODAVbCVRQas6OyaGXQP?si=310d99fcbba14620')
    elif message.text == 'Топ Вайфу':
        bot.send_message(message.from_user.id, 'http://pm1.narvii.com/6869/e39b5e83a446fea0446a062013de105540e07259r1-1152-650v2_uhq.jpg')
    elif message.text == 'Даня':
        bot.send_message(message.from_user.id, 'https://sun9-3.userapi.com/impg/zeZga0qpRDMkepm-GpdOJMc2rV0EtgRObACuww/s99uG5QfDM4.jpg?size=949x945&quality=96&sign=49fc693c5cfacadb6ed3a4ad5000e44c&type=album')
    elif message.text == 'Люблю тебя':
        bot.send_message(message.from_user.id, 'https://sun9-49.userapi.com/impg/oFPZAbfD2cde7LK0iSMpD1-ckCC7W-tzCqrQwg/0O4DSdMBwpc.jpg?size=1200x1600&quality=96&sign=a9c7b4dfb057f20bcda450f7037d63c7&type=album')
    else:
        bot.send_message(message.from_user.id, 'похоже вы нажали куда-то не туда :3')
 
 
bot.polling(none_stop=True, interval=0)

Back to top

Edit this page

Toggle table of contents sidebar

class telegram.ext.MessageHandler(filters, callback, block=True)[source]

Bases: telegram.ext.BaseHandler

BaseHandler class to handle Telegram messages. They might contain text, media or status
updates.

Parameters:
  • filters (telegram.ext.filters.BaseFilter) –

    A filter inheriting from
    telegram.ext.filters.BaseFilter. Standard filters can be found in
    telegram.ext.filters. Filters can be combined using bitwise
    operators (& for and, | for or, ~ for not). Passing None is a shortcut
    to passing telegram.ext.filters.ALL.

  • callback (coroutine function) –

    The callback function for this handler. Will be
    called when check_update() has determined that an update should be processed by
    this handler. Callback signature:

    async def callback(update: Update, context: CallbackContext)
    

    The return value of the callback is usually ignored except for the special case of
    telegram.ext.ConversationHandler.

  • block (bool, optional) –

    Determines whether the return value of the callback should
    be awaited before processing the next handler in
    telegram.ext.Application.process_update(). Defaults to True.

filters[source]

Only allow updates with these Filters.
See telegram.ext.filters for a full list of all available filters.

Type:

telegram.ext.filters.BaseFilter

callback[source]

The callback function for this handler.

Type:

coroutine function

block[source]

Determines whether the return value of the callback should be
awaited before processing the next handler in
telegram.ext.Application.process_update().

Type:

bool

check_update(update)[source]

Determines whether an update should be passed to this handler’s callback.

Parameters:

update (telegram.Update | object) – Incoming update.

Returns:

bool

collect_additional_context(context, update, application, check_result)[source]

Adds possible output of data filters to the CallbackContext.

Понравилась статья? Поделить с друзьями:
  • Message fatal system error
  • Message fatal error cannot set display mode
  • Message error syntax error at or near
  • Message error ebay
  • Message direct3d reset device error