Exemple #1
0
    async def create_message(self, event, roomid):
        """Send a Message event."""
        kwargs = dict(
            text=event["content"]["body"],
            user_id=event["sender"],
            user=await self.connector.get_nick(roomid, event["sender"]),
            target=roomid,
            connector=self.connector,
            event_id=event["event_id"],
            raw_event=event,
        )
        if "m.relates_to" in event["content"]:
            relates_to = event["content"]["m.relates_to"]
            # Detect an edit.
            if relates_to.get("rel_type", "") == "m.replace":
                kwargs["text"] = event["content"]["m.new_content"]["body"]
                kwargs["linked_event"] = await self.create_event_from_eventid(
                    relates_to["event_id"], roomid)
                return events.EditedMessage(**kwargs)
            # Detect a reply
            if relates_to.get("m.in_reply_to"):
                kwargs["text"] = trim_reply_fallback_text(kwargs["text"])
                kwargs["linked_event"] = await self.create_event_from_eventid(
                    relates_to["m.in_reply_to"]["event_id"], roomid)
                return events.Reply(**kwargs)

        return events.Message(**kwargs)
    async def test_send_edited_message(self):
        message = events.EditedMessage(
            text="New message",
            target="!test:localhost",
            linked_event=events.Message("hello", event_id="$hello"),
            connector=self.connector,
        )
        with amock.patch(api_string.format(
                "send_message_event")) as patched_send, OpsDroid() as _:
            patched_send.return_value = asyncio.Future()
            patched_send.return_value.set_result({})

            new_content = self.connector._get_formatted_message_body(
                message.text)
            content = {
                "msgtype": "m.text",
                "m.new_content": new_content,
                "body": f"* {new_content['body']}",
                "m.relates_to": {
                    "rel_type": "m.replace",
                    "event_id": message.linked_event.event_id,
                },
            }

            await self.connector.send(message)

            patched_send.assert_called_once_with(message.target,
                                                 "m.room.message", content)

            # Test linked event as event id
            message.linked_event = "$hello"

            await self.connector.send(message)

            patched_send.assert_called_with(message.target, "m.room.message",
                                            content)

            # Test responding to an edit
            await message.respond(events.EditedMessage("hello"))

            patched_send.assert_called_with(message.target, "m.room.message",
                                            content)
Exemple #3
0
async def test_edit_message(send_event, connector):
    linked_event = "1582838099.000600"

    event = events.EditedMessage(
        text="edited_message",
        user="******",
        target="room",
        connector=connector,
        linked_event=linked_event,
    )

    payload, response = await send_event(CHAT_UPDATE_MESSAGE, event)

    assert payload == {
        "channel": "room",
        "ts": "1582838099.000600",
        "text": "edited_message",
    }
    assert response["ok"]
    async def edit_message(self, event, channel):
        """Send an EditedMessage event."""
        user_name = await self._get_user_name(event["message"])

        if user_name is None:
            return

        _LOGGER.debug("Replacing userids in message with usernames")
        text = await self.connector.replace_usernames(event["message"]["text"])

        return events.EditedMessage(
            text,
            user=user_name,
            user_id=event["message"]["user"],
            target=event["channel"],
            connector=self.connector,
            event_id=event["ts"],
            linked_event=event["message"]["ts"],
            raw_event=event,
        )
Exemple #5
0
async def twim_edit(opsdroid, config, edit):
    """
    Update a stored TWIM post if an edit arrives.
    """
    twim = await opsdroid.memory.get("twim")
    if twim is None:
        return

    original_event_id = edit.linked_event.event_id
    if original_event_id in twim['twim']:
        post = twim['twim'][original_event_id]
        new_content = edit.raw_event['content']['m.new_content']
        body = new_content.get('formatted_body', new_content['body'])
        post['message'] = body

        await opsdroid.memory.put("twim", twim)

        if 'echo_event_id' in post:
            await opsdroid.send(
                events.EditedMessage(format_update({original_event_id: post}),
                                     target="echo",
                                     linked_event=post['echo_event_id']))
async def test_edited_message_event(opsdroid):
    connector = ConnectorTelegram(connector_config, opsdroid=opsdroid)

    mock_request = amock.CoroutineMock()
    mock_request.json = amock.CoroutineMock()
    mock_request.json.return_value = {
        "update_id": 639974040,
        "edited_message": {
            "message_id": 1247,
            "from": {
                "id": 6399348,
                "is_bot": False,
                "first_name": "Fabio",
                "last_name": "Rosado",
                "username": "******",
                "language_code": "en",
            },
            "chat": {
                "id": 6399348,
                "first_name": "Fabio",
                "last_name": "Rosado",
                "username": "******",
                "type": "private",
            },
            "date": 1603818326,
            "edit_date": 1603818330,
            "text": "hi",
        },
    }

    edited_message = opsdroid_events.EditedMessage("hi", 6399348, "Fabio",
                                                   6399348)

    await connector.telegram_webhook_handler(mock_request)

    assert "hi" in edited_message.text
    assert "Fabio" in edited_message.user
    assert edited_message.target == 6399348
    assert edited_message.user_id == 6399348
    async def test_edit_message(self):
        connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od)
        connector.slack.api_call = amock.CoroutineMock()
        linked_event = "1582838099.000600"

        edited_message = events.EditedMessage(
            text="edited_message",
            user="******",
            target="room",
            connector=connector,
            linked_event=linked_event,
        )

        await connector.send(edited_message)
        connector.slack.api_call.assert_called_once_with(
            "chat.update",
            data={
                "channel": "room",
                "ts": "1582838099.000600",
                "text": "edited_message",
                "as_user": False,
            },
        )