Add command to cache Matrix room memberships

This commit is contained in:
Tulir Asokan
2019-01-07 19:54:19 +02:00
parent e9ddd0caa8
commit a090d6de32
2 changed files with 30 additions and 2 deletions
+15 -1
View File
@@ -28,7 +28,7 @@ from ..config import yaml
from ..util import ignore_coro
from .. import portal as po, user as u, util
from . import (command_handler, CommandEvent,
SECTION_ADMIN, SECTION_CREATING_PORTALS, SECTION_PORTAL_MANAGEMENT)
SECTION_ADMIN, SECTION_CREATING_PORTALS, SECTION_PORTAL_MANAGEMENT, SECTION_MISC)
@command_handler(needs_admin=True, needs_auth=False, name="set-pl",
@@ -53,6 +53,20 @@ async def set_power_level(evt: CommandEvent) -> Dict:
return {}
@command_handler(needs_admin=False, needs_puppeting=False, needs_auth=False,
help_section=SECTION_MISC,
help_text="Fetch Matrix room state to ensure the bridge has up-to-date info.")
async def sync_state(evt: CommandEvent) -> Dict:
portal = po.Portal.get_by_mxid(evt.room_id)
if not portal:
return await evt.reply("This is not a portal room.")
elif not await user_has_power_level(evt.room_id, evt.az.intent, evt.sender, "bridge"):
return await evt.reply(f"You do not have the permissions to synchronize this room.")
await portal.sync_matrix_members()
await evt.reply("Synchronization complete")
@command_handler(help_section=SECTION_PORTAL_MANAGEMENT,
help_text="Get a Telegram invite link to the current chat.")
async def invite_link(evt: CommandEvent) -> Dict:
+15 -1
View File
@@ -77,7 +77,6 @@ if TYPE_CHECKING:
from .config import Config
from .tgclient import MautrixTelegramClient
mimetypes.init()
config = None # type: Config
@@ -329,6 +328,7 @@ class Portal:
puppet = p.Puppet.get(self.tgid)
await puppet.update_info(user, entity)
await puppet.intent.join_room(self.mxid)
await self.sync_matrix_members()
async def create_matrix_room(self, user: 'AbstractUser', entity: TypeChat = None,
invites: InviteList = None, update_if_exists: bool = True,
@@ -783,6 +783,20 @@ class Portal:
return (await self.main_intent.get_displayname(self.mxid, user.mxid)
or user.mxid)
async def sync_matrix_members(self) -> None:
resp = await self.main_intent.get_room_joined_memberships(self.mxid)
members = resp["joined"]
print(members)
for mxid, info in members.items():
member = {
"membership": "join",
}
if "display_name" in info:
member["displayname"] = info["display_name"]
if "avatar_url" in info:
member["avatar_url"] = info["avatar_url"]
self.az.state_store.set_member(self.mxid, mxid, member)
def set_typing(self, user: 'u.User', typing: bool = True,
action: type = SendMessageTypingAction) -> Awaitable[bool]:
return user.client(SetTypingRequest(