Add autojoin event handler
This commit is contained in:
parent
6969b2e273
commit
91dc5646c7
1 changed files with 22 additions and 7 deletions
|
@ -17,8 +17,9 @@ from typing import Dict, Optional
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from mautrix import ClientAPI
|
from mautrix import Client as MatrixClient
|
||||||
from mautrix.types import UserID, SyncToken, FilterID, ContentURI
|
from mautrix.types import (UserID, SyncToken, FilterID, ContentURI, StateEvent, Membership,
|
||||||
|
EventType)
|
||||||
|
|
||||||
from .db import DBClient
|
from .db import DBClient
|
||||||
|
|
||||||
|
@ -32,11 +33,13 @@ class Client:
|
||||||
def __init__(self, db_instance: DBClient) -> None:
|
def __init__(self, db_instance: DBClient) -> None:
|
||||||
self.db_instance: DBClient = db_instance
|
self.db_instance: DBClient = db_instance
|
||||||
self.cache[self.id] = self
|
self.cache[self.id] = self
|
||||||
self.client: ClientAPI = ClientAPI(mxid=self.id,
|
self.client: MatrixClient = MatrixClient(mxid=self.id,
|
||||||
base_url=self.homeserver,
|
base_url=self.homeserver,
|
||||||
token=self.access_token,
|
token=self.access_token,
|
||||||
client_session=self.http_client,
|
client_session=self.http_client,
|
||||||
log=log.getChild(self.id))
|
log=log.getChild(self.id))
|
||||||
|
if self.autojoin:
|
||||||
|
self.client.add_event_handler(self.handle_invite, EventType.ROOM_MEMBER)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, id: UserID) -> Optional['Client']:
|
def get(cls, id: UserID) -> Optional['Client']:
|
||||||
|
@ -49,6 +52,7 @@ class Client:
|
||||||
return Client(db_instance)
|
return Client(db_instance)
|
||||||
|
|
||||||
# region Properties
|
# region Properties
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self) -> UserID:
|
def id(self) -> UserID:
|
||||||
return self.db_instance.id
|
return self.db_instance.id
|
||||||
|
@ -63,6 +67,7 @@ class Client:
|
||||||
|
|
||||||
@access_token.setter
|
@access_token.setter
|
||||||
def access_token(self, value: str) -> None:
|
def access_token(self, value: str) -> None:
|
||||||
|
self.client.api.token = value
|
||||||
self.db_instance.access_token = value
|
self.db_instance.access_token = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -95,6 +100,12 @@ class Client:
|
||||||
|
|
||||||
@autojoin.setter
|
@autojoin.setter
|
||||||
def autojoin(self, value: bool) -> None:
|
def autojoin(self, value: bool) -> None:
|
||||||
|
if value == self.db_instance.autojoin:
|
||||||
|
return
|
||||||
|
if value:
|
||||||
|
self.client.add_event_handler(self.handle_invite, EventType.ROOM_MEMBER)
|
||||||
|
else:
|
||||||
|
self.client.remove_event_handler(self.handle_invite, EventType.ROOM_MEMBER)
|
||||||
self.db_instance.autojoin = value
|
self.db_instance.autojoin = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -114,3 +125,7 @@ class Client:
|
||||||
self.db_instance.avatar_url = value
|
self.db_instance.avatar_url = value
|
||||||
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
|
async def handle_invite(self, evt: StateEvent):
|
||||||
|
if evt.state_key == self.id and evt.content.membership == Membership.INVITE:
|
||||||
|
await self.client.join_room_by_id(evt.room_id)
|
||||||
|
|
Loading…
Reference in a new issue