Add scores command
This commit is contained in:
parent
a61f79004e
commit
e3e1474d38
70
cogs/osu.py
70
cogs/osu.py
|
@ -108,6 +108,76 @@ class Osu:
|
||||||
|
|
||||||
await ctx.send("I have just saved your Osu user {}".format(author.display_name))
|
await ctx.send("I have just saved your Osu user {}".format(author.display_name))
|
||||||
|
|
||||||
|
@osu.command(name='score', aliases=['scores'])
|
||||||
|
@utils.custom_perms(send_messages=True)
|
||||||
|
async def osu_scores(self, ctx, *data):
|
||||||
|
"""Find the top x osu scores for a provided member
|
||||||
|
Note: You can only get the top 50 songs for a user
|
||||||
|
|
||||||
|
EXAMPLE: !osu scores @Person 5
|
||||||
|
RESULT: The top 5 maps for the user @Person"""
|
||||||
|
|
||||||
|
# Set the defaults before we go through our passed data to figure out what we want
|
||||||
|
limit = 5
|
||||||
|
member = ctx.message.author
|
||||||
|
# Only loop through the first 2....we care about nothing after that
|
||||||
|
for piece in data[:2]:
|
||||||
|
# First lets try to convert to an int, for limit
|
||||||
|
try:
|
||||||
|
limit = int(piece)
|
||||||
|
# Since Osu's API returns no information about the beatmap on scores
|
||||||
|
# We also need to call it to get the beatmap...in order to not get rate limited
|
||||||
|
# Lets limit this to 50
|
||||||
|
if limit > 50:
|
||||||
|
limit = 50
|
||||||
|
elif limit < 1:
|
||||||
|
limit = 5
|
||||||
|
except:
|
||||||
|
converter = commands.converter.MemberConverter()
|
||||||
|
converter.prepare(ctx, piece)
|
||||||
|
try:
|
||||||
|
member = converter.convert()
|
||||||
|
except commands.converter.BadArgument:
|
||||||
|
pass
|
||||||
|
|
||||||
|
user = self.osu_users.get(member.id)
|
||||||
|
if user is None:
|
||||||
|
await ctx.send("I don't have that user's Osu account saved!")
|
||||||
|
return
|
||||||
|
|
||||||
|
scores = await self.api.get_user_best(user.username, limit=limit)
|
||||||
|
entries = []
|
||||||
|
for i in scores:
|
||||||
|
m = await self.api.get_beatmaps(beatmap_id=i.beatmap_id)
|
||||||
|
m = m[0]
|
||||||
|
entry = {
|
||||||
|
'title': 'Top {} Osu scores for {}'.format(limit, member.display_name),
|
||||||
|
'fields': [
|
||||||
|
{'name': 'Artist', 'value': m.artist},
|
||||||
|
{'name': 'Title', 'value': m.title},
|
||||||
|
{'name': 'Creator', 'value': m.creator},
|
||||||
|
{'name': 'CS (Circle Size)', 'value': m.diff_size},
|
||||||
|
{'name': 'AR (Approach Rate)', 'value': m.diff_approach},
|
||||||
|
{'name': 'HP (Health Drain)', 'value': m.diff_drain},
|
||||||
|
{'name': 'OD (Overall Difficulty)', 'value': m.diff_overall},
|
||||||
|
{'name': 'Length', 'value': m.total_length},
|
||||||
|
{'name': 'Score', 'value': i.score},
|
||||||
|
{'name': 'Max Combo', 'value': i.maxcombo},
|
||||||
|
{'name': 'Hits', 'value': "{}/{}/{}/{} (300/100/50/misses)".format(i.count300, i.count100, i.count50, i.countmiss), "inline": False},
|
||||||
|
{'name': 'Perfect', 'value': "Yes" if i.perfect else "No"},
|
||||||
|
{'name': 'Rank', 'value': i.rank},
|
||||||
|
{'name': 'PP', 'value': i.pp},
|
||||||
|
{'name': 'Mods', 'value': str(i.enabled_mods)},
|
||||||
|
{'name': 'Date', 'value': str(i.date)}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
entries.append(entry)
|
||||||
|
try:
|
||||||
|
pages = utils.DetailedPages(self.bot, message=ctx.message, entries=entries)
|
||||||
|
await pages.paginate()
|
||||||
|
except utils.CannotPaginate as e:
|
||||||
|
await ctx.send(str(e))
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
bot.add_cog(Osu(bot))
|
bot.add_cog(Osu(bot))
|
||||||
|
|
Loading…
Reference in a new issue