Skip to content

Commit

Permalink
fix: ✨ Filtered room events
Browse files Browse the repository at this point in the history
  • Loading branch information
egalvis39 committed Dec 1, 2023
1 parent 27d6afc commit 299e863
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 18 deletions.
2 changes: 1 addition & 1 deletion menuflow/example-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ menuflow:
# You can use of the fields defined in RoomEventFilter, for more information:
# https://github.com/mautrix/python/blob/master/mautrix/types/filter.py#L57
room_event_filter:
limit: 5
limit: 0
lazy_load_members: true

# Ignore messages or invitations from this users, it accepts user_ids and regex
Expand Down
27 changes: 13 additions & 14 deletions menuflow/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,23 +171,22 @@ async def _start(self, try_n: int | None = 0) -> None:
self.enabled = False
await self.update()
return
if not self.filter_id:
self.filter_id = await self.matrix_handler.create_filter(
Filter(
room=RoomFilter(
timeline=RoomEventFilter(
**self.menuflow.config["menuflow.sync.room_event_filter"]
),
state=StateFilter(
lazy_load_members=True,
),
self.filter_id = await self.matrix_handler.create_filter(
Filter(
room=RoomFilter(
timeline=RoomEventFilter(
**self.menuflow.config["menuflow.sync.room_event_filter"]
),
presence=EventFilter(
not_types=[EventType.PRESENCE],
state=StateFilter(
lazy_load_members=True,
),
)
),
presence=EventFilter(
not_types=[EventType.PRESENCE],
),
)
await self.update()
)
await self.update()
# if self.crypto:
# await self._start_crypto()
self.start_sync()
Expand Down
11 changes: 9 additions & 2 deletions menuflow/nodes/invite_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
from datetime import datetime
from typing import Dict

from menuflow.room import Room
import mautrix.errors.request

from ..db.room import RoomState
from ..repository import InviteUser as InviteUserModel
from ..room import Room
from .switch import Switch


Expand All @@ -31,7 +32,13 @@ async def _update_menu(self, case_id: str):

async def run(self):
# Invite users to a room.
await self.room.matrix_client.invite_user(self.room.room_id, self.invitee)
try:
await self.room.matrix_client.invite_user(self.room.room_id, self.invitee)
except mautrix.errors.request.MForbidden as e:
self.log.error(e)
await self._update_menu("join")
return

await self.room.update_menu(self.id, RoomState.INVITE)

loop = get_running_loop()
Expand Down
7 changes: 6 additions & 1 deletion menuflow/room.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from __future__ import annotations

import json
from asyncio import Future
from asyncio import Future, Lock
from collections import defaultdict
from logging import getLogger
from typing import Any, Dict, cast

from mautrix.client import Client as MatrixClient
from mautrix.types import EventType, RoomID, StateEventContent
from mautrix.util.async_getter_lock import async_getter_lock
from mautrix.util.logging import TraceLogger

from .config import Config
Expand All @@ -18,6 +20,7 @@
class Room(DBRoom):
by_room_id: Dict[RoomID, "Room"] = {}
pending_invites: Dict[RoomID, Future] = {}
_async_get_locks: dict[Any, Lock] = defaultdict(lambda: Lock())

config: Config
log: TraceLogger = getLogger("menuflow.room")
Expand All @@ -43,6 +46,7 @@ def _add_to_cache(self) -> None:
self.by_room_id[self.room_id] = self

async def clean_up(self):
self.log.info(f"Cleaning up room {self.room_id}")
await Util.cancel_task(task_name=self.room_id)
del self.by_room_id[self.room_id]
self.variables = "{}"
Expand All @@ -66,6 +70,7 @@ async def creator(self) -> Dict:
return created_room_event.get("creator")

@classmethod
@async_getter_lock
async def get_by_room_id(cls, room_id: RoomID, create: bool = True) -> "Room" | None:
"""It gets a room from the database, or creates one if it doesn't exist
Expand Down

0 comments on commit 299e863

Please sign in to comment.