summaryrefslogtreecommitdiff
path: root/synapse/module_api/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/module_api/__init__.py')
-rw-r--r--synapse/module_api/__init__.py54
1 files changed, 42 insertions, 12 deletions
diff --git a/synapse/module_api/__init__.py b/synapse/module_api/__init__.py
index 73f92d2d..a8ad575f 100644
--- a/synapse/module_api/__init__.py
+++ b/synapse/module_api/__init__.py
@@ -47,12 +47,14 @@ from synapse.events.spamcheck import (
CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK,
CHECK_REGISTRATION_FOR_SPAM_CALLBACK,
CHECK_USERNAME_FOR_SPAM_CALLBACK,
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK,
USER_MAY_CREATE_ROOM_ALIAS_CALLBACK,
USER_MAY_CREATE_ROOM_CALLBACK,
USER_MAY_INVITE_CALLBACK,
USER_MAY_JOIN_ROOM_CALLBACK,
USER_MAY_PUBLISH_ROOM_CALLBACK,
USER_MAY_SEND_3PID_INVITE_CALLBACK,
+ SpamChecker,
)
from synapse.events.third_party_rules import (
CHECK_CAN_DEACTIVATE_USER_CALLBACK,
@@ -138,6 +140,7 @@ are loaded into Synapse.
"""
PRESENCE_ALL_USERS = PresenceRouter.ALL_USERS
+NOT_SPAM = SpamChecker.NOT_SPAM
__all__ = [
"errors",
@@ -146,6 +149,7 @@ __all__ = [
"respond_with_html",
"run_in_background",
"cached",
+ "NOT_SPAM",
"UserID",
"DatabasePool",
"LoggingTransaction",
@@ -190,6 +194,7 @@ class ModuleApi:
self._store: Union[
DataStore, "GenericWorkerSlavedStore"
] = hs.get_datastores().main
+ self._storage_controllers = hs.get_storage_controllers()
self._auth = hs.get_auth()
self._auth_handler = auth_handler
self._server_name = hs.hostname
@@ -234,6 +239,9 @@ class ModuleApi:
self,
*,
check_event_for_spam: Optional[CHECK_EVENT_FOR_SPAM_CALLBACK] = None,
+ should_drop_federated_event: Optional[
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK
+ ] = None,
user_may_join_room: Optional[USER_MAY_JOIN_ROOM_CALLBACK] = None,
user_may_invite: Optional[USER_MAY_INVITE_CALLBACK] = None,
user_may_send_3pid_invite: Optional[USER_MAY_SEND_3PID_INVITE_CALLBACK] = None,
@@ -254,6 +262,7 @@ class ModuleApi:
"""
return self._spam_checker.register_callbacks(
check_event_for_spam=check_event_for_spam,
+ should_drop_federated_event=should_drop_federated_event,
user_may_join_room=user_may_join_room,
user_may_invite=user_may_invite,
user_may_send_3pid_invite=user_may_send_3pid_invite,
@@ -903,7 +912,7 @@ class ModuleApi:
The filtered state events in the room.
"""
state_ids = yield defer.ensureDeferred(
- self._store.get_filtered_current_state_ids(
+ self._storage_controllers.state.get_current_state_ids(
room_id=room_id, state_filter=StateFilter.from_types(types)
)
)
@@ -1139,7 +1148,10 @@ class ModuleApi:
)
async def sleep(self, seconds: float) -> None:
- """Sleeps for the given number of seconds."""
+ """Sleeps for the given number of seconds.
+
+ Added in Synapse v1.49.0.
+ """
await self._clock.sleep(seconds)
@@ -1278,20 +1290,16 @@ class ModuleApi:
# regardless of their state key
]
"""
+ state_filter = None
if event_filter:
# If a filter was provided, turn it into a StateFilter and retrieve a filtered
# view of the state.
state_filter = StateFilter.from_types(event_filter)
- state_ids = await self._store.get_filtered_current_state_ids(
- room_id,
- state_filter,
- )
- else:
- # If no filter was provided, get the whole state. We could also reuse the call
- # to get_filtered_current_state_ids above, with `state_filter = StateFilter.all()`,
- # but get_filtered_current_state_ids isn't cached and `get_current_state_ids`
- # is, so using the latter when we can is better for perf.
- state_ids = await self._store.get_current_state_ids(room_id)
+
+ state_ids = await self._storage_controllers.state.get_current_state_ids(
+ room_id,
+ state_filter,
+ )
state_events = await self._store.get_events(state_ids.values())
@@ -1419,6 +1427,28 @@ class ModuleApi:
user_id, spec, {"actions": actions}
)
+ async def get_monthly_active_users_by_service(
+ self, start_timestamp: Optional[int] = None, end_timestamp: Optional[int] = None
+ ) -> List[Tuple[str, str]]:
+ """Generates list of monthly active users and their services.
+ Please see corresponding storage docstring for more details.
+
+ Added in Synapse v1.61.0.
+
+ Arguments:
+ start_timestamp: If specified, only include users that were first active
+ at or after this point
+ end_timestamp: If specified, only include users that were first active
+ at or before this point
+
+ Returns:
+ A list of tuples (appservice_id, user_id)
+
+ """
+ return await self._store.get_monthly_active_users_by_service(
+ start_timestamp, end_timestamp
+ )
+
class PublicRoomListManager:
"""Contains methods for adding to, removing from and querying whether a room