async def topcookies(cmd: SigmaCommand, message: discord.Message, args: list): value_name = 'Cookies' sort_key = 'Cookies' lb_icon = cmd.bot.user.avatar_url lb_category = 'Global' if args: if args[0].lower() == 'total': sort_key = 'Total' lb_category = 'Total' all_docs = await cmd.db[cmd.db.db_cfg.database ].Cookies.find({}).sort(sort_key, -1).limit(50).to_list(None) leader_docs = [] all_members = list(cmd.bot.get_all_members()) for data_doc in all_docs: user_value = data_doc.get(sort_key) or 0 user_object = discord.utils.find( lambda usr: usr.id == data_doc.get('UserID'), all_members) if user_object: leader_docs.append([user_object, user_value]) if len(leader_docs) >= 20: break table_data = [[clean_name(doc[0].name, 'Unknown')[:12], str(doc[1])] for doc in leader_docs] table_body = boop(table_data, ['User Name', value_name]) response = discord.Embed(color=await get_image_colors(lb_icon)) response.set_author(name=f'{lb_category} {value_name} Leaderboard', icon_url=lb_icon) response.description = f'```hs\n{table_body}\n```' await message.channel.send(embed=response)
async def topexperience(cmd: SigmaCommand, message: discord.Message, args: list): value_name = 'Experience' sort_key = 'global' lb_icon = cmd.bot.user.avatar_url lb_category = 'Global' if args: if args[0].lower() == 'local': sort_key = f'guilds.{message.guild.id}' lb_icon = message.guild.icon_url or lb_icon lb_category = message.guild.name elif args[0].lower() == 'total': sort_key = 'total' lb_category = 'Total' all_docs = await cmd.db[cmd.db.db_cfg.database].ExperienceSystem.find({}).sort(sort_key, -1).limit(50).to_list(None) leader_docs = [] all_members = list(cmd.bot.get_all_members()) for data_doc in all_docs: if sort_key == 'global' or sort_key == 'total': user_value = data_doc.get(sort_key) or 0 else: user_value = data_doc.get('guilds').get(str(message.guild.id)) or 0 user_level = int(user_value / 13266.85) user_object = discord.utils.find(lambda usr: usr.id == data_doc.get('UserID'), all_members) if user_object: leader_docs.append([user_object, user_level, user_value]) if len(leader_docs) >= 20: break table_data = [[clean_name(doc[0].name, 'Unknown')[:12], str(doc[1]), str(doc[2])] for doc in leader_docs] table_body = boop(table_data, ['User Name', 'Level', value_name]) response = discord.Embed(color=await get_image_colors(lb_icon)) response.set_author(name=f'{lb_category} {value_name} Leaderboard', icon_url=lb_icon) response.description = f'```hs\n{table_body}\n```' await message.channel.send(embed=response)
async def topexperience(cmd: SigmaCommand, message: discord.Message, args: list): value_name = 'Experience' sort_key = 'global' lb_category = 'Global' search = {} if args: if args[0].lower() == 'local': sort_key = f'guilds.{message.guild.id}' search = {sort_key: {'$exists': True}} lb_category = message.guild.name elif args[0].lower() == 'total': sort_key = 'total' lb_category = 'Total' now = arrow.utcnow().timestamp leader_docs, leader_timer = txplb_cache.get_cache( sort_key), txplb_cache.get_cache(f'{sort_key}_stamp') or now if not leader_docs or leader_timer < now + 180: coll = cmd.db[cmd.db.db_nam].ExperienceSystem all_docs = await coll.find(search).sort(sort_key, -1).limit(50).to_list(None) leader_docs = [] all_members = cmd.bot.get_all_members() for data_doc in all_docs: if sort_key == 'global' or sort_key == 'total': user_value = data_doc.get(sort_key) or 0 else: user_value = data_doc.get('guilds').get(str( message.guild.id)) or 0 user_level = int(user_value / 13266.85) user_object = discord.utils.find( lambda usr: usr.id == data_doc.get('UserID'), all_members) if user_object: if user_value: leader_docs.append([user_object, user_level, user_value]) if len(leader_docs) >= 20: break txplb_cache.set_cache(sort_key, leader_docs) txplb_cache.set_cache(f'{sort_key}_stamp', now) table_data = [[ pos + 1 if not doc[0].id == message.author.id else f'{pos + 1} <', clean_name(doc[0].name, 'Unknown')[:12], str(doc[1]), str(doc[2]) ] for pos, doc in enumerate(leader_docs)] table_body = boop(table_data, ['#', 'User Name', 'Level', value_name]) response = f'🔰 **{lb_category} {value_name} Leaderboard**' response += f'\n```hs\n{table_body}\n```' response += f'\nLeaderboard last updated {arrow.get(leader_timer).humanize()}.' await message.channel.send(response)
async def topcookies(cmd: SigmaCommand, message: discord.Message, args: list): value_name = 'Cookies' sort_key = 'Cookies' lb_category = 'Global' localed = False if args: if args[0].lower() == 'total': sort_key = 'Total' lb_category = 'Total' elif args[0].lower() == 'local': lb_category = 'Local' localed = True cache_key = message.guild.id if localed else sort_key now = arrow.utcnow().timestamp leader_docs, leader_timer = tcklb_cache.get_cache( cache_key), tcklb_cache.get_cache(f'{cache_key}_stamp') or now if not leader_docs or leader_timer < now + 180: coll = cmd.db[cmd.db.db_nam].Cookies all_docs = await coll.find({}).sort(sort_key, -1).limit(50).to_list(None) leader_docs = [] if localed: all_members = message.guild.members else: all_members = cmd.bot.get_all_members() for data_doc in all_docs: user_value = data_doc.get(sort_key) or 0 user_object = discord.utils.find( lambda usr: usr.id == data_doc.get('UserID'), all_members) if user_object: if user_value: leader_docs.append([user_object, user_value]) if len(leader_docs) >= 20: break tcklb_cache.set_cache(cache_key, leader_docs) tcklb_cache.set_cache(f'{cache_key}_stamp', now) table_data = [[ pos + 1 if not doc[0].id == message.author.id else f'{pos + 1} <', clean_name(doc[0].name, 'Unknown')[:12], str(doc[1]) ] for pos, doc in enumerate(leader_docs)] table_body = boop(table_data, ['#', 'User Name', value_name]) response = f'� **{lb_category} {value_name} Leaderboard**' response += f'\n```hs\n{table_body}\n```' response += f'\nLeaderboard last updated {arrow.get(leader_timer).humanize()}.' await message.channel.send(response)
async def topcurrency(cmd: SigmaCommand, message: discord.Message, args: list): value_name = cmd.bot.cfg.pref.currency sort_key = 'global' lb_icon = cmd.bot.user.avatar_url lb_category = 'Global' search = {} if args: if args[0].lower() == 'local': sort_key = f'guilds.{message.guild.id}' search = {sort_key: {'$exists': True}} lb_icon = message.guild.icon_url or lb_icon lb_category = message.guild.name elif args[0].lower() == 'total': sort_key = 'total' lb_category = 'Total' coll = cmd.db[cmd.db.db_cfg.database].CurrencySystem all_docs = tcr_cache.get_cache(sort_key) if not all_docs: all_docs = await coll.find(search).sort(sort_key, -1).limit(50).to_list(None) tcr_cache.set_cache(sort_key, all_docs) leader_docs = [] all_members = list(cmd.bot.get_all_members()) for data_doc in all_docs: if sort_key == 'global' or sort_key == 'total': user_value = data_doc.get(sort_key) or 0 else: user_value = data_doc.get('guilds').get(str(message.guild.id)) or 0 user_object = discord.utils.find( lambda usr: usr.id == data_doc.get('UserID'), all_members) if user_object: if user_value: leader_docs.append([user_object, user_value]) if len(leader_docs) >= 20: break table_data = [[clean_name(doc[0].name, 'Unknown')[:12], str(doc[1])] for doc in leader_docs] table_body = boop(table_data, ['User Name', value_name]) response = discord.Embed(color=await get_image_colors(lb_icon)) response.set_author(name=f'{lb_category} {value_name} Leaderboard', icon_url=lb_icon) response.description = f'```hs\n{table_body}\n```' await message.channel.send(embed=response)