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