From 078e36082a0fd3178caf3337f42bcb5458ed679c Mon Sep 17 00:00:00 2001 From: Florian SYLVAIN Date: Thu, 11 Feb 2021 21:27:56 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20-=20New=20command=20$osu=5Flastgame?= =?UTF-8?q?=20{username}=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++++ assets/osu_record1.gif | Bin 0 -> 37674 bytes python/main.py | 33 ++++++++++++++++++++++++++++++--- python/osu_api.py | 18 +++++++++++++++--- 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 assets/osu_record1.gif diff --git a/README.md b/README.md index 8c19a6d..3bb4b8d 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,10 @@
+![](assets/osu_record1.gif) + +
+ # 📢 Commands
@@ -65,6 +69,13 @@ $osu_profile {osu_username} ``` This command will display a message with all the (basics) stats from the Osu! profile you ask for. + +### **osu_lastgame** +``` +$osu_lastgame {osu_username} +``` +This command will display a message with all the stats from the last Osu! game the player you asked for played. +
# âš™ Configuration diff --git a/assets/osu_record1.gif b/assets/osu_record1.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b8f28e38a135979c2eea1c82af8dd8bb97f035a GIT binary patch literal 37674 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%0Dxx$ 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 literal 0 HcmV?d00001 diff --git a/python/main.py b/python/main.py index 667bbdd..fcc6197 100644 --- a/python/main.py +++ b/python/main.py @@ -3,12 +3,12 @@ import socket import re import discord from private import * +from osu_api import * from discord.ext import tasks, commands from riot_api import rank_track, WATCHER, REGION from riotwatcher import ApiError from emoji import demojize from twitch import TwitchClient -from osu_api import ask_osu bot = commands.Bot(command_prefix='$') twitch_client = TwitchClient(client_id=ID_TWITCH, oauth_token=TOKEN_TWITCH) @@ -170,26 +170,53 @@ async def issou(ctx, arg1: discord.User = None): @bot.command() async def osu_profile(ctx, arg): await del_message(ctx) - lst = await ask_osu(arg) + lst = await ask_osu_profile(arg) if lst == 1: await ctx.send('The username you entered is unknown.') else: embed = discord.Embed(title=arg, url='https://osu.ppy.sh/users/' + str(lst[0])) - embed.set_thumbnail(url='https://a.ppy.sh/' + str(lst[0])) embed.set_author(name='Osu!', url='https://osu.ppy.sh/home', icon_url=r'https://upload.wikimedia.org/wikipedia/commons/4/44/Osu%21Logo_%282019%29.png') + embed.set_thumbnail(url='https://a.ppy.sh/' + str(lst[0])) embed.add_field(name='Global Ranking', value='#'+str('{:,}'.format(lst[8]))) embed.add_field(name='Total Play Time', value= str("%.0f" % ((lst[6] % (86400 * 30)) / 86400))+'d '+ str("%.0f" % ((lst[6] % 86400) / 3600))+'h '+ str("%.0f" % ((lst[6] % 3600) / 60))+'m ') + embed.add_field(name='|', value='|') embed.add_field(name='Level', value=str("%.0f" % lst[7])) embed.add_field(name='Ranked Score', value=str('{:,}'.format(lst[1]))) embed.add_field(name='Hit Accuracy', value=str("%.2f" % lst[2])+'%') embed.add_field(name='Play Count', value=str('{:,}'.format(lst[3]))) embed.add_field(name='Total Score', value=str('{:,}'.format(lst[4]))) embed.add_field(name='Total Hits', value=str('{:,}'.format(lst[5]))) + await ctx.send(embed=embed) + +@bot.command() +async def osu_lastgame(ctx, arg): + await del_message(ctx) + lst = await ask_osu_last_game(arg) + if lst == 1: + await ctx.send('The player you entered is unknown or didn\'t played any game recently.') + else: + embed = discord.Embed(title=str(lst[1]) + ' by ' + str(lst[2]), url='https://osu.ppy.sh/beatmapsets/' + str(lst[0]), + description='BPM: ' + str("%.0f" % lst[3]) + ' ; Stars: ' + str("%.1f" % lst[4]) + + ' ; CS: ' + str(lst[5]) + ' ; OD: ' + str(lst[6]) + + ' ; AR: ' + str(lst[7]) + ' ; HP: ' + str(lst[8])) + embed.set_author(name='Osu!', url='https://osu.ppy.sh/home', + icon_url=r'https://upload.wikimedia.org/wikipedia/commons/4/44/Osu%21Logo_%282019%29.png') + embed.set_thumbnail(url='https://b.ppy.sh/thumb/' + str(lst[0]) + 'l.jpg') + embed.add_field(name='Rank', value=str(lst[11])) + embed.add_field(name='Score', value=str('{:,}'.format(lst[9]))) + embed.add_field(name='Max Combo', value=str(lst[10])) + embed.add_field(name='300', value=str(lst[12])) + embed.add_field(name='100', value=str(lst[13])) + embed.add_field(name='Accuracy', + value=str("%.2f" % ((lst[12]/(lst[12]+lst[13]+lst[14]+lst[15]))*100)) + '%') + embed.add_field(name='50', value=str(lst[14])) + embed.add_field(name='Miss', value=str(lst[15])) + embed.add_field(name='Player :', value=str(arg)) await ctx.send(embed=embed) diff --git a/python/osu_api.py b/python/osu_api.py index 3490486..e3d7eb7 100644 --- a/python/osu_api.py +++ b/python/osu_api.py @@ -4,12 +4,24 @@ import requests api = OsuApi(TOKEN_OSU, connector=ReqConnector()) -async def ask_osu(username): +async def ask_osu_profile(username): results = api.get_user(username) if not results: return 1 r = results[0] - liste = [r.user_id, r.ranked_score, r.accuracy, r.playcount, + return [r.user_id, r.ranked_score, r.accuracy, r.playcount, r.total_score, (r.count300 + r.count100 + r.count50), r.total_seconds_played, r.level, r.pp_rank] - return liste + + +async def ask_osu_last_game(username): + last_game = api.get_user_recent(username) + if not last_game: + return 1 + lg = last_game[0] + lm = api.get_beatmaps(beatmap_id=lg.beatmap_id)[0] + return [lm.beatmapset_id, lm.title, lm.creator, + lm.bpm, lm.difficultyrating, lm.diff_size, lm.diff_overall, + lm.diff_approach, lm.diff_drain, lg.score, + lg.maxcombo, lg.rank, lg.count300, lg.count100, + lg.count50, lg.countmiss]