Почему Telegram-бот не читает данные из файла?
Идея бота: Юзер вводит дату, а бот выдает праздник в этот день. В отдельном файлике лежит словарь, где дата - ключ, описание праздника - значение. Проблема в том, что бот не читает данные из файлика. Он поочерёдно выводит вот эти два захардкоженных сообщения. Как это исправить?
def func(message):
if message.text == "":
bot.send_message(message.from_user.id, slovar.data_year.get(""))
else:
bot.send_message(message.from_user.id, "В этот день праздников нет. Иди работать!")
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
data = bot.send_message(message.from_user.id, "Введите дату в формате Д.ММ и нажмите ENTER")
bot.register_next_step_handler(data, func)
bot.polling(none_stop=True, interval=0)
Ответы (2 шт):
Автор решения: Сергей Богданов
→ Ссылка
добавить в func вот так:
send = message.text
if message.text == send:
bot.send_message(message.from_user.id, slovar.data_year.get(send))
Автор решения: gil9red
→ Ссылка
С учетом ответа автора, думаю должно быть так:
def func(message):
text = message.text
holidays = slovar.data_year.get(text)
if holidays:
bot.send_message(message.from_user.id, holidays)
else:
bot.send_message(message.from_user.id, "В этот день праздников нет. Иди работать!")
А лучше так (get вернет второе значение, если ключа не будет в словаре):
def func(message):
text = message.text
result = slovar.data_year.get(text, "В этот день праздников нет. Иди работать!")
bot.send_message(message.from_user.id, result)
UPD. Дублирование сообщений, показанных в вопросе, не повторилось.
import telebot
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
data_year = {
'01.01': 'Новый год',
'23.02': '23 февраля',
}
def func(message):
text = message.text
result = data_year.get(text, "В этот день праздников нет. Иди работать!")
bot.send_message(message.from_user.id, result)
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
data = bot.send_message(message.from_user.id, "Введите дату в формате Д.ММ и нажмите ENTER")
bot.register_next_step_handler(data, func)
bot.polling(none_stop=True)
Скриншот:

