136 lines
5.2 KiB
Python
136 lines
5.2 KiB
Python
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}"
|
||
|