Exemple #1
0
    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)
Exemple #2
0
    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
                        )
Exemple #3
0
    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)
Exemple #4
0
 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")
Exemple #5
0
    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"
         },
     )
Exemple #7
0
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"]