async def handle(self, params, message, mentioned_user, client):
        destinyID = lookupDestinyID(mentioned_user.id)
        system = lookupSystem(destinyID)

        if not (destinyID and system):
            await message.channel.send(embed=embed_message(
                'Error',
                f'Problem getting your data, please `!registerdesc` to fix this'
            ))

        await message.channel.send(embed=embed_message(
            'Nightfall Report',
            f'https://nightfall.report/guardian/{system}/{destinyID}'))
Пример #2
0
    async def handle(self, params, message, mentioned_user, client):
        async with message.channel.typing():
            # get basic user data
            destinyID = lookupDestinyID(mentioned_user.id)
            system = lookupSystem(destinyID)
            heatmap_url = f"https://chrisfried.github.io/secret-scrublandeux/guardian/{system}/{destinyID}"
            characterIDs, character_data = await getCharacterInfoList(destinyID
                                                                      )
            character_playtime = {}  # in seconds
            for characterID in characterIDs:
                character_playtime[characterID] = await getCharStats(
                    destinyID, characterID, "secondsPlayed")

            embed = embed_message(
                f"{mentioned_user.display_name}'s Destiny Stats",
                f"**Total Playtime:** {str(datetime.timedelta(seconds=sum(character_playtime.values())))} \n[Click to see your heatmap]({heatmap_url})",
                "For info on achievable discord roles, type !roles")
            """ char info field """
            embed.add_field(name="⁣",
                            value=f"__**Characters:**__",
                            inline=False)
            for characterID in characterIDs:
                text = f"""Playtime: {str(datetime.timedelta(seconds=character_playtime[characterID]))} \n⁣\nPower: {int(await getCharStats(destinyID, characterID, "highestLightLevel")):,} \nActivities: {int(await getCharStats(destinyID, characterID, "activitiesCleared")):,} \nKills: {int(await getCharStats(destinyID, characterID, "kills")):,} \nDeaths: {int(await getCharStats(destinyID, characterID, "deaths")):,} \nEfficiency: {round(await getCharStats(destinyID, characterID, "efficiency"), 2)}"""
                embed.add_field(
                    name=
                    f"""{character_data[characterID]["class"]} ({character_data[characterID]["race"]} / {character_data[characterID]["gender"]})""",
                    value=text,
                    inline=True)
            """ triumph info field """
            embed.add_field(name="⁣", value=f"__**Triumphs:**__", inline=False)

            # get triumph data
            triumphs = await getProfile(destinyID, 900)
            embed.add_field(
                name="Lifetime Triumph Score",
                value=
                f"""{triumphs["profileRecords"]["data"]["lifetimeScore"]:,}""",
                inline=True)
            embed.add_field(
                name="Active Triumph Score",
                value=
                f"""{triumphs["profileRecords"]["data"]["activeScore"]:,}""",
                inline=True)
            embed.add_field(
                name="Legacy Triumph Score",
                value=
                f"""{triumphs["profileRecords"]["data"]["legacyScore"]:,}""",
                inline=True)

            # get triumph completion rate
            triumphs_data = triumphs["profileRecords"]["data"]["records"]
            triumphs_completed = 0
            triumphs_no_data = 0
            for triumph in triumphs_data.values():
                status = True
                if "objectives" in triumph:
                    for part in triumph['objectives']:
                        status &= part['complete']
                elif "intervalObjectives" in triumph:
                    for part in triumph['intervalObjectives']:
                        status &= part['complete']
                else:
                    triumphs_no_data += 1
                    continue
                if status:
                    triumphs_completed += 1
            embed.add_field(
                name="Triumphs",
                value=
                f"{triumphs_completed} / {len(triumphs_data) - triumphs_no_data}",
                inline=True)

            # get seal completion rate
            seals, completed_seals = await getPlayerSeals(destinyID)
            embed.add_field(name="Seals",
                            value=f"{len(completed_seals)} / {len(seals)}",
                            inline=True)

            # collection completion data
            collections_data = (await getProfile(
                destinyID, 800))["profileCollectibles"]["data"]["collectibles"]
            collectibles_completed = 0
            for collectible in collections_data.values():
                if collectible['state'] & 1 == 0:
                    collectibles_completed += 1
            embed.add_field(
                name="Collections",
                value=f"{collectibles_completed} / {len(collections_data)}",
                inline=True)

        await message.reply(embed=embed)