Add option to disable online status for bots
This commit is contained in:
parent
4aada15bbe
commit
798f5da5de
5 changed files with 58 additions and 3 deletions
30
alembic/versions/fccd1f95544d_add_online_field_to_clients.py
Normal file
30
alembic/versions/fccd1f95544d_add_online_field_to_clients.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
"""Add online field to clients
|
||||
|
||||
Revision ID: fccd1f95544d
|
||||
Revises: d295f8dcfa64
|
||||
Create Date: 2020-03-06 15:07:50.136644
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'fccd1f95544d'
|
||||
down_revision = 'd295f8dcfa64'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table("client") as batch_op:
|
||||
batch_op.add_column(sa.Column('online', sa.Boolean(), nullable=False, server_default=sa.sql.expression.true()))
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table("client") as batch_op:
|
||||
batch_op.drop_column('online')
|
||||
# ### end Alembic commands ###
|
|
@ -21,7 +21,8 @@ from aiohttp import ClientSession
|
|||
|
||||
from mautrix.errors import MatrixInvalidToken, MatrixRequestError
|
||||
from mautrix.types import (UserID, SyncToken, FilterID, ContentURI, StrippedStateEvent, Membership,
|
||||
StateEvent, EventType, Filter, RoomFilter, RoomEventFilter)
|
||||
StateEvent, EventType, Filter, RoomFilter, RoomEventFilter, EventFilter,
|
||||
PresenceState, StateFilter)
|
||||
from mautrix.client import InternalEventType
|
||||
|
||||
from .lib.store_proxy import ClientStoreProxy
|
||||
|
@ -63,6 +64,7 @@ class Client:
|
|||
store=ClientStoreProxy(self.db_instance))
|
||||
self.client.ignore_initial_sync = True
|
||||
self.client.ignore_first_sync = True
|
||||
self.client.presence = PresenceState.ONLINE if self.online else PresenceState.OFFLINE
|
||||
if self.autojoin:
|
||||
self.client.add_event_handler(EventType.ROOM_MEMBER, self._handle_invite)
|
||||
self.client.add_event_handler(EventType.ROOM_TOMBSTONE, self._handle_tombstone)
|
||||
|
@ -114,7 +116,14 @@ class Client:
|
|||
room=RoomFilter(
|
||||
timeline=RoomEventFilter(
|
||||
limit=50,
|
||||
lazy_load_members=True,
|
||||
),
|
||||
state=StateFilter(
|
||||
lazy_load_members=True,
|
||||
)
|
||||
),
|
||||
presence=EventFilter(
|
||||
not_types=[EventType.PRESENCE],
|
||||
),
|
||||
)))
|
||||
if self.displayname != "disable":
|
||||
|
@ -169,6 +178,7 @@ class Client:
|
|||
"sync": self.sync,
|
||||
"sync_ok": self.sync_ok,
|
||||
"autojoin": self.autojoin,
|
||||
"online": self.online,
|
||||
"displayname": self.displayname,
|
||||
"avatar_url": self.avatar_url,
|
||||
"remote_displayname": self.remote_displayname,
|
||||
|
@ -308,6 +318,15 @@ class Client:
|
|||
self.client.remove_event_handler(EventType.ROOM_MEMBER, self._handle_invite)
|
||||
self.db_instance.autojoin = value
|
||||
|
||||
@property
|
||||
def online(self) -> bool:
|
||||
return self.db_instance.online
|
||||
|
||||
@online.setter
|
||||
def online(self, value: bool) -> None:
|
||||
self.client.presence = PresenceState.ONLINE if value else PresenceState.OFFLINE
|
||||
self.db_instance.online = value
|
||||
|
||||
@property
|
||||
def displayname(self) -> str:
|
||||
return self.db_instance.displayname
|
||||
|
|
|
@ -60,6 +60,7 @@ class DBClient(Base):
|
|||
|
||||
sync: bool = Column(Boolean, nullable=False, default=True)
|
||||
autojoin: bool = Column(Boolean, nullable=False, default=True)
|
||||
online: bool = Column(Boolean, nullable=False, default=True)
|
||||
|
||||
displayname: str = Column(String(255), nullable=False, default="")
|
||||
avatar_url: ContentURI = Column(String(255), nullable=False, default="")
|
||||
|
|
|
@ -64,7 +64,7 @@ async def _create_client(user_id: Optional[UserID], data: dict) -> web.Response:
|
|||
db_instance = DBClient(id=mxid, homeserver=homeserver, access_token=access_token,
|
||||
enabled=data.get("enabled", True), next_batch=SyncToken(""),
|
||||
filter_id=FilterID(""), sync=data.get("sync", True),
|
||||
autojoin=data.get("autojoin", True),
|
||||
autojoin=data.get("autojoin", True), online=data.get("online", True),
|
||||
displayname=data.get("displayname", ""),
|
||||
avatar_url=data.get("avatar_url", ""))
|
||||
client = Client(db_instance)
|
||||
|
@ -91,6 +91,7 @@ async def _update_client(client: Client, data: dict) -> web.Response:
|
|||
await client.update_started(data.get("started", None))
|
||||
client.enabled = data.get("enabled", client.enabled)
|
||||
client.autojoin = data.get("autojoin", client.autojoin)
|
||||
client.online = data.get("online", client.online)
|
||||
client.sync = data.get("sync", client.sync)
|
||||
return resp.updated(client.to_dict())
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ class Client extends BaseMainView {
|
|||
|
||||
get entryKeys() {
|
||||
return ["id", "displayname", "homeserver", "avatar_url", "access_token", "sync",
|
||||
"autojoin", "enabled", "started"]
|
||||
"autojoin", "online", "enabled", "started"]
|
||||
}
|
||||
|
||||
get initialState() {
|
||||
|
@ -77,6 +77,7 @@ class Client extends BaseMainView {
|
|||
sync: true,
|
||||
autojoin: true,
|
||||
enabled: true,
|
||||
online: true,
|
||||
started: false,
|
||||
|
||||
instances: [],
|
||||
|
@ -285,6 +286,9 @@ class Client extends BaseMainView {
|
|||
enabled,
|
||||
started: enabled && this.state.started,
|
||||
})}/>
|
||||
<PrefSwitch rowName="Online"
|
||||
active={this.state.online} origActive={this.props.entry.online}
|
||||
onToggle={online => this.setState({ online })} />
|
||||
</PrefTable>
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue