Try to fix cleaning up rooms
Not tested at all
This commit is contained in:
@@ -169,7 +169,7 @@ async def execute_room_cleanup(evt, rooms_to_clean: List[Union[po.Portal, RoomID
|
|||||||
await room.cleanup_and_delete()
|
await room.cleanup_and_delete()
|
||||||
cleaned += 1
|
cleaned += 1
|
||||||
else:
|
else:
|
||||||
await po.Portal.cleanup_room(evt.az.intent, room, message="Room deleted")
|
await po.Portal.cleanup_room(evt.az.intent, room, "Room deleted")
|
||||||
cleaned += 1
|
cleaned += 1
|
||||||
evt.sender.command_status = None
|
evt.sender.command_status = None
|
||||||
await evt.reply(f"{cleaned} rooms cleaned up successfully.")
|
await evt.reply(f"{cleaned} rooms cleaned up successfully.")
|
||||||
|
|||||||
@@ -113,12 +113,10 @@ async def cleanup_old_portal_while_bridging(evt: CommandEvent, portal: "po.Porta
|
|||||||
"Continuing without touching previous Matrix room...")
|
"Continuing without touching previous Matrix room...")
|
||||||
return True, None
|
return True, None
|
||||||
elif evt.args[0] == "delete-and-continue":
|
elif evt.args[0] == "delete-and-continue":
|
||||||
return True, portal.cleanup_room(portal.main_intent, portal.mxid,
|
return True, portal.cleanup_portal("Portal deleted (moving to another room)")
|
||||||
message="Portal deleted (moving to another room)")
|
|
||||||
elif evt.args[0] == "unbridge-and-continue":
|
elif evt.args[0] == "unbridge-and-continue":
|
||||||
return True, portal.cleanup_room(portal.main_intent, portal.mxid,
|
return True, portal.cleanup_portal("Room unbridged (portal moving to another room)",
|
||||||
message="Room unbridged (portal moving to another room)",
|
puppets_only=True)
|
||||||
puppets_only=True)
|
|
||||||
else:
|
else:
|
||||||
await evt.reply(
|
await evt.reply(
|
||||||
"The chat you were trying to bridge already has a Matrix portal room.\n\n"
|
"The chat you were trying to bridge already has a Matrix portal room.\n\n"
|
||||||
|
|||||||
@@ -273,17 +273,13 @@ class BasePortal(ABC):
|
|||||||
authenticated.append(user)
|
authenticated.append(user)
|
||||||
return authenticated
|
return authenticated
|
||||||
|
|
||||||
async def cleanup_room(self, intent: IntentAPI, room_id: RoomID,
|
@staticmethod
|
||||||
message: str = "Portal deleted", puppets_only: bool = False) -> None:
|
async def cleanup_room(intent: IntentAPI, room_id: RoomID, message: str,
|
||||||
|
puppets_only: bool = False) -> None:
|
||||||
try:
|
try:
|
||||||
members = await intent.get_room_members(room_id)
|
members = await intent.get_room_members(room_id)
|
||||||
except MatrixRequestError:
|
except MatrixRequestError:
|
||||||
members = []
|
members = []
|
||||||
if self.username:
|
|
||||||
try:
|
|
||||||
await intent.remove_room_alias(self.alias_localpart)
|
|
||||||
except (MatrixRequestError, IntentError):
|
|
||||||
self.log.warning("Failed to remove alias when cleaning up room", exc_info=True)
|
|
||||||
for user in members:
|
for user in members:
|
||||||
puppet = p.Puppet.get_by_mxid(UserID(user), create=False)
|
puppet = p.Puppet.get_by_mxid(UserID(user), create=False)
|
||||||
if user != intent.mxid and (not puppets_only or puppet):
|
if user != intent.mxid and (not puppets_only or puppet):
|
||||||
@@ -299,12 +295,20 @@ class BasePortal(ABC):
|
|||||||
except (MatrixRequestError, IntentError):
|
except (MatrixRequestError, IntentError):
|
||||||
self.log.warning("Failed to leave room when cleaning up room", exc_info=True)
|
self.log.warning("Failed to leave room when cleaning up room", exc_info=True)
|
||||||
|
|
||||||
|
async def cleanup_portal(self, message: str, puppets_only: bool = False) -> None:
|
||||||
|
if self.username:
|
||||||
|
try:
|
||||||
|
await self.main_intent.remove_room_alias(self.alias_localpart)
|
||||||
|
except (MatrixRequestError, IntentError):
|
||||||
|
self.log.warning("Failed to remove alias when cleaning up room", exc_info=True)
|
||||||
|
await self.cleanup_room(self.main_intent, self.mxid, message, puppets_only)
|
||||||
|
|
||||||
async def unbridge(self) -> None:
|
async def unbridge(self) -> None:
|
||||||
await self.cleanup_room(self.main_intent, self.mxid, "Room unbridged", puppets_only=True)
|
await self.cleanup_portal("Room unbridged", puppets_only=True)
|
||||||
self.delete()
|
self.delete()
|
||||||
|
|
||||||
async def cleanup_and_delete(self) -> None:
|
async def cleanup_and_delete(self) -> None:
|
||||||
await self.cleanup_room(self.main_intent, self.mxid)
|
await self.cleanup_portal("Portal deleted")
|
||||||
self.delete()
|
self.delete()
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|||||||
@@ -149,11 +149,9 @@ class ProvisioningAPI(AuthAPI):
|
|||||||
force = request.query.get("force", None)
|
force = request.query.get("force", None)
|
||||||
if force in ("delete", "unbridge"):
|
if force in ("delete", "unbridge"):
|
||||||
delete = force == "delete"
|
delete = force == "delete"
|
||||||
await portal.cleanup_room(portal.main_intent, portal.mxid, puppets_only=not delete,
|
await portal.cleanup_portal("Portal deleted (moving to another room)" if delete
|
||||||
message=("Portal deleted (moving to another room)"
|
else "Room unbridged (portal moving to another room)",
|
||||||
if delete
|
puppets_only=not delete)
|
||||||
else "Room unbridged (portal moving to another "
|
|
||||||
"room)"))
|
|
||||||
else:
|
else:
|
||||||
return self.get_error_response(409, "chat_already_bridged",
|
return self.get_error_response(409, "chat_already_bridged",
|
||||||
"Telegram chat is already bridged to another "
|
"Telegram chat is already bridged to another "
|
||||||
|
|||||||
Reference in New Issue
Block a user