Exemple #1
0
    async def xp(self, ctx, *, msg):
        parser = Arguments(allow_abbrev=False, prog='xp')
        parser.add_argument('level1',
                            type=between(1, 120),
                            help='The lower of the two levels.')
        parser.add_argument('level2',
                            type=between(1, 120),
                            help='The higher of the two levels.')

        await self.bot.send_typing(ctx.message.channel)

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        if args.level1 >= args.level2:
            await self.bot.say('Level1 must be less than level2.')
            return

        await self.bot.say(
            'The total experience between levels **{:,}** and **{:,}** is **{:,}**.'
            .format(args.level1, args.level2,
                    runescape.get_exp_between_levels(args.level1,
                                                     args.level2)))
Exemple #2
0
    async def jot(self, *, msg):
        parser = Arguments(allow_abbrev=False, prog='jot')
        parser.add_argument('type', choices=['legendary', 'normal', 'master', 'supreme'], help='The type the aura.')
        parser.add_argument('level', type=choices.between(1, 120),
                            help='The level the amount of exp will be granted to.')

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        factor = {
            'normal': 1.5,
            'master': 2,
            'supreme': 2.5,
            'legendary':  5
        }

        xp = factor[args.type] * ((args.level**2) - (2 * args.level) + 100)
        m = "At level **{}** from a **{}** Jack of Trades aura, you'd gain **{:,}** XP.".format(args.level, args.type, xp)
        await self.bot.say(m)
Exemple #3
0
    async def clear(self, ctx, *, msg='100'):
        parser = Arguments(allow_abbrev=False, prog='clear')
        parser.add_argument('num',
                            nargs='?',
                            type=between(1, 100),
                            default=100,
                            help='The number of messages to search through.')
        parser.add_argument('-s',
                            '--self',
                            action='store_true',
                            help='Only deletes messages from this bot.')

        await self.bot.send_typing(ctx.message.channel)

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        # Only deleting messages from bot
        if args.self:
            await self.delete_self(ctx, args.num)
            return

        def check(m):
            """Checks if the message should be deleted"""

            pattern = '^(?:%s)' % '|'.join(
                re.escape(c)
                for c in self.bot.command_prefix(self.bot, ctx.message))
            return m.author.id == self.bot.user.id or m.id == ctx.message.id or re.search(
                pattern, m.content)

        # Getting messages
        deleted = Counter(m.author.id for m in await self.bot.purge_from(
            ctx.message.channel, limit=args.num, check=check))
        total = sum(deleted.values())
        server = ctx.message.channel.server

        # Displaying the number of messages deleted
        e = discord.Embed()
        e.colour = 0x3572a7
        e.title = 'Deleted {:,} message{}.'.format(total,
                                                   's' if total != 1 else '')
        e.description = '\n'.join(
            '**{:,}** {}'.format(c[1],
                                 server.get_member(c[0]).name)
            for c in deleted.most_common())

        await self.bot.say(embed=e, delete_after=5)
Exemple #4
0
    async def lamp(self, *, msg):
        parser = Arguments(allow_abbrev=False, prog='lamp')
        parser.add_argument('size', choices=['small', 'medium', 'large', 'huge'], help='The size of the lamp')
        parser.add_argument('level', type=choices.between(1, 120),
                            help='The level in your stat you wish to use the lamp on.')

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        await self.execute(args)
Exemple #5
0
    async def star(self, *, msg):
        parser = Arguments(allow_abbrev=False, prog='star')
        parser.add_argument('size', choices=['small', 'medium', 'large', 'huge'], help='The size of the prismatic star.')
        parser.add_argument('level', type=between(1, 120), help='The level the prismatic star will be used on.')

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        xp = PrismaticStar.get_star_dict()[args.size][min(97, args.level - 1)]
        await self.bot.say('A **{}** prismatic start at level **{:,}** would yield **{:,}** XP.'
                           .format(args.size, args.level, xp))
Exemple #6
0
    async def roll(self, *, msg):
        parser = Arguments(allow_abbrev=True, prog='roll')
        parser.add_argument(
            'number',
            type=choices.between(2, 2**31 - 1),
            help='The maximum number the roll can be (inclusive.)')

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        x = random.SystemRandom().randint(1, args.number)
        await self.bot.say('\U0001f3b2 Rolled a **{:,}**.'.format(x))
Exemple #7
0
    async def invasion(self, *, msg):
        parser = Arguments(allow_abbrev=False, prog='invasion')
        parser.add_argument('level',
                            type=choices.between(1, 120),
                            help='The level to get the reward XP for.')

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        xp = 8 * (20 / 20) * (args.level**2) - 2 * args.level + 100
        xp = int(xp) if xp % 1 == 0 else round(xp, 1)
        await self.bot.say(
            "At level **{}**, fully completing Toll Invasion will yield **{:,}** XP."
            .format(args.level, xp))
Exemple #8
0
    async def prefix(self, ctx, *, msg=''):
        parser = Arguments(allow_abbrev=False, prog='config prefix')
        parser.add_argument(
            'prefix',
            nargs='?',
            type=between(1, 3, False),
            help=
            'The character(s) that prefixes a command call. Leaving this argument out will reset '
            'the command prefix to default.')

        await self.bot.send_typing(ctx.message.channel)

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        configs = self.bot.configurations.get(ctx.message.channel.server.id)
        con = Config()
        con.server_id = ctx.message.channel.server.id

        # Resetting trigger
        if not args.prefix:
            configs['prefix'] = '`'
            con.prefix = None
            await objects.update(con, only=['prefix'])
            await self.bot.say('Command prefix has been **reset**.')
            return

        # Setting new trigger
        configs['prefix'] = args.prefix
        con.prefix = args.prefix
        await objects.update(con, only=['prefix'])
        await self.bot.say('Command prefix has been **updated**.')
Exemple #9
0
    async def price(self, ctx, *, msg: str):
        parser = Arguments(allow_abbrev=False, prog='price')
        parser.add_argument('name',
                            nargs='+',
                            help='The name if the item to get the price for.')
        parser.add_argument(
            '-u',
            '--units',
            type=int,
            help="Multiplies the item's price by the units given.")
        parser.add_argument(
            '-c',
            '--chart',
            type=between(1, 6),
            help="Plots the item's price history for number of given months.")

        await self.bot.send_typing(ctx.message.channel)

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        args.name = ' '.join(args.name)

        item = await util.fuzzy_match_name(args.name)
        if not item:
            await self.bot.say(
                'An item with the name, **%s**, could not be found.' %
                args.name)
            return

        history = await item.get_history()
        hist_vals = list(history['daily'].values())

        # Getting price change
        day_change = item.price - hist_vals[-2]
        one_month_change = item.price - hist_vals[-30]
        three_month_change = item.price - hist_vals[-90]
        six_month_change = item.price - hist_vals[-180]

        day_change_per = int(day_change / hist_vals[-2] * 100)
        one_month_change_per = int(one_month_change / hist_vals[-30] * 100)
        three_month_change_per = int(three_month_change / hist_vals[-90] * 100)
        six_month_change_per = int(six_month_change / hist_vals[-180] * 100)

        # Building message
        e = discord.Embed()
        e.description = item.description
        e.colour = 0x3572a7
        e.title = item.name
        e.url = 'http://services.runescape.com/m=itemdb_rs/viewitem?obj=%s' % item.id
        change = '**24 hours**: `{:,}` GP `{}%` {}\n' \
                 '**30 days**: `{:,}` GP `{}%` {}\n' \
                 '**90 days**: `{:,}` GP `{}%` {}\n' \
                 '**180 days**: `{:,}` GP `{}%` {}'\
            .format(day_change, day_change_per, Price.get_change_arrow(day_change),
                    one_month_change, one_month_change_per, Price.get_change_arrow(one_month_change),
                    three_month_change, three_month_change_per, Price.get_change_arrow(three_month_change),
                    six_month_change, six_month_change_per, Price.get_change_arrow(six_month_change))

        e.set_thumbnail(url=item.icon_url)
        e.add_field(name='Price', value='`{:,}` GP'.format(item.price))
        e.add_field(name='Price changes', value=change, inline=False)
        e.add_field(name='High alch', value='`{:,}` GP'.format(item.high_alch))
        e.add_field(name='Low alch',
                    value='`{:,}` GP\n\u200B'.format(item.low_alch))
        e.set_footer(text='Members' if item.members else 'F2P',
                     icon_url=item.type_url)

        # Totaling
        if args.units:
            e.add_field(name='Total Price (x{:,})'.format(args.units),
                        value='{:,} GP'.format(args.units * item.price))

        m = await self.bot.say(embed=e)

        # Adding chart
        if args.chart:
            link = await Price.plot_history(history, args.chart, item.name)

            # Checking if plot was uploaded to imgur
            if link:
                e.set_image(url=link)
                await self.bot.edit_message(m, embed=e)
Exemple #10
0
    async def train(self, ctx, *, msg):
        parser = Arguments(allow_abbrev=False, prog='train')

        parser.add_argument('skill',
                            type=enum(agility=['agil'],
                                      crafting=['craft'],
                                      firemaking=['fm'],
                                      herblore=['herb'],
                                      mining=['mine'],
                                      smithing=['smith'],
                                      woodcutting=['wc'],
                                      construction=['con'],
                                      divination=['div'],
                                      fishing=['fish'],
                                      hunter=['hunt'],
                                      prayer=['pray'],
                                      summoning=['summon', 'sum', 'summ'],
                                      cooking=['cook'],
                                      farming=['farm'],
                                      fletching=['fletch'],
                                      magic=['mage'],
                                      runecrafting=['rc'],
                                      thieving=['thiev', 'theiving']),
                            help='The name of the skill you wish to train.')

        parser.add_argument('level',
                            type=between(2, 120),
                            help='The level you wish to reach.')
        parser.add_argument('username',
                            nargs='+',
                            help='Your Runescape username.')

        parser.add_argument(
            '-l',
            '--limit',
            type=between(1, 30),
            default=10,
            help=
            'The number of training methods per page. If above 15 the results will be outputted '
            'as an image.')
        parser.add_argument('-p',
                            '--page',
                            type=minimum(1),
                            default=1,
                            help='The page of results to return.')
        parser.add_argument(
            '-i',
            '--image',
            action='store_true',
            help='Displays the results as an image. (Useful for mobile).')
        parser.add_argument(
            '-o',
            '--order',
            nargs='+',
            type=enum('number-', 'number', 'level', 'level-', 'exp', 'exp-',
                      'name', 'name-'),
            help=
            'Sorts the results in the order specified. Add a \'-\' to the end of the order string '
            'to specify descending. Eg. number-',
            default=['number'])

        await self.bot.send_typing(ctx.message.channel)

        try:
            args = parser.parse_args(split(msg))
        except SystemExit:
            await self.bot.say('```%s```' % parser.format_help())
            return
        except Exception as e:
            await self.bot.say('```%s```' % str(e))
            return

        args.username = '******'.join(args.username)
        await self.execute(args)