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_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)
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