forked from fair/matrix-puppeteer-line
Make bridgebot leave rooms when last member leaves
Most useful for leaving abandoned notice rooms
This commit is contained in:
parent
bc0ee93276
commit
39a691db35
|
@ -47,3 +47,8 @@ class User:
|
|||
if not row:
|
||||
return None
|
||||
return cls(**row)
|
||||
|
||||
@classmethod
|
||||
async def discard_notice_room(cls, notice_room: RoomID) -> None:
|
||||
await cls.db.execute('DELETE FROM "user" WHERE notice_room=$1',
|
||||
notice_room)
|
||||
|
|
|
@ -22,6 +22,7 @@ from mautrix.types import (Event, EventType, MessageEvent, StateEvent, Encrypted
|
|||
from mautrix.errors import MatrixError
|
||||
|
||||
from . import portal as po, puppet as pu, user as u
|
||||
from .db import User as DBUser
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .__main__ import MessagesBridge
|
||||
|
@ -151,6 +152,14 @@ class MatrixHandler(BaseMatrixHandler):
|
|||
async def handle_leave(self, room_id: RoomID, user_id: UserID, event_id: EventID) -> None:
|
||||
portal = await po.Portal.get_by_mxid(room_id)
|
||||
if not portal:
|
||||
intent = self.bridge.az.intent
|
||||
try:
|
||||
if len(await intent.get_room_members(room_id)) == 1:
|
||||
self.log.info(f"Bridge bot leaving empty room")
|
||||
await intent.leave_room(room_id)
|
||||
await DBUser.discard_notice_room(room_id)
|
||||
except MatrixError:
|
||||
self.log.exception(f"Failed to get member list of {room_id}")
|
||||
return
|
||||
|
||||
user = await u.User.get_by_mxid(user_id, create=False)
|
||||
|
|
Loading…
Reference in New Issue