コード例 #1
0
    def update_name(self, name: str):
        """

        :param name:
        :type name:
        """
        self.name = clean_name(name, str(self.id))
コード例 #2
0
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)
コード例 #3
0
    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)
コード例 #4
0
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)
コード例 #5
0
 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)
コード例 #6
0
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
コード例 #7
0
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)
コード例 #8
0
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)
コード例 #9
0
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