示例#1
0
async def display_remove_user(db: DatabaseManager, id_discord_server: int, bot: Bot, name: str) -> str:
    """ Remove user from data.json """
    if not await db.user_exists(id_discord_server, name):
        return add_emoji(bot, f'User {name} is not in team', emoji5)
    else:
        await db.delete_user(id_discord_server, name)
        return add_emoji(bot, f'User {name} successfully removed from team', emoji2)
示例#2
0
async def display_add_user(db: DatabaseManager, id_discord_server: int, bot: Bot, name: str) -> str:
    """ Check if user exist in RootMe """
    all_users = await search_rootme_user(name)
    if not all_users:
        return add_emoji(bot, f'RootMe profile for {name} can\'t be established', emoji3)

    if len(all_users) > 1:
        tosend = f'Several users exists with the following username: "******"\nYou might want to choose between these:\n'
        all_users = all_users[:10]  # select top 10
        """
        all_users_usernames = [user['username'] for user in all_users]
        if len(list(set(all_users_usernames))) == 1:  # same username with different id_user
            for user in all_users:
                tosend += f'• {user["username"]}-{user["id_user"]} (Score: {user["score"]})\n'
        else:
            for user in all_users:
                tosend += f'• {user["username"]} (Score: {user["score"]})\n'
        """
        for user in all_users:
            tosend += f'• {user["username"]}-{user["id_user"]} (Score: {user["score"]})\n'
        return add_emoji(bot, tosend, emoji3)

    """ Add user to database """
    user = all_users[0]
    if await db.user_exists(id_discord_server, user['username']):
        return add_emoji(bot, f'User "{name}" already exists in team', emoji5)
    else:
        await db.create_user(
            id_discord_server, user['id_user'], user['username'], user['score'], user['number_challenge_solved']
        )
        return add_emoji(bot, f'User {user["username"]} successfully added in team', emoji2)
示例#3
0
async def display_lang_check(db: DatabaseManager, id_discord_server: int,
                             bot: Bot, lang: str) -> Tuple[str, bool]:
    if lang not in LANGS:
        return add_emoji(bot,
                         f'You need to choose fr/en/de/es as <lang> argument',
                         emoji3), False
    old_lang = await db.get_server_language(id_discord_server)
    if old_lang == lang:
        return add_emoji(bot,
                         f'"{lang}" is already the current language used.',
                         emoji3), False
    return add_emoji(
        bot,
        f'Converting data from "{old_lang}" to "{lang}" language, please wait...',
        emoji2), True
示例#4
0
async def display_reset_database(db: DatabaseManager, id_discord_server: int, bot: Bot) -> str:
    """ Reset discord database """
    users = await db.select_users(id_discord_server)
    usernames = [user['rootme_username'] for user in users]
    for name in usernames:
        await db.delete_user(id_discord_server, name)
    return add_emoji(bot, f'Database has been successfully reset', emoji2)
示例#5
0
def display_problem(db: Database, context: commands.context.Context,
                    challenge_selected: str) -> str:
    if not database_data.challenge_exists(db.session, db.tables,
                                          challenge_selected):
        return f'Challenge {challenge_selected} does not exists.'

    discord_users = database_data.get_authors_challenge(
        db.session, db.tables, challenge_selected)
    if not discord_users:
        to_send = f'Cannot find authors for challenge "{challenge_selected}".'
        return to_send

    discord_users = [
        f'{user_name}#{user_id}' for (user_name, user_id) in discord_users
    ]
    discord_members = []
    for discord_user in discord_users:
        discord_members += [
            discord.utils.find(lambda u: discord_user == str(u),
                               context.message.guild.members)
        ]
    discord_members = [member.mention for member in discord_members if member]
    if not discord_members:
        to_send = f'Cannot find authors for challenge "{challenge_selected}".'
        return to_send
    to_send = 'Ping: ' + ' | '.join(discord_members)
    to_send = add_emoji(context.bot, to_send, 'open_mouth')
    return to_send
示例#6
0
async def display_add_user(db: DatabaseManager, id_discord_server: int,
                           bot: Bot, name: str) -> str:
    """ Check if user exist in RootMe """
    lang = await db.get_server_language(id_discord_server)
    user_exists = await user_rootme_exists(name, lang)
    if not user_exists:
        return add_emoji(bot,
                         f'RootMe profile for {name} can\'t be established',
                         emoji3)
    """ Add user to database """
    if await db.user_exists(id_discord_server, name):
        return add_emoji(bot, f'User {name} already exists in team', emoji5)
    else:
        last_challenge_solved = await get_last_challenge(name, lang)
        await db.create_user(id_discord_server,
                             name,
                             last_challenge_solved=last_challenge_solved)
        return add_emoji(bot, f'User {name} successfully added in team',
                         emoji2)
示例#7
0
async def display_lang(db: DatabaseManager, id_discord_server: int, bot: Bot,
                       lang: str) -> str:
    users = await db.select_users(id_discord_server)
    usernames = [user['rootme_username'] for user in users]
    for name in usernames:
        last_challenge_solved = await get_last_challenge(name, lang)
        await db.update_user_last_challenge(id_discord_server, name,
                                            last_challenge_solved)
    await db.update_server_language(id_discord_server, lang)
    return add_emoji(bot, f'LANG successfully updated to "{lang}"', emoji2)
示例#8
0
async def display_remain(db: DatabaseManager,
                         id_discord_server: int,
                         bot: Bot,
                         username: str,
                         category: Optional[str] = None) -> Optional[str]:
    if not await db.user_exists(id_discord_server, username):
        return add_emoji(bot, f'User {username} is not in team', emoji5)

    lang = await db.get_server_language(id_discord_server)
    category_data = await get_category(category, lang)
    if category is not None and category_data is None:
        tosend = f'Category {category} does not exists.'
        return add_emoji(bot, tosend, emoji3)

    num_success, num_tot = await get_remain(username, lang, category=category)
    remain = num_tot - num_success
    if category is None:
        if remain == 0:
            tosend = f'{username} solved all challenges from all categories'
            return add_emoji(bot, tosend, emoji2)
        else:
            tosend = f'{username} has to solve {remain} challenge(s) to complete all categories'
            return add_emoji(bot, tosend, emoji5)
    else:
        if remain == 0:
            tosend = f'{username} solved all challenges from {category} category'
            return add_emoji(bot, tosend, emoji2)
        else:
            tosend = f'{username} has to solve {remain} challenge(s) to complete {category} category'
            return add_emoji(bot, tosend, emoji5)