async def test_send_reaction(self):
        message = events.Message(
            "hello",
            event_id="$11111",
            connector=self.connector,
            target="!test:localhost",
        )
        reaction = events.Reaction("⭕")
        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(reaction)

                content = {
                    "m.relates_to": {
                        "rel_type": "m.annotation",
                        "event_id": "$11111",
                        "key": reaction.emoji,
                    }
                }

                assert patched_send.called_once_with("!test:localhost",
                                                     "m.reaction", content)
Beispiel #2
0
async def twim_bot(opsdroid, config, message):
    """
    React to a TWIM post.

    Check the contents of the message then put it in the opsdroid memory.
    """
    if isinstance(message, events.EditedMessage):
        return

    # If the message starts with TWIM and it's a reply then we use the parent event.
    if isinstance(message, events.Reply):
        message = message.linked_event

    post = await process_twim_event(opsdroid, message.target, message)
    _LOGGER.debug(f"Processed TWIM event, got: {post}")

    content = list(post.values())[0]
    nick = content['nick']

    try:
        await message.respond(
            events.Reaction(MAGIC_EMOJI + VARIATION_SELECTOR_16))
    except MatrixException:
        _LOGGER.error("Failed to react to submission with magic emoji.")
        pass

    # Send the update to the echo room.
    if "echo" in message.connector.rooms:
        echo_event_id = await message.respond(
            events.Message(format_update(post), target="echo"))
        echo_event_id = echo_event_id.event_id
        content['echo_event_id'] = echo_event_id

    await add_post_to_memory(opsdroid, message.target, post)
Beispiel #3
0
async def test_send_reaction_invalid_name(send_event):
    message = events.Message(
        text="linked text",
        target="room",
        event_id="1582838099.000601",
        raw_event={"ts": 0},
    )
    event = events.Reaction("NOT_EMOJI", target=message.target, linked_event=message)
    await send_event(("/reactions.add",), event)
Beispiel #4
0
async def test_send_reaction_unknown_error(send_event):
    message = events.Message(
        text="linked text",
        target="room",
        event_id="1582838099.000601",
        raw_event={"ts": 0},
    )
    event = events.Reaction("NOT_EMOJI", target=message.target, linked_event=message)
    with pytest.raises(SlackApiError):
        _, response = await send_event(("/reactions.add",), event)
        assert not response["ok"]
 async def test_react(self):
     with OpsDroid() as opsdroid:
         mock_connector = Connector(
             {"name": "shell", "thinking-delay": 2, "type": "connector"},
             opsdroid=opsdroid,
         )
         with amock.patch("asyncio.sleep") as mocksleep:
             message = events.Message(
                 "Hello world", "user", "default", mock_connector
             )
             with self.assertRaises(TypeError):
                 await message.respond(events.Reaction("emoji"))
             self.assertTrue(mocksleep.called)
    async def test_react_unknown_error(self):

        connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od)
        connector.slack.api_call = amock.CoroutineMock(
            side_effect=slack.errors.SlackApiError("unknown", "unknown"))
        with self.assertRaises(slack.errors.SlackApiError):
            prev_message = events.Message(
                text="test",
                user="******",
                target="room",
                connector=connector,
                raw_event={"ts": 0},
            )
            await prev_message.respond(events.Reaction("😀"))
 async def test_react(self):
     connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od)
     connector.slack.api_call = amock.CoroutineMock()
     prev_message = events.Message(
         text="test",
         user="******",
         target="room",
         connector=connector,
         raw_event={"ts": 0},
     )
     await prev_message.respond(events.Reaction("😀"))
     self.assertTrue(connector.slack.api_call)
     self.assertEqual(connector.slack.api_call.call_args[1]["data"]["name"],
                      "grinning_face")
Beispiel #8
0
 async def create_reaction(self, event, roomid):
     """Send a Reaction event."""
     parent_event_id = event["content"]["m.relates_to"]["event_id"]
     parent_event = await self.create_event_from_eventid(parent_event_id, roomid)
     return events.Reaction(
         emoji=event["content"]["m.relates_to"]["key"],
         user=await self.connector.get_nick(roomid, event["sender"]),
         user_id=event["sender"],
         target=roomid,
         connector=self.connector,
         event_id=event["event_id"],
         linked_event=parent_event,
         raw_event=event,
     )
    async def test_react_invalid_name(self):

        connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od)
        connector.slack.api_call = amock.CoroutineMock(
            side_effect=SlackApiError("invalid_name", "invalid_name"))
        prev_message = events.Message(
            text="test",
            user="******",
            target="room",
            connector=connector,
            raw_event={"ts": 0},
        )
        await prev_message.respond(events.Reaction("😀"))
        self.assertLogs("_LOGGER", "warning")
Beispiel #10
0
async def test_send_reaction(send_event, connector):
    message = events.Message(
        text="linked text",
        target="room",
        event_id="1582838099.000601",
        raw_event={"ts": 0},
    )
    event = events.Reaction("😀", target=message.target, linked_event=message)
    payload, response = await send_event(REACTIONS_ADD, event)
    assert payload == {
        "channel": "room",
        "name": "grinning_face",
        "timestamp": "1582838099.000601",
    }
    assert response["ok"]
Beispiel #11
0
 async def test_react(self):
     with OpsDroid() as opsdroid:
         mock_connector = Connector(
             {
                 'name': 'shell',
                 'thinking-delay': 2,
                 'type': 'connector',
             },
             opsdroid=opsdroid)
         with amock.patch('asyncio.sleep') as mocksleep:
             message = events.Message("Hello world", "user", "default",
                                      mock_connector)
             with self.assertRaises(TypeError):
                 await message.respond(events.Reaction("emoji"))
             self.assertTrue(mocksleep.called)