Py-Cord Discord.py Внедри этот калькулятор в slash команду /calculate и потом бот отправляет сообщение embed под ним кнопки: "Добавить" и "Убрать" Нажимая на кнопку то бот высылает ephermal сообщение и под ним кнопка Dropdown и там все виды стенок и дверей на русском в единственном числе,выбираем Добавить и потом отправляется другое сообщение меняется и бот пишет "укажите в следующем сообщении сколько обьектов" и мы отправляем например 3 и сообщение бота удаляется(где была кнопка dropdown) и изначальное сообщение меняется и в description добавляется "Какойто обьект - Сколько-то штук" и так можем добавлять и другие обьекты,а нажав кнопку убрать так же отправляется новое сообщение ephermal с содержанием "Какой обьект убрать" и там так же кнопка DropDown но уже появляется список обьектов которые мы добавили в калькулятор.

import json

# Загрузка данных из JSON-файлов
with open('names.json', 'r', encoding='utf-8') as f:
    names_data = json.load(f)

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

def translate_to_russian(category, name):
    # Попробуем найти подходящий перевод
    for key, value in names_data[category].items():
        if key.startswith(name):
            return value
    return name

def calculate_explosive(item_name, item_count):
    # Определяем полное здоровье для указанного количества объектов
    if 'door' in item_name:
        item_health = raid_data['doors_hp'].get(item_name) * item_count
    else:
        item_health = raid_data['walls_hp'].get(item_name) * item_count

    results = {}

    for explosive, details in raid_data.items():
        if explosive in ['doors_hp', 'walls_hp']:
            continue

        damage = (details['damage'].get('walls', {}).get(item_name) or 
                  details['damage'].get('doors', {}).get(item_name))
        
        if not damage:
            continue
        
        # Вычисляем необходимое количество взрывчатки
        if explosive == "explosive_ammo":  # Даем скидку за крафт 2 патрона
            amount_needed = (item_health + damage - 1) // damage  # Потребуется округление вверх
            amount_needed = (amount_needed + 1) // 2  # Учет двух патронов на крафт
        else:
            amount_needed = (item_health + damage - 1) // damage
            
        if amount_needed > 0:
            results[explosive] = {
                "amount": amount_needed,
                "craft": {}
            }
            craft_info = details.get('craft')
            if craft_info:  # Проверяем, существует ли 'craft'
                for resource, amount in craft_info.items():
                    results[explosive]['craft'][resource] = amount * amount_needed
            else: print(explosive)
    return results

def main():
    # Ввод
    item_name = input("Введите название предмета (например, metal_door): ").strip()
    item_count = int(input("Введите количество предметов: "))

    # Перевод на русский
    if 'door' in item_name:
        item_name_ru = translate_to_russian('doors_ru', item_name)
    else:
        item_name_ru = translate_to_russian('walls_ru', item_name)

    # Расчёт взрывчатки и крафта
    explosive_data = calculate_explosive(item_name, item_count)

    # Вывод результатов
    print(f"Для разрушения {item_count} {item_name_ru} потребуется:")
    for explosive, data in explosive_data.items():
        explosive_ru = translate_to_russian('explosive_ru', explosive)
        print(f"{data['amount']} x {explosive_ru}")
        print("Крафт:")
        for resource, amount in data['craft'].items():
            resource_ru = translate_to_russian('crafting_ru', resource)
            print(f"  {resource_ru}: {amount}")

if __name__ == "__main__":
    main()