Unregister old chat when a group is upgraded

This commit is contained in:
Tulir Asokan
2020-08-02 00:54:16 +03:00
parent bc4610af04
commit eace9b4ef6
4 changed files with 13 additions and 9 deletions
+5 -3
View File
@@ -186,7 +186,7 @@ class AbstractUser(ABC):
raise NotImplementedError()
@abstractmethod
def unregister_portal(self, portal: po.Portal) -> None:
def unregister_portal(self, tgid: int, tg_receiver: int) -> None:
raise NotImplementedError()
async def _update_catch(self, update: TypeUpdate) -> None:
@@ -459,8 +459,10 @@ class AbstractUser(ABC):
if isinstance(update, MessageService):
if isinstance(update.action, MessageActionChannelMigrateFrom):
self.log.trace(f"Ignoring action %s to %s by %d", update.action, portal.tgid_log,
sender.id)
self.log.trace(f"Received %s in %s by %d, unregistering portal...",
update.action, portal.tgid_log, sender.id)
self.unregister_portal(update.action.chat_id, update.action.chat_id)
self.register_portal(portal)
return
self.log.trace("Handling action %s to %s by %d", update.action, portal.tgid_log,
sender.id)
+2 -2
View File
@@ -120,8 +120,8 @@ class Bot(AbstractUser):
def register_portal(self, portal: po.Portal) -> None:
self.add_chat(portal.tgid, portal.peer_type)
def unregister_portal(self, portal: po.Portal) -> None:
self.remove_chat(portal.tgid)
def unregister_portal(self, tgid: int, tg_receiver: int) -> None:
self.remove_chat(tgid)
def add_chat(self, chat_id: TelegramID, chat_type: str) -> None:
if chat_id not in self.chats:
+2 -2
View File
@@ -587,7 +587,7 @@ class PortalMetadata(BasePortal, ABC):
continue
mx_user = u.User.get_by_mxid(user_mxid, create=False)
if mx_user and mx_user.is_bot and mx_user.tgid not in allowed_tgids:
mx_user.unregister_portal(self)
mx_user.unregister_portal(*self.tgid_full)
if mx_user and not self.has_bot and mx_user.tgid not in allowed_tgids:
try:
@@ -624,7 +624,7 @@ class PortalMetadata(BasePortal, ABC):
else:
await puppet.intent_for(self).leave_room(self.mxid)
if user:
user.unregister_portal(self)
user.unregister_portal(*self.tgid_full)
if sender.tgid != puppet.tgid:
try:
await sender.intent_for(self).kick_user(self.mxid, puppet.mxid)
+4 -2
View File
@@ -372,6 +372,7 @@ class User(AbstractUser, BaseUser):
self.log.debug("Dialog syncing complete")
def register_portal(self, portal: po.Portal) -> None:
self.log.trace(f"Registering portal {portal.tgid_full}")
try:
if self.portals[portal.tgid_full] == portal:
return
@@ -380,9 +381,10 @@ class User(AbstractUser, BaseUser):
self.portals[portal.tgid_full] = portal
self.save(portals=True)
def unregister_portal(self, portal: po.Portal) -> None:
def unregister_portal(self, tgid: int, tg_receiver: int) -> None:
self.log.trace(f"Unregistering portal {(tgid, tg_receiver)}")
try:
del self.portals[portal.tgid_full]
del self.portals[(tgid, tg_receiver)]
self.save(portals=True)
except KeyError:
pass