from django.db import models class BotConfig(models.Model): bot_token = models.CharField(max_length=255, help_text="Токен для подключения к Telegram API") channel_id = models.CharField(max_length=100, help_text="ID канала/чата, куда бот будет отправлять сообщения") bot_name = models.CharField(max_length=100, help_text="Отображаемое имя бота") chat_enabled = models.BooleanField( default=True, verbose_name="Чат включён", help_text="Если выключено, то глобально блокируется рассылка сообщений в чате." ) global_block_message = models.TextField( blank=True, null=True, verbose_name="Сообщение о глобальном блоке", help_text="Сообщение, которое показывается пользователям, если чат отключён." ) welcome_messages = models.ManyToManyField('WelcomeMessage', blank=True, verbose_name="Варианты приветствия") active_welcome = models.ForeignKey( 'WelcomeMessage', null=True, blank=True, on_delete=models.SET_NULL, related_name="used_by", verbose_name="Активное приветствие" ) is_active = models.BooleanField(default=False, verbose_name="Включен") def __str__(self): return self.bot_name class Meta: verbose_name = "Настройка бота" verbose_name_plural = "Настройки Ботов" class WelcomeMessage(models.Model): bot = models.ForeignKey(BotConfig, on_delete=models.CASCADE, verbose_name="Бот") welcome_message = models.TextField( verbose_name="Приветственное сообщение", blank=True, null=True, help_text="Текст, который будет отправлен при запуске команды /start" ) welcome_image = models.ImageField( upload_to='welcome_messages/', verbose_name="Приветственное изображение", blank=True, null=True, help_text="Загрузите изображение для приветствия" ) admin_contact = models.CharField( max_length=255, verbose_name="Контакт администратора", blank=True, null=True, help_text="Ссылка или контакт для связи с администратором" ) channel_link = models.URLField( verbose_name="Ссылка на канал", blank=True, null=True, help_text="URL канала бота" ) group_link = models.URLField( verbose_name="Ссылка на группу", blank=True, null=True, help_text="URL группы бота" ) custom_link1_name = models.CharField( max_length=100, verbose_name="Название кастомной ссылки 1", blank=True, null=True ) custom_link1_url = models.URLField( verbose_name="URL кастомной ссылки 1", blank=True, null=True ) custom_link2_name = models.CharField( max_length=100, verbose_name="Название кастомной ссылки 2", blank=True, null=True ) custom_link2_url = models.URLField( verbose_name="URL кастомной ссылки 2", blank=True, null=True ) class Meta: verbose_name = "Приветственное сообщение" verbose_name_plural = "Приветственные сообщения" def __str__(self): return f"Приветствие для {self.bot}" class BotMessage(models.Model): name = models.CharField("Название сообщения", max_length=100) text = models.TextField("Текст", blank=True) image = models.ImageField("Картинка", upload_to="bot_messages/", blank=True, null=True) buttons_json = models.JSONField("Кнопки (JSON-формат)", blank=True, null=True) class Meta: verbose_name = "Сообщение" verbose_name_plural = "Сообщения" def __str__(self): return self.name class BotEventMessageConfig(models.Model): EVENT_CHOICES = [ ('welcome', 'Приветствие'), ('draw_started', 'Розыгрыш начат'), ('draw_finished', 'Розыгрыш завершен'), ('winner_announced', 'Объявление победителя'), ('guest_binding', 'Подтверждение гостя'), # и другие ] event = models.CharField("Событие", max_length=50, choices=EVENT_CHOICES, unique=True) message = models.ForeignKey(BotMessage, on_delete=models.CASCADE, related_name="event_configs") enabled = models.BooleanField("Активно", default=True) class Meta: verbose_name = "Событие сообщения" verbose_name_plural = "События сообщений" def __str__(self): return f"{self.get_event_display()} → {self.message.name}"