async def _parse_sync_response(self, response): self.connection.sync_token = response["next_batch"] # Emit Invite events for every room in the invite list. for roomid, room in response["rooms"]["invite"].items(): # Process the invite list to extract the person who invited us. invite_event = [ e for e in room["invite_state"]["events"] if "invite" == e.get("content", {}).get("membership") ][0] sender = await self.get_nick(None, invite_event["sender"]) await self.opsdroid.parse( events.UserInvite( target=roomid, user_id=invite_event["sender"], user=sender, connector=self, raw_event=invite_event, )) for roomid, room in response["rooms"]["join"].items(): if "timeline" in room: for event in room["timeline"]["events"]: if event["sender"] != self.mxid: return await self._event_creator.create_event( event, roomid)
async def _parse_sync_response(self, response): self.connection.sync_token = response.next_batch # Emit Invite events for every room in the invite list. for roomid, roomInfo in response.rooms.invite.items(): # Process the invite list to extract the person who invited us. invite_event = [ e for e in roomInfo.invite_state if isinstance(e, nio.InviteMemberEvent) if e.membership == "invite" ][0] sender = await self.get_nick(None, invite_event.sender) await self.opsdroid.parse( events.UserInvite( target=roomid, user_id=invite_event.sender, user=sender, connector=self, raw_event=invite_event, ) ) for roomid, roomInfo in response.rooms.join.items(): if roomInfo.timeline: for event in roomInfo.timeline.events: if event.sender != self.mxid: if event.source["type"] == "m.room.member": event.source["content"] = event.content return await self._event_creator.create_event( event.source, roomid )
async def _parse_sync_response(self, response): self.connection.sync_token = response.next_batch # Emit Invite events for every room in the invite list. for roomid, roomInfo in response.rooms.invite.items(): # Process the invite list to extract the person who invited us. invite_event = [ e for e in roomInfo.invite_state if isinstance(e, nio.InviteMemberEvent) if e.membership == "invite" ][0] sender = await self.get_nick(None, invite_event.sender) yield events.UserInvite( target=roomid, user_id=invite_event.sender, user=sender, connector=self, raw_event=invite_event, ) for roomid, roomInfo in response.rooms.join.items(): if roomInfo.timeline: for event in roomInfo.timeline.events: if event.sender != self.mxid: if event.source["type"] == "m.room.member": event.source["content"] = event.content if isinstance(event, nio.MegolmEvent): try: # pragma: no cover event = self.connection.decrypt_event(event) except nio.exceptions.EncryptionError: # pragma: no cover _LOGGER.exception( f"Failed to decrypt event {event}") yield await self._event_creator.create_event( event.source, roomid)
async def test_respond_user_invite(self): event = events.UserInvite("@test:localhost", target="!test:localhost") with amock.patch(api_string.format("invite_user")) as patched_send: patched_send.return_value = asyncio.Future() patched_send.return_value.set_result({}) await self.connector.send(event) assert patched_send.called_once_with("#test:localhost", "@test:localhost")
async def test_already_in_room(self): with amock.patch(api_string.format("invite_user")) as patched_invite: patched_invite.side_effect = MatrixRequestError( 403, json.dumps({"error": "@neo.matrix.org is already in the room"}) ) await self.connector._send_user_invitation( events.UserInvite(target="!test:localhost", user_id="@neo:matrix.org") )
async def test_send_user_invitation(self): connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od) connector.slack_user.api_call = amock.CoroutineMock() await connector.send( events.UserInvite(user="******", user_id="UMcU42", target="an-existing-room")) connector.slack_user.api_call.assert_called_once_with( "conversations.invite", data={ "channel": "an-existing-room", "users": "UMcU42" }, )
async def test_send_user_invitation(send_event): event = events.UserInvite(user_id="U2345678901", target="room") payload, response = await send_event(CONVERSATIONS_INVITE, event) assert payload == {"channel": "room", "users": "U2345678901"} assert response["ok"]