Try to automatically detect when data export is accepted

This commit is contained in:
Tulir Asokan
2022-10-14 13:55:43 +03:00
parent 0bbf64d240
commit 3c22ab7bd1
2 changed files with 16 additions and 1 deletions
+7
View File
@@ -541,6 +541,8 @@ class AbstractUser(ABC):
sender = await pu.Puppet.get_by_tgid(self.tgid)
elif isinstance(update.from_id, (PeerUser, PeerChannel)):
sender = await pu.Puppet.get_by_peer(update.from_id)
elif isinstance(update.peer_id, PeerUser):
sender = await pu.Puppet.get_by_peer(update.peer_id)
else:
sender = None
else:
@@ -622,6 +624,9 @@ class AbstractUser(ABC):
)
await portal.create_matrix_room(self, chan, invites=[self.mxid])
async def _check_server_notice_edit(self, message: Message) -> None:
pass
async def update_message(self, original_update: UpdateMessage) -> None:
update, sender, portal = await self.get_message_details(original_update)
if not portal:
@@ -673,6 +678,8 @@ class AbstractUser(ABC):
return await portal.handle_telegram_action(self, sender, update)
if isinstance(original_update, (UpdateEditMessage, UpdateEditChannelMessage)):
if sender and sender.tgid == 777000:
await self._check_server_notice_edit(update)
return await portal.handle_telegram_edit(self, sender, update)
return await portal.handle_telegram_message(self, sender, update)
+9 -1
View File
@@ -37,9 +37,9 @@ from telethon.tl.types import (
Chat,
ChatForbidden,
InputUserSelf,
Message,
NotifyPeer,
PeerUser,
TypeChat,
TypeUpdate,
UpdateFolderPeers,
UpdateNewChannelMessage,
@@ -403,6 +403,14 @@ class User(DBUser, AbstractUser, BaseUser):
self.log.exception("Error in takeout backfill loop, retrying in an hour")
await asyncio.sleep(3600)
async def _check_server_notice_edit(self, message: Message) -> None:
if "Data export request" in message.message and "Accepted" in message.message:
self.log.debug(
f"Received an edit to message {message.id} that looks like the data export"
" was accepted, marking takeout as retriable"
)
self.takeout_retry_immediate.set()
async def _takeout_and_backfill(self, first_req: Backfill, first_attempt: bool = True) -> None:
self.takeout_retry_immediate.clear()
self.takeout_requested = True