Beispiel #1
0
async def test_prompt_for_input_attachment(rfr_cog, utils_cog):
    config: dpytest.RunnerConfig = dpytest.get_config()
    author: discord.Member = config.members[0]
    guild: discord.Guild = config.guilds[0]
    channel: discord.TextChannel = guild.text_channels[0]
    await dpytest.message(koalabot.COMMAND_PREFIX + "store_ctx")
    ctx: commands.Context = utils_cog.get_last_ctx()
    await dpytest.empty_queue()
    attach: discord.Attachment = discord.Attachment(
        state=dpytest.back.get_state(),
        data=dpytest.back.facts.make_attachment_dict(
            "test.jpg",
            15112122,
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            height=1000,
            width=1000))
    message_dict = dpytest.back.facts.make_message_dict(channel,
                                                        author,
                                                        attachments=[attach])
    message: discord.Message = discord.Message(state=dpytest.back.get_state(),
                                               channel=channel,
                                               data=message_dict)
    with mock.patch('discord.client.Client.wait_for',
                    mock.AsyncMock(return_value=message)):
        result = await rfr_cog.prompt_for_input(ctx, "test")
        assert dpytest.verify().message().content(
            "Please enter test so I can progress further. I'll wait 60 seconds, don't worry."
        )
        assert isinstance(result, discord.Attachment)
        assert result.url == attach.url
Beispiel #2
0
    async def _test_deepfry(self, ctx: commands.Context) -> None:
        # Get !deepfry command
        deepfry_cmd = self.bot.get_command("deepfry")

        url = "https://cdn.discordapp.com/attachments/560503336013529091/566615384808095754/Gfw036Q.png"

        # Test command with URL argument
        print(f"Testing {self.pfix}deepfry with URL.")
        await self.do_test_command(ctx, deepfry_cmd, "-url", url)

        # Sleep between image uploads to be nice to Discord
        await asyncio.sleep(5)

        attachment = discord.Attachment(data={
            "filename": "Gfw036Q.png",
            "height": 715,
            "id": 666,
            "proxy_url":
            "https://media.discordapp.net/attachments/560503336013529091/566615384808095754/Gfw036Q.png",
            "size": 216770,
            "url": url,
            "width": 720
        },
                                        state=Mock(http=None))

        # Attach attachment to ctx.message
        ctx.message.attachments.append(attachment)

        # Test with message attachment
        print(f"Testing {self.pfix}deepfry with attachment.")
        await self.do_test_command(ctx, deepfry_cmd)
Beispiel #3
0
def make_attachment(filename, name=None, id_num=-1):
    if name is None:
        name = str(filename.name)
    if not filename.is_file():
        raise ValueError("Attachment must be a real file")
    size = filename.stat().st_size
    file_uri = filename.absolute().as_uri()
    return discord.Attachment(state=get_state(),
                              data=facts.make_attachment_dict(
                                  name, size, file_uri, file_uri, id_num))
Beispiel #4
0
def make_attachment(filename: pathlib.Path, name: typing.Optional[str] = None, id_num: int = -1) -> discord.Attachment:
    if name is None:
        name = str(filename.name)
    if not filename.is_file():
        raise ValueError("Attachment must be a real file")
    size = filename.stat().st_size
    file_uri = filename.absolute().as_uri()
    return discord.Attachment(
        state=get_state(),
        data=facts.make_attachment_dict(name, size, file_uri, file_uri, id_num)
    )
Beispiel #5
0
async def message(
        content: str,
        channel: typing.Union[_types.AnyChannel, int] = 0,
        member: typing.Union[discord.Member, int] = 0,
        attachments: typing.List[typing.Union[pathlib.Path, str]] = None
) -> discord.Message:
    """
        Fake a message being sent by some user to a channel.

    :param content: Content of the message
    :param channel: Channel to send to, or index into the config list
    :param member: Member sending the message, or index into the config list
    :param attachments: Message attachments to include, as file paths.
    :return: New message that was sent
    """
    if isinstance(channel, int):
        channel = _cur_config.channels[channel]
    if isinstance(member, int):
        member = _cur_config.members[member]
    import os
    if attachments is None:
        attachments = []
    attachments = [
        discord.Attachment(
            data={
                'id': counter.__next__(),
                'filename': os.path.basename(attachment),
                'size': 0,
                'url': attachment,
                'proxy_url': "",
                'height': 0,
                'width': 0
            },
            state=back.get_state()
        ) for attachment in attachments
    ]

    mes = back.make_message(content, member, channel, attachments=attachments)

    await run_all_events()

    if not error_queue.empty():
        err = await error_queue.get()
        raise err[1]

    return mes
Beispiel #6
0
async def test_rfr_edit_thumbnail_attach():
    config: dpytest.RunnerConfig = dpytest.get_config()
    guild: discord.Guild = config.guilds[0]
    channel: discord.TextChannel = guild.text_channels[0]
    embed: discord.Embed = discord.Embed(title="title",
                                         description="description")
    embed.set_thumbnail(
        url=
        "https://media.discordapp.net/attachments/611574654502699010/756152703801098280/IMG_20200917_150032.jpg"
    )
    message: discord.Message = await dpytest.message("rfr")
    attach: discord.Attachment = discord.Attachment(
        state=dpytest.back.get_state(),
        data=dpytest.back.facts.make_attachment_dict(
            "test.jpg",
            -1,
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            height=1000,
            width=1000,
            content_type="image/jpeg"))
    msg_id = message.id
    bad_attach = "something that's not an attachment"
    DBManager.add_rfr_message(guild.id, channel.id, msg_id)
    assert embed.thumbnail.url == "https://media.discordapp.net/attachments/611574654502699010/756152703801098280/IMG_20200917_150032.jpg"

    with mock.patch('koala.cogs.ReactForRole.get_rfr_message_from_prompts',
                    mock.AsyncMock(return_value=(message, channel))):
        with mock.patch('koala.cogs.ReactForRole.get_embed_from_message',
                        return_value=embed):
            with mock.patch('koala.cogs.ReactForRole.prompt_for_input',
                            return_value=attach):
                await dpytest.message("k!rfr edit image")
                assert embed.thumbnail.url == "https://media.discordapp.net/attachments/some_number/random_number/test.jpg"
            embed.set_thumbnail(
                url=
                "https://media.discordapp.net/attachments/611574654502699010/756152703801098280/IMG_20200917_150032.jpg"
            )
Beispiel #7
0
async def test_member_join(bot):
    """Dont use this in your code, it's just dummy test.
    Use verify_message() instead of 'get_message' and 'message.content'
    """
    guild = bot.guilds[0]
    author: discord.Member = guild.members[0]
    channel = guild.channels[0]
    attach: discord.Attachment = discord.Attachment(
        state=dpytest.back.get_state(),
        data=dpytest.back.facts.make_attachment_dict(
            "test.jpg",
            15112122,
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            "https://media.discordapp.net/attachments/some_number/random_number/test.jpg",
            height=1000,
            width=1000,
            content_type="image/jpeg"
        )
    )
    message_dict = dpytest.back.facts.make_message_dict(channel, author, attachments=[attach])
    try:
        message: discord.Message = discord.Message(state=dpytest.back.get_state(), channel=channel, data=message_dict)
    except Exception as err:
        pytest.fail(str(err))
Beispiel #8
0
    A MagicMock subclass to mock Context objects.

    Instances of this class will follow the specifications of `discord.ext.commands.Context`
    instances. For more information, see the `MockGuild` docstring.
    """
    spec_set = context_instance

    def __init__(self, **kwargs) -> None:
        super().__init__(**kwargs)
        self.bot = kwargs.get('bot', MockBot())
        self.guild = kwargs.get('guild', MockGuild())
        self.author = kwargs.get('author', MockMember())
        self.channel = kwargs.get('channel', MockTextChannel())


attachment_instance = discord.Attachment(data=unittest.mock.MagicMock(id=1),
                                         state=unittest.mock.MagicMock())


class MockAttachment(CustomMockMixin, unittest.mock.MagicMock):
    """
    A MagicMock subclass to mock Attachment objects.

    Instances of this class will follow the specifications of `discord.Attachment` instances. For
    more information, see the `MockGuild` docstring.
    """
    spec_set = attachment_instance


class MockMessage(CustomMockMixin, unittest.mock.MagicMock):
    """
    A MagicMock subclass to mock Message objects.