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
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
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]
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
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')])
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)
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
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
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)
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]
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()
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
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()
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
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
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
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
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'
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
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
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
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