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)
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, )
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, }, )