async def test_get_first_emoji_from_str():
    await dpytest.message(KoalaBot.COMMAND_PREFIX + "store_ctx")
    ctx: commands.Context = utils_cog.get_last_ctx()
    config: dpytest.RunnerConfig = dpytest.get_config()
    guild: discord.Guild = config.guilds[0]
    guild_emoji = utils.fake_guild_emoji(guild)
    guild_emoji = discord.Emoji(guild=guild,
                                state=None,
                                data={
                                    'name': "AAA",
                                    'image': None,
                                    'id': dpyfactory.make_id(),
                                    'require_colons': True,
                                    'managed': False
                                })
    guild._state.store_emoji(guild=guild,
                             data={
                                 'name': "AAA",
                                 'image': None,
                                 'id': dpyfactory.make_id(),
                                 'require_colons': True,
                                 'managed': False
                             })
    assert guild_emoji in guild.emojis

    author: discord.Member = config.members[0]
    channel: discord.TextChannel = guild.text_channels[0]
    msg: discord.Message = dpytest.back.make_message(str(guild_emoji), author,
                                                     channel)
    result = await rfr_cog.get_first_emoji_from_str(ctx, msg.content)
    print(result)
    assert isinstance(result, discord.Emoji), msg.content
    assert guild_emoji == result
Example #2
0
async def add_fake_guild_to_db(id=-1):
    if id == 9999:
        return -1
    if id == -1:
        id = dpyfactory.make_id()
    DBManager.remove_guild_welcome_message(id)
    DBManager.db_execute_commit(
        f"INSERT INTO GuildWelcomeMessages (guild_id, welcome_message) VALUES ({id}, 'fake guild welcome message');")
    return id
Example #3
0
async def add_fake_guild_to_db(id=-1):
    with session_manager() as session:
        if id == 9999:
            return -1
        if id == -1:
            id = dpyfactory.make_id()
        intro_db.remove_guild_welcome_message(id)
        session.add(GuildWelcomeMessages(guild_id=id, welcome_message='fake guild welcome message'))
        session.commit()
        return id
Example #4
0
def fake_guild_role(guild: discord.Guild) -> discord.Role:
    fake_role = discord.Role(guild=guild,
                             state=None,
                             data={
                                 'id': dpyfactory.make_id(),
                                 'name': fake_custom_emoji_name_str(),
                                 'mentionable': True,
                                 'hoist': True,
                                 'managed': False,
                                 'colour': random.randint(0, 16777215),
                                 'permissions': 8
                             })
    guild._add_role(fake_role)
    return fake_role
Example #5
0
 def __init__(self, name="FakeUser#0001", id=-1, all_permissions=False):
     """
     Initialises class variables and creates a random id if not specified
     :param name: the name of the user including identifier (e.g. KoalaBotUK#1075)
     :param id: The discord ID of the user
     :param all_permissions: If the user should be given all permissions (admin etc) or none
     :param roles: The role IDs of the user's roles
     """
     self.name = name
     if id == -1:
         self.id = dpyfactory.make_id()
     else:
         self.id = id
     self.allPermissions = all_permissions
Example #6
0
def fake_id_str() -> str:
    """
    Creates a fake id string, e.g. message ID, role ID, etc.
    :return:
    """
    return str(dpyfactory.make_id())
Example #7
0
def fake_role_mention() -> str:
    """
    Creates a fake role mention string.
    :return:
    """
    return "<@&" + str(dpyfactory.make_id()) + ">"
async def test_rfr_db_functions_rfr_message_emoji_roles():
    guild: discord.Guild = dpytest.get_config().guilds[0]
    channel: discord.TextChannel = dpytest.get_config().channels[0]
    msg_id = dpyfactory.make_id()
    DBManager.add_rfr_message(guild.id, channel.id, msg_id)
    guild_rfr_message = independent_get_guild_rfr_message()[0]
    expected_full_list: List[Tuple[int, str, int]] = []
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    # 1 unicode, 1 role
    fake_emoji_1 = utils.fake_unicode_emoji()
    fake_role_id_1 = dpyfactory.make_id()
    expected_full_list.append((1, fake_emoji_1, fake_role_id_1))
    DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_1,
                                         fake_role_id_1)
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(1) == expected_full_list
    assert independent_get_rfr_message_emoji_role(
        guild_rfr_message[3], fake_emoji_1, fake_role_id_1) == [
            DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_1,
                                            fake_role_id_1)
        ]
    # 1 unicode, 1 custom, trying to get same role
    fake_emoji_2 = utils.fake_custom_emoji_str_rep()
    DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_2,
                                         fake_role_id_1)
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(
        guild_rfr_message[3]) == DBManager.get_rfr_message_emoji_roles(
            guild_rfr_message[3])
    assert [
        DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_2,
                                        fake_role_id_1)
    ] == [None]
    # 2 roles, with 1 emoji trying to give both roles
    fake_role_id_2 = dpyfactory.make_id()
    DBManager.add_rfr_message_emoji_role(guild_rfr_message[3], fake_emoji_1,
                                         fake_role_id_2)
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(
        guild_rfr_message[3]) == DBManager.get_rfr_message_emoji_roles(
            guild_rfr_message[3])
    assert [
        DBManager.get_rfr_reaction_role(guild_rfr_message[3], fake_emoji_1,
                                        fake_role_id_2)
    ] == [None]

    # 2 roles, 2 emojis, 1 message. split between them
    fake_emoji_2 = utils.fake_custom_emoji_str_rep()
    fake_role_id_2 = dpyfactory.make_id()
    expected_full_list.append((1, fake_emoji_2, fake_role_id_2))
    DBManager.add_rfr_message_emoji_role(*expected_full_list[1])
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(1, fake_emoji_1) == [
        (1, fake_emoji_1, fake_role_id_1)
    ]
    assert independent_get_rfr_message_emoji_role(1, fake_emoji_2) == [
        (1, fake_emoji_2, fake_role_id_2)
    ]
    assert independent_get_rfr_message_emoji_role(
        1, fake_emoji_1)[0][2] == DBManager.get_rfr_reaction_role_by_emoji_str(
            1, fake_emoji_1)
    assert independent_get_rfr_message_emoji_role(
        1) == DBManager.get_rfr_message_emoji_roles(1)
    assert independent_get_rfr_message_emoji_role(
        1, role_id=fake_role_id_2)[0][2] == get_rfr_reaction_role_by_role_id(
            emoji_role_id=1, role_id=fake_role_id_2)

    # 2 roles 2 emojis, 2 messages. duplicated messages
    msg2_id = dpyfactory.make_id()
    DBManager.add_rfr_message(guild.id, channel.id, msg2_id)
    assert independent_get_guild_rfr_message() == [
        guild_rfr_message, (guild.id, channel.id, msg2_id, 2)
    ]
    guild_rfr_message_2 = independent_get_guild_rfr_message()[1]
    DBManager.add_rfr_message_emoji_role(guild_rfr_message_2[3], fake_emoji_1,
                                         fake_role_id_1)
    DBManager.add_rfr_message_emoji_role(guild_rfr_message_2[3], fake_emoji_2,
                                         fake_role_id_2)
    expected_full_list.extend([
        (guild_rfr_message_2[3], fake_emoji_1, fake_role_id_1),
        (guild_rfr_message_2[3], fake_emoji_2, fake_role_id_2)
    ])
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(
        2) == DBManager.get_rfr_message_emoji_roles(2)
    assert independent_get_rfr_message_emoji_role(
        1) == DBManager.get_rfr_message_emoji_roles(1)

    # 2 roles 2 emojis 2 messages. Swapped
    msg3_id = dpyfactory.make_id()
    DBManager.add_rfr_message(guild.id, channel.id, msg3_id)
    assert independent_get_guild_rfr_message() == [
        guild_rfr_message, (guild.id, channel.id, msg2_id, 2),
        (guild.id, channel.id, msg3_id, 3)
    ]
    guild_rfr_message_3 = independent_get_guild_rfr_message()[2]
    DBManager.add_rfr_message_emoji_role(guild_rfr_message_3[3], fake_emoji_1,
                                         fake_role_id_2)
    DBManager.add_rfr_message_emoji_role(guild_rfr_message_3[3], fake_emoji_2,
                                         fake_role_id_1)
    expected_full_list.extend([
        (guild_rfr_message_3[3], fake_emoji_1, fake_role_id_2),
        (guild_rfr_message_3[3], fake_emoji_2, fake_role_id_1)
    ])
    assert independent_get_rfr_message_emoji_role() == expected_full_list
    assert independent_get_rfr_message_emoji_role(
        3) == DBManager.get_rfr_message_emoji_roles(3)
    assert [
        x[2]
        for x in independent_get_rfr_message_emoji_role(emoji_raw=fake_emoji_1)
    ] == [
        DBManager.get_rfr_reaction_role_by_emoji_str(1, fake_emoji_1),
        DBManager.get_rfr_reaction_role_by_emoji_str(2, fake_emoji_1),
        DBManager.get_rfr_reaction_role_by_emoji_str(3, fake_emoji_1)
    ]
    assert [
        x[2]
        for x in independent_get_rfr_message_emoji_role(emoji_raw=fake_emoji_2)
    ] == [
        DBManager.get_rfr_reaction_role_by_emoji_str(1, fake_emoji_2),
        DBManager.get_rfr_reaction_role_by_emoji_str(2, fake_emoji_2),
        DBManager.get_rfr_reaction_role_by_emoji_str(3, fake_emoji_2)
    ]
    # test deletion works from rfr message
    rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(3)
    DBManager.remove_rfr_message(guild.id, channel.id, msg3_id)
    for row in rfr_message_emoji_roles:
        assert row not in independent_get_rfr_message_emoji_role(
        ), independent_get_guild_rfr_message()
    # test deleting just emoji role combos
    rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(2)
    DBManager.remove_rfr_message_emoji_roles(2)
    for row in rfr_message_emoji_roles:
        assert row not in independent_get_rfr_message_emoji_role(
        ), independent_get_guild_rfr_message()
    # test deleteing specific
    rfr_message_emoji_roles = independent_get_rfr_message_emoji_role(1)
    DBManager.remove_rfr_message_emoji_role(
        1, emoji_raw=rfr_message_emoji_roles[0][1])
    assert (rfr_message_emoji_roles[0][0], rfr_message_emoji_roles[0][1],
            rfr_message_emoji_roles[0][2]
            ) not in independent_get_rfr_message_emoji_role()
    DBManager.remove_rfr_message_emoji_role(
        1, role_id=rfr_message_emoji_roles[1][2])
    assert (rfr_message_emoji_roles[1][0], rfr_message_emoji_roles[1][1],
            rfr_message_emoji_roles[1][2]
            ) not in independent_get_rfr_message_emoji_role()
async def test_rfr_db_functions_guild_rfr_messages():
    guild: discord.Guild = dpytest.get_config().guilds[0]
    channel: discord.TextChannel = dpytest.get_config().channels[0]
    msg_id = dpyfactory.make_id()
    # Test when no messages exist
    expected_full_list: List[Tuple[int, int, int, int]] = []
    assert independent_get_guild_rfr_message(guild.id, channel.id,
                                             msg_id) == expected_full_list
    assert independent_get_guild_rfr_message() == expected_full_list
    # Test on adding first message, 1 message, 1 channel, 1 guild
    DBManager.add_rfr_message(guild.id, channel.id, msg_id)
    expected_full_list.append((guild.id, channel.id, msg_id, 1))
    assert independent_get_guild_rfr_message() == expected_full_list
    assert independent_get_guild_rfr_message(
        guild.id, channel.id, msg_id) == [expected_full_list[0]]
    # 2 guilds, 1 channel each, 2 messages
    guild2: discord.Guild = dpytest.back.make_guild("TestGuild2")
    channel2: discord.TextChannel = dpytest.back.make_text_channel(
        "TestGuild2Channel1", guild2)
    msg_id = dpyfactory.make_id()
    dpytest.get_config().guilds.append(guild2)
    DBManager.add_rfr_message(guild2.id, channel2.id, msg_id)
    expected_full_list.append((guild2.id, channel2.id, msg_id, 2))
    assert independent_get_guild_rfr_message(
        guild2.id, channel2.id, msg_id) == [expected_full_list[1]]
    assert independent_get_guild_rfr_message(
        guild2.id, channel2.id,
        msg_id)[0] == DBManager.get_rfr_message(guild2.id, channel2.id, msg_id)
    assert independent_get_guild_rfr_message() == expected_full_list
    # 1 guild, 2 channels with 1 message each
    guild1channel2: discord.TextChannel = dpytest.back.make_text_channel(
        "TestGuild1Channel2", guild)
    msg_id = dpyfactory.make_id()
    DBManager.add_rfr_message(guild.id, guild1channel2.id, msg_id)
    expected_full_list.append((guild.id, guild1channel2.id, msg_id, 3))
    assert independent_get_guild_rfr_message(
        guild.id, guild1channel2.id, msg_id) == [expected_full_list[2]]
    assert independent_get_guild_rfr_message(
        guild.id, guild1channel2.id,
        msg_id)[0] == DBManager.get_rfr_message(guild.id, guild1channel2.id,
                                                msg_id)
    assert independent_get_guild_rfr_message() == expected_full_list
    assert independent_get_guild_rfr_message(
        guild.id) == [expected_full_list[0], expected_full_list[2]]
    # 1 guild, 1 channel, with 2 messages
    msg_id = dpyfactory.make_id()
    DBManager.add_rfr_message(guild.id, channel.id, msg_id)
    expected_full_list.append((guild.id, channel.id, msg_id, 4))
    assert independent_get_guild_rfr_message(
        guild.id, channel.id, msg_id) == [expected_full_list[3]]
    assert independent_get_guild_rfr_message(
        guild.id, channel.id,
        msg_id)[0] == DBManager.get_rfr_message(guild.id, channel.id, msg_id)
    assert independent_get_guild_rfr_message() == expected_full_list
    assert independent_get_guild_rfr_message(guild.id, channel.id) == [
        expected_full_list[0], expected_full_list[3]
    ]
    # remove all messages
    guild_rfr_messages = independent_get_guild_rfr_message()
    for guild_rfr_message in guild_rfr_messages:
        assert guild_rfr_message in guild_rfr_messages
        DBManager.remove_rfr_message(guild_rfr_message[0],
                                     guild_rfr_message[1],
                                     guild_rfr_message[2])
        assert guild_rfr_message not in independent_get_guild_rfr_message()
    assert independent_get_guild_rfr_message() == []