Exemplo n.º 1
0
    def check_update(self, update: telegram.Update):
        logger.debug("SessionMiddleware in action")
        try:
            if update.effective_chat.type == "channel":
                try:
                    Channel.custom_save(update.effective_chat.id,
                                        update.effective_chat.title,
                                        update.effective_chat.username)
                except Exception as e:
                    logger.exception(str(e))
                return False

            try:
                # Try to load the TgUser from the cache
                db_user = TgUser.cache_get(update.effective_user.id)
                assert db_user != None

                # TODO: decide whether or not to check for any changes
            except:
                first_name = update.effective_user.first_name if update.effective_user.first_name != None else ""
                last_name = update.effective_user.last_name if update.effective_user.last_name != None else ""
                username = update.effective_user.username if update.effective_user.username != None else str(
                    update.effective_user.id)
                lang = update.effective_user.language_code

                dj_user = User.objects.create(id=update.effective_user.id,
                                              first_name=first_name,
                                              last_name=last_name,
                                              username=username)

                db_user = TgUser.objects.create(id=update.effective_user.id,
                                                dj=dj_user)

                if lang:
                    db_user.chat.lang = lang
                    db_user.chat.save()

            try:
                db_chat = Chat.cache_get(update.effective_chat.id)
                assert db_chat != None
            except:
                is_supergroup = True if update.effective_chat.type == "supergroup" else False
                grp = Group.custom_save(update.effective_chat.id,
                                        update.effective_chat.title,
                                        update.effective_chat.username,
                                        is_supergroup=is_supergroup)
                db_chat = grp.chat

            try:
                db_session = Session.cache_get(chat=db_chat, user=db_user)
                assert db_session is not None
            except:
                db_session = Session.objects.create(chat=db_chat,
                                                    user=db_user,
                                                    state="START")

            # we augment the Update instance.
            update.db = Database
            update.db.session = db_session
            update.db.chat = db_chat
            update.db.user = db_user
            logger.debug("update.db.session {}", update.db.session)
            logger.debug("update.db.chat {}", update.db.chat)
            logger.debug("update.db.user {}", update.db.user)
        except Exception as e:
            logger.exception(str(e))

        return False