Source code for permabots.models.telegram_api

# -*- coding: utf-8 -*-
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from django.forms.models import model_to_dict
from permabots.models.base import PermabotsModel


@python_2_unicode_compatible
[docs]class User(models.Model): id = models.BigIntegerField(primary_key=True) first_name = models.CharField(_('First name'), max_length=255) last_name = models.CharField(_('Last name'), max_length=255, blank=True, null=True) username = models.CharField(_('User name'), max_length=255, blank=True, null=True) class Meta: verbose_name = _('User') verbose_name_plural = _('Users') def __str__(self): return "%s" % self.first_name
[docs] def to_dict(self): return model_to_dict(self)
@python_2_unicode_compatible
[docs]class Chat(models.Model): PRIVATE, GROUP, SUPERGROUP, CHANNEL = 'private', 'group', 'supergroup', 'channel' TYPE_CHOICES = ( (PRIVATE, _('Private')), (GROUP, _('Group')), (SUPERGROUP, _('Supergroup')), (CHANNEL, _('Channel')), ) id = models.BigIntegerField(primary_key=True) type = models.CharField(max_length=255, choices=TYPE_CHOICES) title = models.CharField(max_length=255, null=True, blank=True) username = models.CharField(max_length=255, null=True, blank=True) first_name = models.CharField(max_length=255, null=True, blank=True) last_name = models.CharField(max_length=255, null=True, blank=True) class Meta: verbose_name = _('Chat') verbose_name_plural = _('Chats') def __str__(self): return "%s" % (self.id)
[docs] def to_dict(self): return model_to_dict(self)
@python_2_unicode_compatible
[docs]class Message(PermabotsModel): message_id = models.BigIntegerField(_('Id'), db_index=True) # It is no unique. Only combined with chat and bot from_user = models.ForeignKey(User, related_name='messages', verbose_name=_("User")) date = models.DateTimeField(_('Date')) chat = models.ForeignKey(Chat, related_name='messages', verbose_name=_("Chat")) forward_from = models.ForeignKey(User, null=True, blank=True, related_name='forwarded_from', verbose_name=_("Forward from")) text = models.TextField(null=True, blank=True, verbose_name=_("Text")) # TODO: complete fields with all message fields class Meta: verbose_name = 'Message' verbose_name_plural = 'Messages' ordering = ['-date', ] def __str__(self): return "(%s,%s,%s)" % (self.message_id, self.chat, self.text or '(no text)')
[docs] def to_dict(self): message_dict = model_to_dict(self, exclude=['from_user', 'chat']) message_dict.update({'from_user': self.from_user.to_dict(), 'chat': self.chat.to_dict()}) return message_dict
@python_2_unicode_compatible
[docs]class CallbackQuery(PermabotsModel): callback_id = models.CharField(_('Id'), db_index=True, max_length=255) # It might not be unique. from_user = models.ForeignKey(User, related_name='callback_queries', verbose_name=_("User")) message = models.ForeignKey(Message, null=True, blank=True, related_name='callback_queries', verbose_name=_("Message")) data = models.TextField(null=True, blank=True, verbose_name=_("Data"), max_length=255) class Meta: verbose_name = 'CallbackQuery' verbose_name_plural = 'CallbackQueries' def __str__(self): return "(%s,%s)" % (self.callback_id, self.data)
[docs] def to_dict(self): message_dict = model_to_dict(self, exclude=['from_user', 'message']) message_dict.update({'from_user': self.from_user.to_dict(), 'message': self.message.to_dict()}) return message_dict
[docs]class Update(PermabotsModel): bot = models.ForeignKey('TelegramBot', verbose_name=_("Bot"), related_name="updates") update_id = models.BigIntegerField(_('Update Id'), db_index=True) message = models.ForeignKey(Message, null=True, blank=True, verbose_name=_('Message'), related_name="updates") callback_query = models.ForeignKey(CallbackQuery, null=True, blank=True, verbose_name=_("Callback Query"), related_name="updates") class Meta: verbose_name = 'Update' verbose_name_plural = 'Updates' unique_together = ('update_id', 'bot') def __str__(self): return "(%s, %s)" % (self.bot.id, self.update_id)
[docs] def to_dict(self): if self.message: return {'update_id': self.update_id, 'message': self.message.to_dict()} elif self.callback_query: return {'update_id': self.update_id, 'callback_query': self.callback_query.to_dict()}