@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"}']"
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Логика вашей проверки мне не ясна. Сначала вы строку переводите в нижний регистр, а потом сравниваете ее со строкой, которая начинается с большой буквы. Много 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) писать и отлаживать в отдельном файле в простом скрипте. А потом, когда отладите - интегрируйте в свой бот. Ведь намного проще в функцию передать значение из своего скрипта, и посмотреть на выход, чем запустить бота, открыть телеграм, написать боту и т.д.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы