def update_name(self, name: str): """ :param name: :type name: """ self.name = clean_name(name, str(self.id))
async def topcurrency(cmd: SigmaCommand, message: discord.Message, args: list): value_name = cmd.bot.cfg.pref.currency resource = cache_key = 'currency' sort_key = f'resources.{resource}.ranked' lb_category = 'This Month\'s' localed = False if args: if args[0].lower() == 'total': sort_key = f'resources.{resource}.total' lb_category = 'Total' elif args[0].lower() == 'local': sort_key = f'resources.{resource}.origins.guilds.{message.guild.id}' localed = True lb_category = message.guild.name now = arrow.utcnow().timestamp leader_docs, leader_timer = tcrlb_cache.get_cache( sort_key), tcrlb_cache.get_cache(f'{sort_key}_stamp') or now if not leader_docs or leader_timer + 180 < now: coll = cmd.db[cmd.db.db_nam].Profiles search = { '$and': [{ sort_key: { '$exists': True } }, { sort_key: { '$gt': 0 } }] } 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: user_value = await get_user_value(cmd.db, data_doc.get('user_id'), message.guild.id, cache_key, resource, localed) user_object = discord.utils.find( lambda usr: usr.id == data_doc.get('user_id'), all_members) if user_object: if user_value: leader_docs.append([user_object, user_value]) if len(leader_docs) >= 20: break tcrlb_cache.set_cache(sort_key, leader_docs) tcrlb_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]) ] for pos, doc in enumerate(leader_docs)] table_body = boop(table_data, ['#', 'User Name', value_name]) curr_icon = cmd.bot.cfg.pref.currency_icon response = f'{curr_icon} **{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 new(self, user: discord.Member): """ :param user: :type user: """ self.id = user.id self.name = clean_name(user.name, str(self.id)) await self.save(True)
async def topcurrency(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ gu = cmd.bot.get_user value_name = cmd.bot.cfg.pref.currency resource = 'currency' sort_key = 'ranked' lb_category = 'This Month\'s' if pld.args: if pld.args[0].lower() == 'total': sort_key = 'total' lb_category = 'Total' elif pld.args[0].lower() == 'current': sort_key = 'current' lb_category = 'Current' elif pld.args[0].lower() == 'local': sort_key = f'origins.guilds.{pld.msg.guild.id}' lb_category = pld.msg.guild.name now = arrow.utcnow().timestamp leader_docs = await cmd.db.cache.get_cache(f'{resource}_{sort_key}') leader_timer = await cmd.db.cache.get_cache(f'{resource}_{sort_key}_stamp' ) or now if not leader_docs or leader_timer + 180 < now: coll = cmd.db[cmd.db.db_nam][f'{resource.title()}Resource'] search = { '$and': [{ sort_key: { '$exists': True } }, { sort_key: { '$gt': 0 } }] } all_docs = await coll.find(search).sort(sort_key, -1).limit(100).to_list(None) leader_docs = await get_leader_docs(cmd.db, all_docs, sort_key) await cmd.db.cache.set_cache(f'{resource}_{sort_key}', leader_docs) await cmd.db.cache.set_cache(f'{resource}_{sort_key}_stamp', now) leader_timer = now table_data = [[ pos + 1 if not doc[0] == pld.msg.author.id else f'{pos + 1} <', clean_name((await gu(doc[0])).name if await gu(doc[0]) else doc[0], 'Unknown')[:18], str(doc[1]) ] for pos, doc in enumerate(leader_docs)] table_body = boop(table_data, ['#', 'User Name', value_name]) curr_icon = cmd.bot.cfg.pref.currency_icon response = f'{curr_icon} **{lb_category} {value_name} Leaderboard**' response += f'\n```hs\n{table_body}\n```' response += f'\nLeaderboard last updated **{arrow.get(leader_timer).humanize()}**.' await pld.msg.channel.send(response)
async def load(self): family = await self.db[self.db.db_nam].Families.find_one({'user_id': self.id}) if family: self.data = family self.exists = True self.name = clean_name(family.get('user_name'), str(self.id)) if not self.children_only: await self.load_iterable(family.get('parents', []), self.parents, True, False) if not self.parents_only: await self.load_iterable(family.get('children', []), self.children, False, True)
async def join_name_check(ev: SigmaEvent, member: discord.Member): if member.guild: active = await ev.db.get_guild_settings(member.guild.id, 'ascii_only_names') if active: if is_invalid(member.display_name): try: temp_name = await ev.db.get_guild_settings(member.guild.id, 'ascii_temp_name') new_name = clean_name(member.display_name, temp_name) await member.edit(nick=new_name, reason='ASCII name enforcement.') except Exception: pass
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 + 180 < now: 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('user_id'), 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 + 180 < now: 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('user_id'), 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 join_name_check(_ev, pld): """ :param _ev: The main event instance referenced. :type _ev: sigma.core.mechanics.event.SigmaEvent :param pld: The event payload data to process. :type pld: sigma.core.mechanics.payload.MemberPayload """ if pld.member.guild: active = pld.settings.get('ascii_only_names') if active: if is_invalid(pld.member.display_name): # noinspection PyBroadException try: temp_name = pld.settings.get('ascii_temp_name', '<Change My Name>') new_name = clean_name(pld.member.display_name, temp_name) await pld.member.edit(nick=new_name, reason='ASCII name enforcement.') except Exception: pass