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