@aske280
Тот еще новичок по python

В чате ничего не выводится, а в консоли (снизу) как исправить?

from covid import Covid
import telebot
import config


bot = telebot.TeleBot(config.TOKEN)
covid = Covid()


@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
	bot.reply_to(message, "Начнем")


@bot.message_handler(content_types=['text'])
def start(message):
	final_message = ""
	get_message_bot = message.text.strip().lower()
	if get_message_bot == "США":
		location = covid.get_status_by_country_name("us")
	elif get_message_bot == "Украина":
		location = covid.get_status_by_country_name("Ukraine")
	elif get_message_bot == "Россия":
		location = covid.get_status_by_country_name("russia")
	elif get_message_bot == "Беларусь":
		location = covid.get_status_by_country_name("Belarus")
	elif get_message_bot == "Казахстан":
		location = covid.get_status_by_country_name("Kazakhstan")
	elif get_message_bot == "Италия":
		location = covid.get_status_by_country_name("italy")
	elif get_message_bot == "Франция":
		location = covid.get_status_by_country_name("france")
	elif get_message_bot == "Германия":
		location = covid.get_status_by_country_name("Germany")
	elif get_message_bot == "Япония":
		location = covid.get_status_by_country_name("Japan")
		final_message = f"<u>Данные по стране:</u>\n<b>Заболевших: </b>{location['confirmed']:,}\n<b>Умерших: </b>{location['deaths']:,}\n<b>Выздоровевших: </b>{location['recovered']:,}\n<b>Болеющих: </b>{location['active']:,}"
    
	else:
        
		location = covid.get_status_by_country_name("russia")
    
	bot.send_message(message.chat.id, final_message, parse_mode='html')

bot.polling(none_stop=True)

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: message text is empty"}']"
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Эксперт по BeautifulSoup(но это не точно!)
Логика вашей проверки мне не ясна. Сначала вы строку переводите в нижний регистр, а потом сравниваете ее со строкой, которая начинается с большой буквы. Много if,elif, и else конструкций - это плохо. Я бы заменил их все словарём.
Например, так:
from covid import Covid
import telebot
import config

bot = telebot.TeleBot(config.TOKEN)
covid = Covid()

country = { 'сша':'Us',
      'украина':'Ukraine',
      'россия':'Russia',
      'беларусь':'Belarus',
      'казахстан':'Kazakhstan',
      'италия':'Italy',
      'франция':'France',
      'германия':'Germany',
      'япония':'Japan',
      }

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
  bot.reply_to(message, "Начнем")

@bot.message_handler(content_types=['text'])
def start(message):
  get_message_bot = message.text.strip().lower()
  location = covid.get_status_by_country_name(country.get(get_message_bot,'russia'))

  final_message = f"<u>Данные по стране:</u>\n<b>Заболевших: </b>{location['confirmed']:,}\n<b>Умерших: </b>{location['deaths']:,}\n<b>Выздоровевших: </b>{location['recovered']:,}\n<b>Болеющих: </b>{location['active']:,}"
  bot.send_message(message.chat.id, final_message, parse_mode='html')

bot.polling(none_stop=True)

Посмотрим на строку:
location = covid.get_status_by_country_name(country.get(get_message_bot,'russia'))

country.get(get_message_bot,'russia') - здесь пытаемся получить значение словаря по ключу. В качестве ключа передаем строку, которую получили от пользователя. Если в словаре country есть
элемент с ключом, тогда возвращаем значение элемента по ключу, а передаем это значение в метод
get_status_by_country_name. Если в словаре нет такого ключа, тогда возвращаем стандартное значение(в нашем случае это - 'russia') и передаем его в метод get_status_by_country_name.

Еще можно пойти дальше. Словарь стран хранить в файле.(Вообще не принято такие значения хардкорить в коде.)
Также изобрели величайшее изобретение отладки - функцию print) Особенно полезно, если кодить в sublime или в блокноте. Можно выводить на консоль значение переменных, и понимать что в них хранится.
От себя добавлю совет - все функции, которые исполузуются в боте(которым не нужен telegram api) писать и отлаживать в отдельном файле в простом скрипте. А потом, когда отладите - интегрируйте в свой бот. Ведь намного проще в функцию передать значение из своего скрипта, и посмотреть на выход, чем запустить бота, открыть телеграм, написать боту и т.д.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bacon
Вот явно же пишут "message text is empty" сложно что ли чуток подумать? Какое сообщение будет для russia?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Marilyn Москва
от 100 000 до 130 000 ₽
iCode Москва
от 90 000 до 200 000 ₽
SwapZilla.co Москва
от 200 000 ₽