Как я могу исправить эту ошибку в коде бота на Python?

#python #python-3.x #python-telegram-bot

#python #python-3.x #python-telegram-bot

Вопрос:

У меня такая же ошибка в коде python при запуске кода

Я пытаюсь написать telegram-бота с помощью python-telegram-bot

Это мой код :

 from telegram.ext import Updater , CommandHandler , CallbackContext
from telegram import Update
from telegram.chataction import ChatAction


#bot API
token = "*********:*************" #Im hide API

#bot commands and messages
messages_and_commands = {
    "start" : "Hello {} {} wellcome to my bot !"
}
def start_bot(update : Update , context : CallbackContext):
    chat_id = update.message.chat_id
    first_name = update.message.chat.first_name
    last_name = update.message.chat.last_name
    context.bot.send_chat_action(chat_id=chat_id , action = ChatAction)
    context.bot.send_message(chat_id=chat_id , text=messages_and_commands["start"].format(first_name , last_name))

#bot to can start in the telegram
updater = Updater(token=token , use_context=True)
#set command handler
start_robot = CommandHandler('start' , start_bot)
#add dispatcher
updater.dispatcher.add_handler(start_robot)
#start polling to while start
updater.start_polling()
#when i use ctrl c the bot is finish action in telegram
updater.idle()
 

И это моя ошибка при запуске бота:

     No error handlers are registered, logging exception.                                                                                                                                                              
Traceback (most recent call last):                                                                                                                                                                                
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/ext/dispatcher.py",      `line 432, in process_update`                                                                                             
    handler.handle_update(update, self, check, context)                                                                                                                                                           
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/ext/handler.py", line `156, in handle_update`
    return self.callback(update, context)
  File "telegram_bot.py", line 16, in start_bot
    context.bot.send_chat_action(chat_id=chat_id , action = ChatAction)
  File "<decorator-gen-20>", line 2, in send_chat_action
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/bot.py", line 135, in `decorator`
    result = func(*args, **kwargs)
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/bot.py", line 1880, in `send_chat_action`
    result = self._post('sendChatAction', data, timeout=timeout, api_kwargs=api_kwargs)
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/bot.py", line 245, in `_post`
    return self.request.post(f'{self.base_url}/{endpoint}', data=data, timeout=timeout)
  File "/home/hsahfodsauhfda/env/lib/python3.8/site-packages/telegram/utils/request.py", `line       352, in post`
    body=json.dumps(data).encode('utf-8'),
  File "/usr/lib/python3.8/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python3.8/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.8/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.8/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
  TypeError: Object of type type is not JSON serializable
 

Ответ №1:

Я опробовал код, который вы вставили сюда локально. Действительно, как только я запускаю бота и вызываю обработчик «start», я получаю ту же ошибку.

Если мы внимательнее посмотрим на сообщение об ошибке, мы увидим эту строку из вашего кода:

 context.bot.send_chat_action(chat_id=chat_id , action = ChatAction)
 

Согласно документам, telegram.ChatAction — это «класс, предоставляющий константы для разных действий в чате»., Следовательно, если вы хотите сослаться на ChatAction, вам нужно явно указать его, например ChatAction.TYPING .

Итак, в вашем случае, если вы используете send_chat_action функцию, подобную этой:

 context.bot.send_chat_action(chat_id=chat_id, action=ChatAction.TYPING)
 

Вы не должны получать ошибку.

Дайте мне знать, если это помогло!