✨ - New command $osu_acc {username} !
@@ -130,3 +130,6 @@ dmypy.json
|
|||||||
|
|
||||||
# Tokens and IDs
|
# Tokens and IDs
|
||||||
private.py
|
private.py
|
||||||
|
|
||||||
|
# Generated JPEG File
|
||||||
|
acc.jpeg
|
||||||
|
|||||||
@@ -15,19 +15,23 @@
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
@@ -67,14 +71,21 @@ This command will display a message with the current League of Legend rank of th
|
|||||||
```
|
```
|
||||||
$osu_profile {osu_username}
|
$osu_profile {osu_username}
|
||||||
```
|
```
|
||||||
This command will display a message with all the (basics) stats from the Osu! profile you ask for.
|
This command will display a message with all the (basics) stats from the Osu! profile you ask for. Make sure to use quotes if there is spaces in the username.
|
||||||
|
|
||||||
|
|
||||||
### **osu_lastgame**
|
### **osu_lastgame**
|
||||||
```
|
```
|
||||||
$osu_lastgame {osu_username}
|
$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.
|
This command will display a message with all the stats from the last Osu! game the player you asked for played. Make sure to use quotes if there is spaces in the username.
|
||||||
|
|
||||||
|
|
||||||
|
### **osu_acc**
|
||||||
|
```
|
||||||
|
$osu_acc {osu_username}
|
||||||
|
```
|
||||||
|
This command will display the Accuracy of the player you asked for on his last games (with a maximum of 10 games).
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 226 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 100 KiB |
@@ -121,7 +121,6 @@ async def chat_stop(ctx):
|
|||||||
|
|
||||||
@bot.command()
|
@bot.command()
|
||||||
async def rank(ctx, arg, argf=None):
|
async def rank(ctx, arg, argf=None):
|
||||||
await del_message(ctx)
|
|
||||||
if argf is None:
|
if argf is None:
|
||||||
try:
|
try:
|
||||||
player = WATCHER.summoner.by_name(REGION, arg)
|
player = WATCHER.summoner.by_name(REGION, arg)
|
||||||
@@ -142,7 +141,7 @@ async def rank(ctx, arg, argf=None):
|
|||||||
except ApiError:
|
except ApiError:
|
||||||
await ctx.send('The username you entered is unknown.')
|
await ctx.send('The username you entered is unknown.')
|
||||||
else:
|
else:
|
||||||
await ctx.send('If you are trying to use a username you entered with spaces, please surround it with quotes.')
|
await ctx.send('If you are trying to use a username with spaces, please surround it with quotes.')
|
||||||
|
|
||||||
|
|
||||||
@bot.command()
|
@bot.command()
|
||||||
@@ -168,59 +167,75 @@ async def issou(ctx, arg1: discord.User = None):
|
|||||||
|
|
||||||
|
|
||||||
@bot.command()
|
@bot.command()
|
||||||
async def osu_profile(ctx, arg):
|
async def osu_profile(ctx, arg, argF=None):
|
||||||
await del_message(ctx)
|
if argF is None:
|
||||||
lst = await ask_osu_profile(arg)
|
lst = await ask_osu_profile(arg)
|
||||||
if lst == 1:
|
if lst == 1:
|
||||||
await ctx.send('The username you entered is unknown.')
|
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_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)
|
||||||
else:
|
else:
|
||||||
embed = discord.Embed(title=arg, url='https://osu.ppy.sh/users/' + str(lst[0]))
|
await ctx.send('If you are trying to use a username with spaces, please surround it with quotes.')
|
||||||
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()
|
@bot.command()
|
||||||
async def osu_lastgame(ctx, arg):
|
async def osu_lastgame(ctx, arg, argF=None):
|
||||||
await del_message(ctx)
|
if argF is None:
|
||||||
lst = await ask_osu_last_game(arg)
|
lst = await ask_osu_last_game(arg)
|
||||||
if lst == 1:
|
if lst == 1:
|
||||||
await ctx.send('The player you entered is unknown or didn\'t played any game recently.')
|
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]) + ' ; AR: ' + str(lst[7]) +
|
||||||
|
' ; OD: ' + str(lst[6]) + ' ; 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='Geki', value=str(lst[17]))
|
||||||
|
embed.add_field(name='Accuracy',
|
||||||
|
value=str("%.2f" % (((lst[12]*300)+(lst[13]*100)+(lst[14]*50))/(sum(lst[12:16])*300)*100) + '%'))
|
||||||
|
embed.add_field(name='100', value=str(lst[13]))
|
||||||
|
embed.add_field(name='Katu', value=str(lst[16]))
|
||||||
|
embed.add_field(name='Player :', value=str(arg))
|
||||||
|
embed.add_field(name='50', value=str(lst[14]))
|
||||||
|
embed.add_field(name='Miss', value=str(lst[15]))
|
||||||
|
embed.add_field(name='|', value='|')
|
||||||
|
await ctx.send(embed=embed)
|
||||||
else:
|
else:
|
||||||
embed = discord.Embed(title=str(lst[1]) + ' by ' + str(lst[2]), url='https://osu.ppy.sh/beatmapsets/' + str(lst[0]),
|
await ctx.send('If you are trying to use a username with spaces, please surround it with quotes.')
|
||||||
description='BPM: ' + str("%.0f" % lst[3]) + ' ; Stars: ' + str("%.1f" % lst[4]) +
|
|
||||||
' ; CS: ' + str(lst[5]) + ' ; AR: ' + str(lst[7]) +
|
|
||||||
' ; OD: ' + str(lst[6]) + ' ; HP: ' + str(lst[8]))
|
@bot.command()
|
||||||
embed.set_author(name='Osu!', url='https://osu.ppy.sh/home',
|
async def osu_acc(ctx, arg, argF=None):
|
||||||
icon_url=r'https://upload.wikimedia.org/wikipedia/commons/4/44/Osu%21Logo_%282019%29.png')
|
if argF is None:
|
||||||
embed.set_thumbnail(url='https://b.ppy.sh/thumb/' + str(lst[0]) + 'l.jpg')
|
test_acc = await ask_osu_acc(arg)
|
||||||
embed.add_field(name='Rank', value=str(lst[11]))
|
if test_acc:
|
||||||
embed.add_field(name='Score', value=str('{:,}'.format(lst[9])))
|
await ctx.send(file=discord.File('acc.jpeg'))
|
||||||
embed.add_field(name='Max Combo', value=str(lst[10]))
|
else:
|
||||||
embed.add_field(name='300', value=str(lst[12]))
|
await ctx.send('The player you entered is unknown or didn\'t played any game recently.')
|
||||||
embed.add_field(name='Geki', value=str(lst[17]))
|
else:
|
||||||
embed.add_field(name='Accuracy',
|
await ctx.send('If you are trying to use a username with spaces, please surround it with quotes.')
|
||||||
value=str("%.2f" % (((lst[12]*300)+(lst[13]*100)+(lst[14]*50))/(sum(lst[12:16])*300)*100) + '%'))
|
|
||||||
embed.add_field(name='100', value=str(lst[13]))
|
|
||||||
embed.add_field(name='Katu', value=str(lst[16]))
|
|
||||||
embed.add_field(name='Player :', value=str(arg))
|
|
||||||
embed.add_field(name='50', value=str(lst[14]))
|
|
||||||
embed.add_field(name='Miss', value=str(lst[15]))
|
|
||||||
embed.add_field(name='|', value='|')
|
|
||||||
await ctx.send(embed=embed)
|
|
||||||
|
|
||||||
|
|
||||||
bot.run(TOKEN_BOT)
|
bot.run(TOKEN_BOT)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from osuapi import OsuApi, ReqConnector
|
from osuapi import OsuApi, ReqConnector
|
||||||
from private import TOKEN_OSU
|
from private import TOKEN_OSU
|
||||||
import requests
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
api = OsuApi(TOKEN_OSU, connector=ReqConnector())
|
api = OsuApi(TOKEN_OSU, connector=ReqConnector())
|
||||||
|
|
||||||
@@ -25,3 +25,30 @@ async def ask_osu_last_game(username):
|
|||||||
lm.diff_approach, lm.diff_drain, lg.score,
|
lm.diff_approach, lm.diff_drain, lg.score,
|
||||||
lg.maxcombo, lg.rank, lg.count300, lg.count100,
|
lg.maxcombo, lg.rank, lg.count300, lg.count100,
|
||||||
lg.count50, lg.countmiss, lg.countkatu, lg.countgeki]
|
lg.count50, lg.countmiss, lg.countkatu, lg.countgeki]
|
||||||
|
|
||||||
|
|
||||||
|
async def ask_osu_acc(username):
|
||||||
|
last_game = api.get_user_recent(username)
|
||||||
|
if not last_game:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
lst = []
|
||||||
|
for game in last_game:
|
||||||
|
total = game.count300 + game.count100 + game.count50 + game.countmiss
|
||||||
|
lst.append((float("%.2f" %(((game.count300 * 300) + (game.count100 * 100) + (game.count50 * 50)) / (total * 300) * 100))))
|
||||||
|
|
||||||
|
nb_games = len(lst)+1
|
||||||
|
min_games = int(min(lst))
|
||||||
|
|
||||||
|
plt.figure(figsize=(9, 5))
|
||||||
|
plt.plot(list(range(1, nb_games)), lst)
|
||||||
|
plt.scatter(list(range(1, nb_games)), lst, color='red')
|
||||||
|
plt.axis([1, nb_games-1, min_games, 100])
|
||||||
|
plt.title('Accuracy of ' + username + ' on his last ' + str(nb_games-1) + ' games.')
|
||||||
|
plt.xticks(range(1, nb_games))
|
||||||
|
plt.yticks(range(min_games, 100, 5))
|
||||||
|
plt.grid(linewidth=0.5)
|
||||||
|
plt.ylabel('Accuracy (%)')
|
||||||
|
plt.xlabel('Games (from recent to oldest)')
|
||||||
|
plt.savefig('acc.jpeg')
|
||||||
|
return 1
|
||||||
|
|||||||