Почему появляется ошибка если отправлять боту эмодзи?
Написал бота, работает правильно, но при вводе смайлика в консоли появляется вот такая ошибка
> No error handlers are registered, logging exception.
Traceback (most recent call last):
File "C:\Users\os\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\ext\dispatcher.py", line 555, in process_update
handler.handle_update(update, self, check, context)
File "C:\Users\os\AppData\Local\Programs\Python\Python310\lib\site-packages\telegram\ext\handler.py", line 198, in handle_update
return self.callback(update, context)
File "C:\Users\os\tb\bot.py", line 16, in on_message
text2 = text[ :: -1 ]
TypeError: 'NoneType' object is not subscriptable
Ниже программа бота
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
ii = 1
def on_start( update, context ):
global ii
ii = 1
chat = update.effective_chat
context.bot.send_message( chat_id = chat.id, text = \
"Привет, Андрей, как у тебя дела, мой любимый ребёнок ? :)" )
def on_message( update, context ):
global ii
chat = update.effective_chat
text = update.message.text
text2 = text[ :: -1 ]
if ii == 1 :
ii = 2
context.bot.send_message( chat_id=chat.id, text = \
"Ты моя буся сладкая. Поиграем в зеркало, ты мне что-то напиши, а я это переверну" )
else :
context.bot.send_message( chat_id=chat.id, text = text2 )
print( "Бот запущен. Нажмите Ctrl+C для завершения" )
token = ''
updater = Updater( token, use_context = True )
dispatcher = updater.dispatcher
dispatcher.add_handler( CommandHandler( "start", on_start ) )
dispatcher.add_handler( MessageHandler( Filters.all, on_message ) )
updater.start_polling()
updater.idle()
Ответы (1 шт):
Автор решения: alex
→ Ссылка
Я понял в чём была проблема. Проблема в том, что телеграм не всегда возвращает для бота текст. Например, если ввести какой-то анимированный смайлик, которых очень много в телеграмме, то в качесте текста возвращается отсутствие значения или None. Значит просто добавляем проверку на значение None ( или так text == None )
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
ii = 1
def on_start( update, context ):
global ii
ii = 1
chat = update.effective_chat
context.bot.send_message( chat_id = chat.id, text = \
"Привет, Андрей, как у тебя дела, мой любимый ребёнок ? :)" )
def on_message( update, context ):
global ii
chat = update.effective_chat
text = update.message.text
if text == None : # Я сам себе предлагаю вот такое решение
text = ':)' # Проверяем на отсутствие значения
# ( в случае ввода эмодзи или гифки )
text2 = text[ :: -1 ]
if ii == 1 :
ii = 2
context.bot.send_message( chat_id=chat.id, text = \
"Ты моя буся сладкая. Поиграем в зеркало, ты мне что-то напиши, а я это переверну" )
else :
context.bot.send_message( chat_id=chat.id, text = text2 )
print( "Бот запущен. Нажмите Ctrl+C для завершения" )
token = ''
updater = Updater( token, use_context = True )
dispatcher = updater.dispatcher
dispatcher.add_handler( CommandHandler( "start", on_start ) )
dispatcher.add_handler( MessageHandler( Filters.all, on_message ) )
updater.start_polling()
updater.idle()