コード例 #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)
コード例 #2
0
    async def test_send_reply(self):
        message = events.Message(
            "hello",
            event_id="$11111",
            connector=self.connector,
            target="!test:localhost",
        )
        reply = events.Reply("reply")
        with OpsDroid() as _:
            with amock.patch(
                    api_string.format("send_message_event")) as patched_send:
                patched_send.return_value = asyncio.Future()
                patched_send.return_value.set_result(None)

                await message.respond(reply)

                content = self.connector._get_formatted_message_body(
                    reply.text, msgtype="m.text")

                content["m.relates_to"] = {
                    "m.in_reply_to": {
                        "event_id": message.event_id
                    }
                }

                assert patched_send.called_once_with("!test:localhost",
                                                     "m.room.message", content)
コード例 #3
0
async def test_reply_to_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": 639974084,
        "message": {
            "message_id": 1272,
            "from": {
                "id": 639348,
                "is_bot": False,
                "first_name": "Fabio",
                "last_name": "Rosado",
                "username": "******",
                "language_code": "en",
            },
            "chat": {
                "id": 639348,
                "first_name": "Fabio",
                "last_name": "Rosado",
                "username": "******",
                "type": "private",
            },
            "date": 1603834922,
            "reply_to_message": {
                "message_id": 1271,
                "from": {
                    "id": 639348,
                    "is_bot": False,
                    "first_name": "Fabio",
                    "last_name": "Rosado",
                    "username": "******",
                    "language_code": "en",
                },
                "chat": {
                    "id": 63948,
                    "first_name": "Fabio",
                    "last_name": "Rosado",
                    "username": "******",
                    "type": "private",
                },
                "date": 1603834912,
                "text": "Hi",
            },
            "text": "This is a reply",
        },
    }

    reply_message = opsdroid_events.Reply("This is a reply", 639348,
                                          "FabioRosado", 63948)

    await connector.telegram_webhook_handler(mock_request)

    assert "This is a reply" in reply_message.text
    assert "FabioRosado" in reply_message.user
    assert reply_message.target == 63948