[docs]asyncdefupdate_info(self,channel:Optional[Channel]=None):ifchannelisNone:channel=self.session.bookmarks.channels.pop(self.legacy_id,None)ifnotchannel:channel=awaitself.fetch_channel()ifchannel.team_id:team:Team=awaitself.session.mm_client.get_team(channel.team_id)team_prefix=(team.display_nameor"unnamed-team")+" / "awaitself.__set_team_icon(team)else:team_prefix=""self.name=team_prefix+(channel.display_nameorchannel.nameor"")self.description=channel.purposeor""self.subject=channel.headeror""self.log.debug("Channel type: %s",channel.type_)ifchannel.type_=="P":self.type=MucType.GROUPawaitself.add_to_bookmarks(auto_join=True)elifchannel.type_=="G":self.type=MucType.CHANNEL_NON_ANONYMOUSawaitself.add_to_bookmarks(auto_join=True)elifchannel.type_=="O":self.type=MucType.CHANNEL_NON_ANONYMOUSelifchannel.type_=="D":raiseXMPPError("bad-request","This is a direct channel")else:self.log.warning("Unknown channel type: %s",channel.type_)stats=awaitself.session.mm_client.get_channel_stats(self.legacy_id)self.n_participants=stats.member_countorNone
[docs]asyncdeffill_participants(self):users_ids=set()asyncformemberinself.session.mm_client.get_channel_members(self.legacy_id):member:ChannelMember# type:ignoreusers_ids.add(member.user_id)iflen(users_ids)>config.MAX_PARTICIPANTS:breakknown=set(awaitself.session.contacts.known_user_ids())self.log.debug("Known %s",known)missing=users_ids-knownifmissing:users={u.id:uforuinawaitself.session.mm_client.get_users_by_ids(list(missing))}self.log.debug("Fetched %s users at once",len(users))else:users={}foruser_idinusers_ids:ifuser_id==awaitself.session.mm_client.mm_id:continuecontact=awaitself.session.contacts.by_mm_user_id(user_id,users.get(user_id))yieldawaitself.get_participant_by_contact(contact)
[docs]asyncdefbackfill(self,after:Optional[HoleBound]=None,before:Optional[HoleBound]=None,):ifnotconfig.BACKFILL_POSTS:returnnow=datetime.now()i=0self.log.debug("Backfill request between %s and %s",before,after)before_id=NoneifbeforeisNoneelsebefore.idafter_id=NoneifafterisNoneelseafter.idasyncforpostinself.session.mm_client.get_posts_for_channel(self.legacy_id,before=before_id):ifpost.id==after_id:breakifi==0andnotself.xmpp.cache.msg_id_get(awaitself.session.mm_client.mm_id,self.legacy_id):self.xmpp.cache.msg_id_store(awaitself.session.mm_client.mm_id,self.legacy_id,post.id)ifnow-datetime.fromtimestamp(post.create_at/1000)>timedelta(days=global_config.MAM_MAX_DAYS):breakpart=awaitself.get_participant_by_mm_user_id(post.user_id)awaitpart.send_mm_post(post,archive_only=True)i+=1ifi==config.BACKFILL_POSTS:break