diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index 5805190ce8..4c7bf2bef3 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -174,30 +174,25 @@ class MessageHandler(BaseHandler):
defer.returnValue(chunk)
@defer.inlineCallbacks
- def create_and_send_event(self, event_dict, ratelimit=True,
- token_id=None, txn_id=None, is_guest=False):
- """ Given a dict from a client, create and handle a new event.
+ def create_event(self, event_dict, token_id=None, txn_id=None):
+ """
+ Given a dict from a client, create a new event.
Creates an FrozenEvent object, filling out auth_events, prev_events,
etc.
Adds display names to Join membership events.
- Persists and notifies local clients and federation.
-
Args:
event_dict (dict): An entire event
+
+ Returns:
+ Tuple of created event (FrozenEvent), Context
"""
builder = self.event_builder_factory.new(event_dict)
self.validator.validate_new(builder)
- if ratelimit:
- self.ratelimit(builder.user_id)
- # TODO(paul): Why does 'event' not have a 'user' object?
- user = UserID.from_string(builder.user_id)
- assert self.hs.is_mine(user), "User must be our own: %s" % (user,)
-
if builder.type == EventTypes.Member:
membership = builder.content.get("membership", None)
if membership == Membership.JOIN:
@@ -216,6 +211,25 @@ class MessageHandler(BaseHandler):
event, context = yield self._create_new_client_event(
builder=builder,
)
+ defer.returnValue((event, context))
+
+ @defer.inlineCallbacks
+ def send_event(self, event, context, ratelimit=True, is_guest=False):
+ """
+ Persists and notifies local clients and federation of an event.
+
+ Args:
+ event (FrozenEvent) the event to send.
+ context (Context) the context of the event.
+ ratelimit (bool): Whether to rate limit this send.
+ is_guest (bool): Whether the sender is a guest.
+ """
+ user = UserID.from_string(event.sender)
+
+ assert self.hs.is_mine(user), "User must be our own: %s" % (user,)
+
+ if ratelimit:
+ self.ratelimit(event.sender)
if event.is_state():
prev_state = context.current_state.get((event.type, event.state_key))
@@ -229,7 +243,7 @@ class MessageHandler(BaseHandler):
if event.type == EventTypes.Member:
member_handler = self.hs.get_handlers().room_member_handler
- yield member_handler.change_membership(event, context, is_guest=is_guest)
+ yield member_handler.send_membership_event(event, context, is_guest=is_guest)
else:
yield self.handle_new_client_event(
event=event,
@@ -241,6 +255,25 @@ class MessageHandler(BaseHandler):
with PreserveLoggingContext():
presence.bump_presence_active_time(user)
+ @defer.inlineCallbacks
+ def create_and_send_event(self, event_dict, ratelimit=True,
+ token_id=None, txn_id=None, is_guest=False):
+ """
+ Creates an event, then sends it.
+
+ See self.create_event and self.send_event.
+ """
+ event, context = yield self.create_event(
+ event_dict,
+ token_id=token_id,
+ txn_id=txn_id
+ )
+ yield self.send_event(
+ event,
+ context,
+ ratelimit=ratelimit,
+ is_guest=is_guest
+ )
defer.returnValue(event)
@defer.inlineCallbacks
|