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()