Задать вопрос
@Garisonchik

Как выбрать нужный ответ из JSON файла?

Работаю электриком в небольшом автосервисе и пишу небольшой чат-бот на Питоне для своих коллег, чтобы упросить им работу.
Хочу сделать так, чтобы пользователь выбирал код ошибки из списка и ему выводилось описание ошибки и что с этим делать.
Основную часть я написал, но возникла проблема.
Не хочу засорять основной код сообщениями об ошибках, поэтому ошибки внес в отдельный файл error.json.

Но не могу понять, как сделать так, чтобы при нажатии кнопки с номером ошибки, выдавалось описание этой ошибки в чат.

markup = types.InlineKeyboardMarkup(row_width=2)
        button1 = types.InlineKeyboardButton("501", callback_data='501')
        button2 = types.InlineKeyboardButton("502", callback_data='502')
        markup.add(button1,button2)
        bot.send_message(message.chat.id, "Выберите ошибку:", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    try:
        if call.message:
            if call.data == "501":
                bot.send_message(call.message.chat.id, "Ошибка 501")
                photo = open('501.jpg', 'rb')
                bot.send_photo(call.message.chat.id, photo, caption='текст')
            if call.data == "502":
                bot.send_message(call.message.chat.id, "Ошибка 502")
    except Exception as e:
        print(repr(e))


Вот файл json.
{
    "501": "Сбросить ошибку и повторить тест",
    "502": "Снять клемму с аккумулятора",
    "503": "Выполнить прошивку модуля",
    "505": "Заменить предохранитель"
  }
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Как вариант (добавить проверок и исключений):
ERRORS_FILE = 'error.json'
IMAGES = 'error_images'

error_data = {}

with open(ERRORS_FILE, 'r', encoding='utf-8') as f:
    error_data = json.load(f)

# Код бота:

error_code = call.data
error_description = error_data.get(error_code)

# bot.send_message(call.message.chat.id, "Ошибка 501")
bot.send_message(call.message.chat.id, f"Ошибка {error_code}: {error_description}")

# photo = open('501.jpg', 'rb')
image_path = os.path.join(IMAGES, f"{error_code}.jpg")
with open(image_path, 'rb') as photo:
    bot.send_photo(call.message.chat.id, photo, caption=error_code)

Так же, я бы подключал json файл 1 раз при запуске бота, а не каждый раз при нажатие его кнопок.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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