from django.conf import settings from django.db import models from django.utils.translation import gettext_lazy as _ from .utils.models import AdminUserManager, GetOrNoneManager class TelegramUser(models.Model): user = models.OneToOneField( settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.CASCADE, ) tg_user_id = models.PositiveBigIntegerField(primary_key=True) username = models.CharField( max_length=32, verbose_name=_('name'), null=True, blank=True, ) deep_link = models.CharField(max_length=64, null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True, db_index=True) updated_at = models.DateTimeField(auto_now=True) is_blocked_bot = models.BooleanField(default=False) is_admin = models.BooleanField(default=False) objects = GetOrNoneManager() admins = AdminUserManager() class Meta: verbose_name = _('telegram user') verbose_name_plural = _('telegram users') ordering = ['-tg_user_id'] def __str__(self) -> str: tg_name = f'@{self.username}' if self.username is not None else f'{self.tg_user_id}' return f'{tg_name}/{self.user}' if self.user else f'{tg_name}' class TelegramBot(models.Model): id = models.PositiveBigIntegerField(primary_key=True, verbose_name=_('telegram id')) username = models.CharField(max_length=32, verbose_name=_('username')) first_name = models.CharField(max_length=64, verbose_name=_('first name')) link = models.CharField(max_length=64, verbose_name=_('link')) is_polling = models.BooleanField(default=False, verbose_name=_('is polling')) polling_at = models.DateTimeField( blank=True, null=True, verbose_name=_('polling at'), ) class Meta: verbose_name = _('telegram bot') verbose_name_plural = _('telegram bots') ordering = ('-polling_at', ) def __str__(self) -> str: return self.username