Exemplo n.º 1
0
def format_brawlers(ctx, p):
    ems = []

    ranks = [
        0, 10, 20, 30, 40, 60, 80, 100, 120, 140, 160, 180, 220, 260, 300, 340,
        380, 420, 460, 500
    ]

    for n, i in enumerate(p.brawlers):
        if n % 6 == 0:
            ems.append(discord.Embed(color=random_color()))
            ems[-1].set_author(name=f'{p.name} (#{p.tag})')
            ems[-1].set_footer(text=_('Statsy | Powered by brawlapi.cf'))

        rank = ranks.index([r
                            for r in ranks if i.highest_trophies >= r][-1]) + 1

        skin = e('tick') if i.has_skin else e('xmark')

        val = f"{e('xp')} Level {i.level}\n{skin} Skin Active?\n{e('bstrophy')} {i.trophies}/{i.highest_trophies} PB (Rank {rank})"
        ems[-1].add_field(
            name=f"{e(i.name)} {i.name.replace('Franky', 'Frank')}",
            value=val)

    return ems
Exemplo n.º 2
0
async def format_clan_link(ctx, c, link, default):
    av = ctx.cog.cr.get_clan_image(c)
    if not link.startswith('http'):
        link = 'https://' + link

    em = discord.Embed(
        description=
        f"[Join]({link}) {ctx.author.mention}['s clan! {e('clan')}]({link})",
        color=random_color())

    if default:
        prefix = (await ctx.bot.get_prefix(ctx.message))[2]
        em.set_footer(text=_(
            'Run `{}link disable` to disable this feature').format(prefix))
    else:
        em.set_footer(text=_('Statsy | Powered by the CR API'))

    em.set_author(name=f'{c.name} ({c.tag})')
    em.set_thumbnail(url=ctx.cog.cr.get_arena_image(av))

    embed_fields = [
        (_('Type'), camel_case(c.type) + ' 📩'),
        (_('Score'), str(c.clan_score) + _(' Trophies ') + str(e('trophy'))),
        (_('Donations/Week'),
         str(c.donations_per_week) + _(' Cards ') + str(e('cards'))),
        (_('Location'), c.location.name + ' 🌎'),
        (_('Members'), f"{len(c.member_list)}/50 {e('clan')}"),
        (_('Required Trophies'), f"{c.required_trophies} {e('trophy')}"),
    ]

    for n, v, i in embed_fields:
        em.add_field(name=n, value=v, inline=i)

    return em
Exemplo n.º 3
0
async def format_clan(ctx, c):
    page1 = discord.Embed(description=c.description, color=random_color())
    page1.set_author(name=f"{c.name} ({c.tag})")
    page1.set_footer(text=_('Statsy | Powered by the CR API'))
    page2 = copy.deepcopy(page1)
    page2.description = _('Top Players/Donators/Contributors for this clan.')
    page1.set_thumbnail(url=ctx.cog.cr.get_clan_image(c))

    _donators = list(reversed(sorted(c.member_list,
                                     key=lambda m: m.donations)))

    pushers = []
    donators = []

    for i in range(3):
        if len(c.member_list) < i + 1:
            break
        pushers.append(f"**{c.member_list[i].name}**"
                       f"\n{c.member_list[i].trophies} "
                       f"{e('trophy')}\n"
                       f"{c.member_list[i].tag}")
        donators.append(f"**{_donators[i].name}**"
                        f"\n{_donators[i].donations} "
                        f"{e('cards')}\n"
                        f"{_donators[i].tag}")

    fields1 = [
        (_('Type'), camel_case(c.type) + ' 📩'),
        (_('Score'), str(c.clan_score) + _(' Trophies ') + str(e('trophy'))),
        (_('War Trophies'),
         str(c.clan_war_trophies) + _(' Trophies ') + str(e('wartrophy'))),
        (_('Donations/Week'),
         str(c.donations_per_week) + _(' Cards ') + str(e('cards'))),
        (_('Location'), c.location.name + ' 🌎'),
        (_('Members'), f"{len(c.member_list)}/50 {e('clan')}"),
        (_('Required Trophies'), f"{c.required_trophies} {e('trophy')}"),
    ]

    fields2 = [(_('Top Players'), '\n\n'.join(pushers)),
               (_('Top Donators'), '\n\n'.join(donators))]

    for f, v in fields1:
        page1.add_field(name=f, value=v)

    for f, v in fields2:
        if v:
            page2.add_field(name=f, value=v)

    return [page1, page2]
Exemplo n.º 4
0
async def format_deck_link(ctx, d, link, default):
    deck = ''
    elixir = 0
    for n, i in enumerate(d):
        for c in ctx.cog.cr.constants.cards:
            if str(c.id) == i:
                deck += str(e(c.name))
                elixir += c.elixir
                if n == 3:
                    deck += '\n'
                break

    elixir = elixir / len(d)
    deck += f'\n{elixir:.1f}{e("elixirdrop")} [Copy this deck!]({link}) {e("copydeck")}'
    em = discord.Embed(title=f'Deck shared by {ctx.author.name}',
                       description=deck,
                       color=random_color())
    if not link.startswith('http'):
        link = 'https://' + link

    if default:
        prefix = (await ctx.bot.get_prefix(ctx.message))[2]
        em.set_footer(text=_(
            'Run `{}link disable` to disable this feature').format(prefix))
    else:
        em.set_footer(text=_('Statsy | Powered by the CR API'))

    return em
Exemplo n.º 5
0
    async def _card(self, ctx, *, card):
        """Get information about a Clash Royale card."""
        aliases = {
            'log': 'the log',
            'pump': 'elixir collector',
            'skarmy': 'skeleton army',
            'pekka': 'p.e.k.k.a',
            'mini pekka': 'mini p.e.k.k.a',
            'xbow': 'x-bow'
        }
        card = card.lower()
        if card in aliases:
            card = aliases[card]
        constants = self.cr.constants

        found_card = None
        for c in constants.cards:
            if c.name.lower() == card.lower():
                found_card = c

        if found_card is None:
            return await ctx.send("That's not a card!")

        em = await cr.format_card(ctx, found_card)
        try:
            async with self.bot.session.get(e(card).url) as resp:
                c = io.BytesIO(await resp.read())
        except AttributeError:
            # new card, no emoji
            await ctx.send(embed=em)
        else:
            await ctx.send(embed=em, files=[discord.File(c, 'card.png')])
Exemplo n.º 6
0
def get_chests(ctx, cycle):
    chests = '| ' + str(
        e('chest' + cycle[0].name.replace(' Chest', ''))) + ' | '
    chests += ''.join([
        str(e('chest' + cycle[x].name.replace(' Chest', '')))
        for x in range(1, 8)
    ])
    special = ''

    for i in range(9, 15):
        try:
            emoji = e('chest' + cycle[i].name.replace(' Chest', '').lower())
            special += f"{emoji}+{cycle[i].index + 1} "
        except IndexError:
            break

    return (chests, special)
Exemplo n.º 7
0
async def format_profile(ctx, platform, p):
    ems = []
    top = {'solo': (10, 25), 'duo': (5, 12), 'squad': (3, 6)}

    if p['totals']['matchesplayed']:
        kdr = p['totals']['wins'] / p['totals']['matchesplayed'] * 100
    else:
        kdr = 0

    fields = [(_('Kills {}').format(e("fnskull")), p['totals']['kills']),
              (_('Victory Royale! {}').format(e("fnvictoryroyale")),
               f"{p['totals']['wins']} ({kdr:.2f})"),
              (_('Kill Death Ratio'), p['totals']['kd']),
              (_('Time Played'), timestamp(p['totals']['minutesplayed']))]

    ems.append(
        discord.Embed(description=_('Overall Statistics'),
                      color=random_color()))
    ems[0].set_author(name=p['username'])
    for name, value in fields:
        ems[0].add_field(name=str(name), value=str(value))

    for n, mode in enumerate(('solo', 'duo', 'squad')):
        kdr = p[platform][f'winrate_{mode}']
        fields = [
            (_('Score'), p[platform][f'score_{mode}']),
            (_('Kills {}').format(e("fnskull")), p[platform][f'kills_{mode}']),
            (_('Total Battles'), p[platform][f'matchesplayed_{mode}']),
            (_('Victory Royale! {}').format(e("fnvictoryroyale")),
             f"{p[platform][f'placetop1_{mode}']} ({kdr}%)"),
            (_('Top {}').format(e("fnleague")),
             'Top {}: {}\nTop {}: {}'.format(
                 top[mode][0], p[platform][f'placetop{top[mode][0]}_{mode}'],
                 top[mode][1], p[platform][f'placetop{top[mode][1]}_{mode}'])),
            (_('Kill Death Ratio'), p[platform][f'kd_{mode}']),
            (_('Time Played'), timestamp(p[platform][f'minutesplayed_{mode}']))
        ]
        ems.append(
            discord.Embed(description=_('{} Statistics').format(mode.title()),
                          color=random_color()))
        ems[n + 1].set_author(name=p['username'])

        for name, value in fields:
            ems[n + 1].add_field(name=str(name), value=str(value))

    return ems
Exemplo n.º 8
0
def get_deck(ctx, p, *, deck=False):
    current_deck = p if deck else p.current_deck
    f_deck = ''
    for card in current_deck:
        f_deck += str(e(card.name))
        if not deck:
            f_deck += str(get_card_level(card))
        f_deck += ' '
    return f_deck
Exemplo n.º 9
0
async def format_random_brawler_and_send(ctx, brawler):
    image = await get_image(ctx, e(brawler).url)

    em = discord.Embed(title=brawler.title(), color=random_color())
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    em.set_image(url='attachment://brawler.png')

    await ctx.send(file=discord.File(image, 'brawler.png'), embed=em)
Exemplo n.º 10
0
def format_club(ctx, b):
    _experiences = sorted(b.members, key=lambda x: x.exp_level, reverse=True)
    experiences = []
    pushers = []

    if len(b.members) >= 3:
        for i in range(3):
            push_avatar = e(b.members[i].avatar_id)
            exp_avatar = e(_experiences[i].avatar_id)

            pushers.append(f"**{push_avatar} {b.members[i].name}**"
                           f"\n{e('bstrophy')}"
                           f" {b.members[i].trophies} "
                           f"\n#{b.members[i].tag}")

            experiences.append(f"**{exp_avatar} {_experiences[i].name}**"
                               f"\n{e('xp')}"
                               f" {_experiences[i].exp_level}"
                               f"\n#{_experiences[i].tag}")

    page1 = discord.Embed(description=b.description, color=random_color())
    page1.set_author(name=f"{b.name} (#{b.tag})")
    page1.set_footer(text=_('Statsy | Powered by brawlapi.cf'))
    page1.set_thumbnail(url=b.badge_url)
    page2 = copy.deepcopy(page1)
    page2.description = 'Top Players/Experienced Players for this club.'

    fields1 = [(_('Type'), f'{b.status} 📩'),
               (_('Score'), f'{b.trophies} Trophies {e("bstrophy")}'),
               (_('Members'), f'{b.members_count}/100 {e("gameroom")}'),
               (_('Required Trophies'),
                f'{b.required_trophies} {e("bstrophy")}'),
               (_('Online Players'), f'{b.online_members} {e("online")}')]
    fields2 = [("Top Players", '\n\n'.join(pushers)),
               ("Top Experience", '\n\n'.join(experiences))]

    for f, v in fields1:
        page1.add_field(name=f, value=v)

    for f, v in fields2:
        if v:
            page2.add_field(name=f, value=v)

    return [page1, page2]
Exemplo n.º 11
0
async def format_deck_image_and_send(ctx, p):
    p._current_deck = [p.client.get_card_info(c.name) for c in p.current_deck]
    tasks = [get_image(ctx, card.icon_urls.medium)
             for card in p.current_deck]  # f'{images}/{card.key}.png'
    tasks.append(get_image(ctx, e('elixirdrop').url))
    tasks.append(get_image(ctx, e('experience').url))

    card_images = await asyncio.gather(*tasks)
    deck_image = await get_deck_image(card_images, profile=p)

    av = ctx.cog.cr.get_clan_image(p)
    em = discord.Embed(color=random_color())
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
    em.set_image(url='attachment://deck.png')

    await ctx.send(file=discord.File(deck_image, 'deck.png'), embed=em)

    deck_image.close()
Exemplo n.º 12
0
async def format_chests(ctx, p, c):
    av = ctx.cog.cr.get_clan_image(p)
    em = discord.Embed(color=random_color())
    em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    chests = get_chests(ctx, c)
    em.set_thumbnail(url=e('chest' +
                           c[0].name.replace(' Chest', '').lower()).url)
    em.add_field(name=_('Chests'), value=chests[0])
    em.add_field(name=_('Chests Until'), value=chests[1])
    em.set_footer(text=_('Statsy | Powered by the CR API'))
    return em
Exemplo n.º 13
0
async def format_random_deck_image_and_send(ctx, deck):
    tasks = [get_image(ctx, f'{images}/{card.key}.png') for card in deck]
    tasks.append(get_image(ctx, e('elixirdrop').url))

    card_images = await asyncio.gather(*tasks)
    deck_image = await get_deck_image(card_images, deck=deck)

    # av = ctx.cog.cr.get_clan_image(p)
    em = discord.Embed(color=random_color())
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    # em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
    em.set_image(url='attachment://deck.png')

    await ctx.send(file=discord.File(deck_image, 'deck.png'), embed=em)

    deck_image.close()
Exemplo n.º 14
0
async def format_stats(ctx, p):
    av = ctx.cog.cr.get_clan_image(p)
    em = discord.Embed(color=random_color())
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
    em.set_thumbnail(url=ctx.cog.cr.get_arena_image(p))

    trophies = f"{p.trophies}/{p.best_trophies} PB {e('trophy')}"
    deck = get_deck(ctx, p)

    try:
        clan_name = p.clan.name
        clan_tag = p.clan.tag
        clan_role = camel_case(p.role)
    except AttributeError:
        clan_name = clan_tag = clan_role = None

    try:
        favourite_card = f"{p.current_favourite_card.name} {e(p.current_favourite_card.name)}"
    except AttributeError:
        favourite_card = _('No favourite card :(')

    embed_fields = [
        (_('Trophies'), trophies, True),
        (_('Level'), f"{p.exp_level} {e('experience')}", True),
        (_('Clan Name'), f"{clan_name} {e('clan')}" if clan_name else None,
         True),
        (_('Clan Tag'), f"{clan_tag} {e('clan')}" if clan_tag else None, True),
        (_('Clan Role'), f"{clan_role} {e('clan')}" if clan_role else None,
         True), (_('War Day Wins'), f"{p.war_day_wins} {e('clanwar')}", True),
        (_('Favourite Card'), favourite_card, True),
        (_('Battle Deck'), deck, True)
    ]

    for n, v, i in embed_fields:
        if v:
            em.add_field(name=n, value=v, inline=i)
        else:
            if n == _('Clan Name'):
                em.add_field(name=_('Clan'),
                             value=_('None {}').format(e('noclan')))

    em.set_footer(text=_('Statsy | Powered by the CR API'))

    return em
Exemplo n.º 15
0
async def format_seasons(ctx, p):
    av = ctx.cog.cr.get_clan_image(p)
    embeds = []
    if p.league_statistics:
        for season in p.league_statistics.to_dict().keys():
            s = p.league_statistics[season]
            em = discord.Embed(color=random_color())
            if ctx.bot.psa_message:
                em.description = f'*{ctx.bot.psa_message}*'
            em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
            em.set_thumbnail(url=e('legendarytrophy').url)
            try:
                em.add_field(name=_('{} Season').format(
                    season.strip('Season').title()),
                             value=s.id)
            except:
                if p.league_statistics.get('previous_season'):
                    prev = p.league_statistics.previous_season
                    old_time = prev.id.split('-')
                    time = [int(old_time[0]), int(old_time[1]) + 1]
                    if time[1] > 12:  # check month
                        time[0] += 1
                        time[1] = 1
                    em.add_field(name=_('{} Season').format(
                        season.strip('Season').title()),
                                 value=f'{time[0]}-{time[1]}')
            try:
                em.add_field(name=_('Season Highest'),
                             value=f"{s.best_trophies} {e('trophy')}")
            except:
                pass
            try:
                em.add_field(name=_('Season Finish'),
                             value=f"{s.trophies} {e('trophy')}")
            except:
                pass
            try:
                em.add_field(name=_('Global Rank'),
                             value=f"{s.rank} {e('rank')}")
            except:
                pass

            embeds.append(em)

    return embeds
Exemplo n.º 16
0
def format_robo(ctx, leaderboard):
    delta = datetime.utcnow() - datetime.strptime(leaderboard.updated,
                                                  '%Y-%m-%d %H:%M:%S')
    hours, remainder = divmod(int(delta.total_seconds()), 3600)
    minutes, seconds = divmod(remainder, 60)
    days, hours = divmod(hours, 24)

    fmt = '{s}s'
    if minutes:
        fmt = '{m}m ' + fmt
    if hours:
        fmt = '{h}h ' + fmt
    if days:
        fmt = '{d}d ' + fmt
    fmt = fmt.format(d=days, h=hours, m=minutes, s=seconds)

    embeds = []

    for rnd in range(math.ceil(len(leaderboard.best_teams) / 5)):
        em = discord.Embed(
            title='Top Teams in Robo Rumble',
            description=_('Top {} teams!\nLast updated: {} ago').format(
                len(leaderboard.best_teams), fmt),
            color=random_color())
        em.set_footer(text='Statsy')

        for i in range(rnd, 5 + rnd):
            minutes, seconds = divmod(leaderboard.best_teams[i].duration, 60)
            rankings = ''
            for num in range(1, 4):
                rankings += str(
                    e(leaderboard.best_teams[i][f'brawler{num}'])
                ) + ' ' + leaderboard.best_teams[i][f'player{num}'] + '\n'
            em.add_field(name=f'{minutes}m {seconds}s', value=rankings)

        embeds.append(em)

    return embeds
Exemplo n.º 17
0
def format_boss(ctx, leaderboard):
    delta = datetime.utcnow() - datetime.strptime(leaderboard.updated,
                                                  '%Y-%m-%d %H:%M:%S')
    hours, remainder = divmod(int(delta.total_seconds()), 3600)
    minutes, seconds = divmod(remainder, 60)
    days, hours = divmod(hours, 24)

    fmt = '{s}s'
    if minutes:
        fmt = '{m}m ' + fmt
    if hours:
        fmt = '{h}h ' + fmt
    if days:
        fmt = '{d}d ' + fmt
    fmt = fmt.format(d=days, h=hours, m=minutes, s=seconds)

    embeds = []

    for rnd in range(math.ceil(len(leaderboard.best_players) / 10)):
        em = discord.Embed(
            title='Top Bosses in Boss Fight ',
            description=_(
                'Top {} bosses!\n\nLast updated: {} ago\nMap: {}').format(
                    len(leaderboard.best_players), fmt,
                    leaderboard['activeLevel']),
            color=random_color())
        em.set_footer(text='Statsy')

        for i in range(rnd, 10 + rnd):
            minutes, seconds = divmod(leaderboard.best_players[i].duration, 60)
            rankings = str(
                e(leaderboard.best_players[i].brawler
                  )) + ' ' + leaderboard.best_players[i]['player'] + '\n'
            em.add_field(name=f'{minutes}m {seconds}s', value=rankings)

        embeds.append(em)

    return embeds
Exemplo n.º 18
0
 def __init__(self, ctx, brawler_power, *embeds, **kwargs):
     super().__init__(ctx, *embeds, **kwargs)
     self.brawler_power = brawler_power
     if self.brawler_power:
         self.emojis[str(e('28000000', ctx=self.ctx))] = 'jump_to_player'
Exemplo n.º 19
0
async def format_profile(ctx, p):
    embeds = []
    try:
        av = p['clan']['badgeUrls']['small']
    except KeyError:
        av = 'https://i.imgur.com/Y3uXsgj.png'
    em = discord.Embed(color=random_color())
    em.set_author(name=f"{p['name']} ({p['tag']})", icon_url=av)
    try:
        em.set_thumbnail(url=p['league']['iconUrls']['medium'])
    except KeyError:
        em.set_thumbnail(url="https://i.imgur.com/JsVQPza.png")

    trophies = f"{p['trophies']}/{p['bestTrophies']} PB {e('trophy')}"

    try:
        clan = p['clan']
        war_stars = p['warStars']
        role = 'Elder' if p['role'] == 'admin' else p['role'].title()
    except KeyError:
        clan = None
        war_stars = None
        role = None

    try:
        donations = p['donations'] / p['donationsReceived']
    except ZeroDivisionError:
        donations = 0

    embed_fields = [
        (_('Trophies'), trophies, True),
        (_('XP Level'), f"{p['expLevel']} {e('experience')}", True),
        (_('TH Level'),
         f"{p['townHallLevel']} {e('townhall'+str(p['townHallLevel']))}",
         True),
        (_('Clan Name'),
         f"{clan['name']} {e('clan')}" if clan else _('No Clan'), True),
        (_('Clan Tag'), f"{clan['tag']} {e('clan')}" if clan else _('No Clan'),
         True),
        (_('Clan Role'), f"{role} {e('clan')}" if clan else _('No Clan'),
         True),
        (_('War Stars'),
         f"{war_stars} {e('cocstar')}" if clan else _('No Clan'), True),
        (_('Successful Attacks'), f'{p["attackWins"]} {e("sword")}', True),
        (_('Successful Defenses'), f'{p["defenseWins"]} {e("cocshield")}',
         True),
        (_("Donate:Give Ratio"), _('{:.2f} {}').format(donations,
                                                       e('troops')), True)
    ]

    try:
        embed_fields.append((_(
            'BH Level'
        ), f"{p['builderHallLevel']} {e('builderhall'+str(p['builderHallLevel']))}",
                             True))
        embed_fields.append(
            (_("Builder Trophies"),
             f"{p['versusTrophies']}/{p['bestVersusTrophies']} PB {e('axes')}",
             True))
    except KeyError:
        pass

    try:
        embed_fields.append((_(
            'Current Season'
        ), f"{p['legendStatistics']['currentSeason']['trophies']} {e('trophy')}",
                             True))
        embed_fields.append((_('Best Season'), '\n'.join((
            f"{p['legendStatistics']['bestSeason']['trophies']} {e('trophy')}",
            f"{p['legendStatistics']['bestSeason']['rank']} {e('rank')}")),
                             True))
    except KeyError:
        pass
    try:
        embed_fields.append((_('Last BH Season'), '\n'.join((
            f"{p['legendStatistics']['previousVersusSeason']['trophies']} {e('axes')}",
            f"{p['legendStatistics']['previousVersusSeason']['rank']} {e('rank')}",
        )), True))
        embed_fields.append((_('Best BH Season'), '\n'.join((
            f"{p['legendStatistics']['bestVersusSeason']['trophies']} {e('axes')}",
            f"{p['legendStatistics']['bestVersusSeason']['rank']} {e('rank')}"
        )), True))
    except KeyError:
        pass

    for n, v, i in embed_fields:
        if v:
            em.add_field(name=n, value=v, inline=i)
        else:
            if n == _('Clan Name'):
                em.add_field(name=_('Clan'), value=_('No Clan'))

    em.set_footer(text=_('Statsy - Powered by the COC API'))
    embeds.append(em)
    em = discord.Embed(color=random_color())
    em.set_author(name=_('{}s Collection ({})').format(p['name'], p['tag']),
                  icon_url=av)
    troops = []
    builders = []
    heroes = []
    spells = []
    for troop in p['troops']:
        if troop['village'] == "home":
            troops.append(
                f'{e("coc"+troop["name"].lower().replace(" ", ""))}{troop["level"]}'
            )
        else:
            builders.append(
                f'{e("coc"+troop["name"].lower().replace(" ", ""))}{troop["level"]}'
            )
    for spell in p['spells']:
        spells.append(
            f'{e("coc"+spell["name"].lower().replace(" ", ""))}{spell["level"]}'
        )
    for hero in p['heroes']:
        heroes.append(
            f'{e("coc"+hero["name"].lower().replace(" ", ""))}{hero["level"]}')
    em.add_field(name=_("Home Troops"), value='  '.join(troops), inline=False)
    if builders:
        em.add_field(name=_("Builder Troops"),
                     value='  '.join(builders),
                     inline=False)
    else:
        em.add_field(name=_("Builder Troops"), value='None')
    if spells:
        em.add_field(name=_("Spells"), value='  '.join(spells), inline=False)
    else:
        em.add_field(name=_("Spells"), value='None')
    if heroes:
        em.add_field(name=_("Heroes"), value='  '.join(heroes), inline=False)
    else:
        em.add_field(name=_("Heroes"), value='None')
    embeds.append(em)
    return embeds
Exemplo n.º 20
0
async def format_profile(ctx, p, c):

    av = ctx.cog.cr.get_clan_image(p)
    em = discord.Embed(color=random_color())
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'
    em.set_author(name=f'{p.name} ({p.tag})', icon_url=av)
    em.set_thumbnail(url=ctx.cog.cr.get_arena_image(p))

    deck = get_deck(ctx, p)

    chests = get_chests(ctx, c)[0]

    trophies = f"{p.trophies}/{p.best_trophies} PB {e('trophy')}"

    s = None
    if p.league_statistics:
        current_rank = p.league_statistics.current_season.get('rank')
        if p.league_statistics.get('previous_season'):
            s = p.league_statistics.previous_season
            global_r = s.get('rank')
            season = (_('Highest: {} {} \n').format(s.best_trophies,
                                                    e('crownblue')),
                      _('Finish: {} {} \n').format(s.trophies, e('trophy')),
                      _('Global Rank: {} {}').format(global_r, e('rank')))
        else:
            season = None
    else:
        current_rank = None
        season = None

    try:
        clan_name = p.clan.name
        clan_tag = p.clan.tag
        clan_role = camel_case(p.role)
    except AttributeError:
        clan_name = clan_tag = clan_role = None

    special = get_chests(ctx, c)[1]

    try:
        favourite_card = f"{p.current_favourite_card.name} {e(p.current_favourite_card.name)}"
    except AttributeError:
        favourite_card = _('No favourite card :(')

    embed_fields = [
        (_('Trophies'), trophies, True),
        (_('Level'), f"{p.exp_level} {e('experience')}", True),
        (_('Clan Name'), f"{clan_name} {e('clan')}" if clan_name else None,
         True),
        (_('Clan Tag'), f"{clan_tag} {e('clan')}" if clan_tag else None, True),
        (_('Clan Role'), f"{clan_role} {e('clan')}" if clan_role else None,
         True),
        (_('Clans Joined'), f"{p.achievements[0].value} {e('clan')}", True),
        (_('Games Played'), f"{p.battle_count} {e('battle')}", True),
        (_('Friendly Battles Won'), f"{p.achievements[9].value} {e('battle')}",
         True),
        (_('Wins/Losses'), f"{p.wins}/{p.losses} {e('battle')}", True),
        (_('Three Crown Wins'), f"{p.three_crown_wins} {e('3crown')}", True),
        (_('War Day Wins'), f"{p.war_day_wins} {e('clanwar')}", True),
        (_('Favourite Card'), favourite_card, True),
        (_('Tournaments Played'),
         f"{p.achievements[7].value} {e('tournament')}", True),
        (_('Tournament Cards Won'), f"{p.tournament_cards_won} {e('cards')}",
         True),
        (_('Challenge Cards Won'), f"{p.challenge_cards_won} {e('cards')}",
         True),
        (_('Challenge Max Wins'), f"{p.challenge_max_wins} {e('tournament')}",
         True),
        (_('Total Donations'), f"{p.total_donations} {e('cards')}", True),
        (_('Global Rank'),
         f"{current_rank} {e('crownred')}" if current_rank else None, True),
        (_('Battle Deck'), deck, True),
        (_('Chests'), chests, False),
        (_('Chests Until'), special, True),
        (_('Previous Season Results ({})').format(s.id) if s else None, season,
         False),
    ]

    for n, v, i in embed_fields:
        if v:
            em.add_field(name=n, value=v, inline=i)
        else:
            if n == _('Clan Name'):
                em.add_field(name=_('Clan'),
                             value=_('None {}').format(e('noclan')))

    em.set_footer(text=_('Statsy | Powered by the CR API'))

    return em
Exemplo n.º 21
0
async def format_clan_war(ctx, w):
    page1 = discord.Embed(color=random_color())
    page1.set_footer(text=_('Statsy | Powered by the CR API'))

    if ctx.bot.psa_message:
        page1.description = ctx.bot.psa_message

    if w.state == 'notInWar':
        page1.add_field(name=_('Day'),
                        value=f'{camel_case(w.state)} {e("clanwar")}')
        return [page1]

    page1.set_author(name=f"{w.clan.name} ({w.clan.tag})",
                     icon_url=ctx.cog.cr.get_clan_image(w))

    page2 = copy.deepcopy(page1)
    return_vals = [page1, page2]

    fields1 = [(_('Day'), f'{camel_case(w.state)} {e("clanwar")}'),
               (_('War Trophies'),
                f"{w.clan.clan_score} Trophies {e('wartrophy')}"),
               (_('Participants'), f"{w.clan.participants} {e('clan')}"),
               (_('Battles Played'), f"{w.clan.battles_played} {e('battle')}"),
               (_('Wins'), f"{w.clan.wins} {e('crownblue')}")]

    if w.state in ('matchmaking', 'collectionDay'):
        pass
    elif w.state == 'warDay':
        fields1.append(('Crowns', f'{w.clan.crowns} {e("3crown")}'))
        page3 = copy.deepcopy(page1)

        standings = []

        for i in w.clans:
            standings.append(''.join(
                (f"**{i.name}**",
                 _('\n{} Batles Played {}').format(i.battles_played,
                                                   e('battle')),
                 _('\n{} Wins').format(i.wins, e('crownblue')),
                 _('\n{} Crowns {}').format(i.crowns,
                                            e('3crown')), f"\n{i.tag}")))

        page3.add_field(name=_('Clans Participating'),
                        value='\n\n'.join(standings))
        return_vals.append(page3)

    else:
        raise NotImplementedError(
            f'{w.state} not implemented in format_clan_war (L632, ext/embeds_cr_crapi)'
        )

    members = []

    for i in range(3):
        if len(w.participants) < i + 1:
            break
        members.append(''.join(
            (f"**{w.participants[i].name}**",
             _('\n{} Batles Played {}').format(
                 w.participants[i].battles_played,
                 e('battle')), _('\n{} Wins').format(w.participants[i].wins,
                                                     e('crownblue')),
             _('\n{} Cards Earned {}').format(w.participants[i].cards_earned,
                                              e('cards')),
             f"\n{w.participants[i].tag}")))

    for f, v in fields1:
        page1.add_field(name=f, value=v)

    page2.add_field(name=_('Top Fighters'), value='\n\n'.join(members))

    return return_vals
Exemplo n.º 22
0
async def format_cards(ctx, p):
    constants = ctx.cog.cr.constants

    name = p.name
    tag = p.tag

    rarity = {'Common': 1, 'Rare': 2, 'Epic': 3, 'Legendary': 4}

    found_cards = p.cards
    notfound_cards = [
        i for i in constants.cards
        if i.name not in [k.name for k in found_cards]
    ]

    def get_rarity(card):
        for i in constants.cards:
            if i.name == card or i.key.replace('-', '') == card:
                return i.rarity

    found_cards = sorted(found_cards, key=lambda x: rarity[get_rarity(x.name)])
    notfound_cards = sorted(notfound_cards,
                            key=lambda x: rarity[get_rarity(x.name)])

    fmt = ''
    found_cards_pages = []
    oldcard = None
    for card in found_cards:
        if not card:
            continue
        card.rarity = get_rarity(card.name)

        if oldcard and oldcard.rarity != card.rarity:
            try:
                found_cards_pages.append((fmt, get_rarity(fmt.split(':')[1])))
            except IndexError:
                found_cards_pages.append((fmt, fmt.split(':')[0]))
            fmt = str(e(card.name))
        else:
            fmt += str(e(card.name))

            if len(fmt) > 1024:
                fmt = fmt.replace(str(e(card.name)), '')
                try:
                    found_cards_pages.append(
                        (fmt, get_rarity(fmt.split(':')[1])))
                except IndexError:
                    found_cards_pages.append((fmt, fmt.split(':')[0]))
                fmt = str(e(card.name))
        oldcard = card
    try:
        found_cards_pages.append((fmt, get_rarity(fmt.split(':')[1])))
    except IndexError:
        found_cards_pages.append((fmt, fmt.split(':')[0]))

    fmt = ''
    notfound_cards_pages = []
    for card in notfound_cards:
        if not card:
            continue

        fmt += str(e(card.name))
        if len(fmt) > 1024:
            fmt = fmt.replace(str(e(card.name)), '')
            notfound_cards_pages.append(fmt)
            fmt = str(e(card.name))
    notfound_cards_pages.append(fmt)

    em = discord.Embed(description=_('A list of cards this player has.'),
                       color=random_color())
    em.set_author(name=f"{name} ({tag})")
    em.set_footer(text=_('Statsy | Powered by the CR API'))
    if ctx.bot.psa_message:
        em.description = f'*{ctx.bot.psa_message}*'

    for i, r in found_cards_pages:
        if i:
            em.add_field(name=_('Found Cards ({})').format(r),
                         value=i,
                         inline=False)

    for item in notfound_cards_pages:
        if item:
            em.add_field(name=_('Missing Cards'), value=item, inline=False)
    return em