Для решения проблемы "Ошибка взаимодействия" необходимо проверить состояние кнопок и их обработчики, а также убедиться, что обработка событий выполняется корректно. Также может помочь добавление обработки исключений в `callback`, чтобы выявить возможные проблемы.
Что касается улучшения кода с точки зрения читабельности и эффективности, ниже приведён переработанный вариант с улучшенной структурой, использованием констант, обработкой исключений и форматированием.
```python
import disnake
from disnake.ext import commands
from disnake.ui import Modal, TextInput
from datetime import datetime
# Константы
COMMAND_PREFIX = "!"
HELP_COMMAND = None
INTENTS = disnake.Intents.all()
MODAL_TITLE = "Заявка в семью"
APPLICATION_MESSAGE = "Заявка отправлена на рассмотрение High Staff!"
NEW_APPLICATION_TITLE = "Новая заявка в семью!"
APPLICATION_NUMBER = 0
# Создаём бота
bot = commands.Bot(command_prefix=COMMAND_PREFIX, help_command=HELP_COMMAND, intents=INTENTS)
class FamilyApplicationsModal(Modal):
def __init__(self):
components = [
TextInput(label="Имя Фамилия | Статик", placeholder="Mikey Manjirou | 2966", custom_id="name"),
TextInput(label="IRL Возраст", placeholder="21", custom_id="age"),
TextInput(label="Среднесуточный онлайн", placeholder="3-5+", custom_id="time"),
TextInput(label="Откат стрельбы с ГГ (карабин)", placeholder="https://www.youtube.com/ или Нет", custom_id="gg_k"),
TextInput(label="Откат стрельбы с ГГ (сайга)", placeholder="https://www.youtube.com/ или Нет", custom_id="gg_s")
]
super().__init__(title=MODAL_TITLE, components=components, custom_id="familyapplicationsmodal")
async def callback(self, interaction: disnake.ModalInteraction) -> None:
global APPLICATION_NUMBER
APPLICATION_NUMBER += 1
name = interaction.text_values["name"]
age = interaction.text_values["age"]
time = interaction.text_values["time"]
gg_k = interaction.text_values["gg_k"]
gg_s = interaction.text_values["gg_s"]
try:
await interaction.response.send_message(APPLICATION_MESSAGE, ephemeral=True)
embed = disnake.Embed(
title=NEW_APPLICATION_TITLE,
description=f"Имя: {name}\nВозраст: {age}\nОнлайн: {time}\nОткат Карабин: {gg_k}\nОткат Сайга: {gg_s}",
timestamp=datetime.utcnow()
)
# Здесь может быть код для отправки этого embed в нужный канал
# await some_channel.send(embed=embed)
except Exception as e:
# Обработка исключений
await interaction.response.send_message(f"Произошла ошибка: {str(e)}", ephemeral=True)
# Обратите внимание на необходимые импорты и определение команд для вашей логики
```
### Объяснение изменений:
1. **Константы**: Введены константы для различных строк, чтобы упростить изменения и повысить ясность кода.
2. **Структура `Modal` и `TextInput`**: В коде использованы структуры `Modal` и `TextInput`, чтобы обеспечить более четкое разделение элементов интерфейса.
3. **Обработка исключений**: Добавлена конструкция `try-except` в метод `callback`, чтобы помочь определить возможные проблемы при отправке сообщения или исполнении других операций.
4. **Форматирование и ясность**: Код отформатирован для повышения читабельности, убраны ненужные пробелы и комментарии уточняющие действия.
Эти изменения не только улучшат читабельность кода, но и повысят его стабильность и предсказуемость.