From c1a1bc23d36c5ed805f4a2b7f1a0a52275c45dbc Mon Sep 17 00:00:00 2001 From: Florian SYLVAIN Date: Thu, 11 Feb 2021 16:01:41 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20-=20New=20command=20$osu=5Fprofile?= =?UTF-8?q?=20=20!=20+=20Massive=20file=20tree=20reorganization?= =?UTF-8?q?=20+=20Updated=20the=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +- chat_record1.gif => assets/chat_record1.gif | Bin issou.mp3 => assets/issou.mp3 | Bin assets/osu_record.gif | Bin 0 -> 76561 bytes rank_record.gif => assets/rank_record.gif | Bin main.py => python/main.py | 362 +++++++++++--------- python/osu_api.py | 15 + riot_api.py => python/riot_api.py | 42 +-- 8 files changed, 245 insertions(+), 189 deletions(-) rename chat_record1.gif => assets/chat_record1.gif (100%) rename issou.mp3 => assets/issou.mp3 (100%) create mode 100644 assets/osu_record.gif rename rank_record.gif => assets/rank_record.gif (100%) rename main.py => python/main.py (65%) create mode 100644 python/osu_api.py rename riot_api.py => python/riot_api.py (97%) diff --git a/README.md b/README.md index fda6a41..293b7bc 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,15 @@
-![](chat_record1.gif) +![](assets/chat_record1.gif)
-![](rank_record.gif) +![](assets/rank_record.gif) + +
+ +![](assets/osu_record.gif)
@@ -54,6 +58,13 @@ $rank {lol_username} ``` This command will display a message with the current League of Legend rank of the EUW account you ask for. Make sure to use quotes if there is spaces in the LoL username. + +### **osu_profile** +``` +$osu_profile {osu_username} +``` +This command will display a message with all the (basics) stats from the Osu! profile you ask for. +
# ⚙ Configuration diff --git a/chat_record1.gif b/assets/chat_record1.gif similarity index 100% rename from chat_record1.gif rename to assets/chat_record1.gif diff --git a/issou.mp3 b/assets/issou.mp3 similarity index 100% rename from issou.mp3 rename to assets/issou.mp3 diff --git a/assets/osu_record.gif b/assets/osu_record.gif new file mode 100644 index 0000000000000000000000000000000000000000..b75cda6b96608c8b45eed13704e98bcb5e90f52e GIT binary patch literal 76561 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 literal 0 HcmV?d00001 diff --git a/rank_record.gif b/assets/rank_record.gif similarity index 100% rename from rank_record.gif rename to assets/rank_record.gif diff --git a/main.py b/python/main.py similarity index 65% rename from main.py rename to python/main.py index f86e8eb..667bbdd 100644 --- a/main.py +++ b/python/main.py @@ -1,166 +1,196 @@ -import asyncio -import socket -import re -import discord -from private 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 - -bot = commands.Bot(command_prefix='$') -twitch_client = TwitchClient(client_id=ID_TWITCH, oauth_token=TOKEN_TWITCH) -chats = dict() - - -class ChatObj: - def __init__(self, twitch_user, discord_channel): - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.twitch_user = twitch_user - self.discord_channel = discord_channel - chats[discord_channel] = self - - def chat_init(self): - try: - self.sock.connect((SERVER, PORT)) - self.sock.send(f"PASS {TOKEN_TWITCH}\n".encode('utf-8')) - self.sock.send(f"NICK {NICKNAME}\n".encode('utf-8')) - self.sock.send(f"JOIN {'#' + self.twitch_user}\n".encode('utf-8')) - self.sock.settimeout(0.0) - self.sock.setblocking(False) - return 1 - except OSError: - return 0 - - @tasks.loop(seconds=1) - async def twitch(self): - await bot.wait_until_ready() - try: - resp = self.sock.recv(2048).decode('utf-8') - except socket.error: - resp = '' - - if resp.startswith('PING'): - self.sock.send("PONG\n".encode('utf-8')) - - elif len(resp) > 0: - try: - chain = re.search(r':(.*)\!.*@.*\.tmi\.twitch\.tv PRIVMSG #(.*) :(.*)', demojize(resp)) - username = chain.group(1) - message = chain.group(3) - msg = f"**__{username}__ :** {message}" - await self.discord_channel.send(msg) - except discord.DiscordException: - pass - except AttributeError: - pass - - @twitch.after_loop - async def after_twitch(self): - self.sock.shutdown(1) - try: - self.sock.close() - except OSError: - pass - - -def check_user(name): - user = twitch_client.users.translate_usernames_to_ids([name]) - if not user: - return False - return True - - -async def del_message(ctx): - try: - await ctx.message.delete() - except discord.errors.Forbidden: - pass - - -@bot.event -async def on_ready(): - default_activity = discord.Activity(type=discord.ActivityType.listening, name="$help") - await bot.change_presence(activity=default_activity) - print('We have logged in as {0.user}'.format(bot)) - - -@bot.command() -async def chat_set(ctx, arg1): - await del_message(ctx) - what_channel = ctx.channel - if what_channel in list(chats): - await ctx.send("```A chat is already active, you have to stop it before with the cmd $chat_stop !```") - else: - if check_user(arg1): - obj = ChatObj(arg1, what_channel) - if obj.chat_init(): - await ctx.send(f'```Now connected to {arg1}\'s twitch channel !```') - obj.twitch.start() - else: - await ctx.send('```Something went wrong when trying to access Twitch IRC.```') - else: - await ctx.send('```This twitch channel doesn\'t seems to exist.```') - - -@bot.command() -async def chat_stop(ctx): - await del_message(ctx) - chan = ctx.channel - if chan in list(chats): - chats[chan].twitch.stop() - del chats[chan] - await asyncio.sleep(1) - message = '```The chat was successfully stopped !```' - else: - message = '```There is no active chat in this channel.```' - await ctx.send(message) - - -@bot.command() -async def rank(ctx, arg, argf=None): - await del_message(ctx) - if argf is None: - try: - player = WATCHER.summoner.by_name(REGION, arg) - ranks = rank_track(player) - embed = discord.Embed(title=arg, url="https://www.youtube.com/watch?v=dQw4w9WgXcQ") - embed.set_thumbnail(url="http://ddragon.leagueoflegends.com/cdn/11.2.1/img/profileicon/" + str( - player['profileIconId']) + ".png") - if isinstance(ranks, list): - for rank_s in ranks: - embed.add_field(name=rank_s[0], value=str(rank_s[1]) + ' ' + str(rank_s[2]) + ' ' + str( - rank_s[3]) + ' LP' + '\n' + str(rank_s[4]) + 'W/' + str(rank_s[5]) + 'L', inline=False) - else: - embed.description = ranks - await ctx.send(embed=embed) - except ApiError: - await ctx.send("The nickname is unknown.") - else: - await ctx.send("If you are trying to use a nickname with spaces, please surround it with quotes.") - - -@bot.command() -async def issou(ctx, arg1: discord.User = None): - if arg1 is not None: - user = arg1 - else: - user = ctx.message.author - await del_message(ctx) - try: - voice_channel = user.voice.channel - except AttributeError: - voice_channel = None - - if voice_channel is not None: - voice = await voice_channel.connect() - voice.play(discord.FFmpegPCMAudio('issou.mp3')) - if voice.is_playing(): - await asyncio.sleep(1) - await voice.disconnect() - else: - await ctx.send('You or the targeted person are not connected to any channel.') - - -bot.run(TOKEN_BOT) +import asyncio +import socket +import re +import discord +from private 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) +chats = dict() + + +class ChatObj: + def __init__(self, twitch_user, discord_channel): + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.twitch_user = twitch_user + self.discord_channel = discord_channel + chats[discord_channel] = self + + def chat_init(self): + try: + self.sock.connect((SERVER, PORT)) + self.sock.send(f'PASS {TOKEN_TWITCH}\n'.encode('utf-8')) + self.sock.send(f'NICK {NICKNAME}\n'.encode('utf-8')) + self.sock.send(f"JOIN {'#' + self.twitch_user}\n".encode('utf-8')) + self.sock.settimeout(0.0) + self.sock.setblocking(False) + return 1 + except OSError: + return 0 + + @tasks.loop(seconds=1) + async def twitch(self): + await bot.wait_until_ready() + try: + resp = self.sock.recv(2048).decode('utf-8') + except socket.error: + resp = '' + + if resp.startswith('PING'): + self.sock.send('PONG\n'.encode('utf-8')) + + elif len(resp) > 0: + try: + chain = re.search(r':(.*)\!.*@.*\.tmi\.twitch\.tv PRIVMSG #(.*) :(.*)', demojize(resp)) + username = chain.group(1) + message = chain.group(3) + msg = f'**__{username}__ :** {message}' + await self.discord_channel.send(msg) + except discord.DiscordException: + pass + except AttributeError: + pass + + @twitch.after_loop + async def after_twitch(self): + self.sock.shutdown(1) + try: + self.sock.close() + except OSError: + pass + + +def check_user(name): + user = twitch_client.users.translate_usernames_to_ids([name]) + if not user: + return False + return True + + +async def del_message(ctx): + try: + await ctx.message.delete() + except discord.errors.Forbidden: + pass + + +@bot.event +async def on_ready(): + default_activity = discord.Activity(type=discord.ActivityType.listening, name='$help') + await bot.change_presence(activity=default_activity) + print('We have logged in as {0.user}'.format(bot)) + + +@bot.command() +async def chat_set(ctx, arg1): + await del_message(ctx) + what_channel = ctx.channel + if what_channel in list(chats): + await ctx.send("```A chat is already active, you have to stop it before with the cmd $chat_stop !```") + else: + if check_user(arg1): + obj = ChatObj(arg1, what_channel) + if obj.chat_init(): + await ctx.send(f'```Now connected to {arg1}\'s twitch channel !```') + obj.twitch.start() + else: + await ctx.send('```Something went wrong when trying to access Twitch IRC.```') + else: + await ctx.send('```This twitch channel doesn\'t seems to exist.```') + + +@bot.command() +async def chat_stop(ctx): + await del_message(ctx) + chan = ctx.channel + if chan in list(chats): + chats[chan].twitch.stop() + del chats[chan] + await asyncio.sleep(1) + message = '```The chat was successfully stopped !```' + else: + message = '```There is no active chat in this channel.```' + await ctx.send(message) + + +@bot.command() +async def rank(ctx, arg, argf=None): + await del_message(ctx) + if argf is None: + try: + player = WATCHER.summoner.by_name(REGION, arg) + ranks = rank_track(player) + embed = discord.Embed(title=arg, url='https://www.youtube.com/watch?v=dQw4w9WgXcQ') + embed.set_thumbnail(url='http://ddragon.leagueoflegends.com/cdn/11.2.1/img/profileicon/' + str( + player['profileIconId']) + '.png') + embed.set_author(name='League Of Legend', url='https://euw.leagueoflegends.com/en-gb/', + icon_url='https://static.wikia.nocookie.net/leagueoflegends/images/0/07/' + + 'League_of_Legends_icon.png/revision/latest?cb=20191018194326') + if isinstance(ranks, list): + for rank_s in ranks: + embed.add_field(name=rank_s[0], value=str(rank_s[1]) + ' ' + str(rank_s[2]) + ' ' + str( + rank_s[3]) + ' LP' + '\n' + str(rank_s[4]) + 'W/' + str(rank_s[5]) + 'L', inline=False) + else: + embed.description = ranks + await ctx.send(embed=embed) + except ApiError: + await ctx.send('The username you entered is unknown.') + else: + await ctx.send('If you are trying to use a username you entered with spaces, please surround it with quotes.') + + +@bot.command() +async def issou(ctx, arg1: discord.User = None): + if arg1 is not None: + user = arg1 + else: + user = ctx.message.author + await del_message(ctx) + try: + voice_channel = user.voice.channel + except AttributeError: + voice_channel = None + + if voice_channel is not None: + voice = await voice_channel.connect() + voice.play(discord.FFmpegPCMAudio('../assets/issou.mp3')) + if voice.is_playing(): + await asyncio.sleep(1) + await voice.disconnect() + else: + await ctx.send('You or the targeted person are not connected to any channel.') + + +@bot.command() +async def osu_profile(ctx, arg): + await del_message(ctx) + lst = await ask_osu(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.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='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.run(TOKEN_BOT) diff --git a/python/osu_api.py b/python/osu_api.py new file mode 100644 index 0000000..3490486 --- /dev/null +++ b/python/osu_api.py @@ -0,0 +1,15 @@ +from osuapi import OsuApi, ReqConnector +from private import TOKEN_OSU +import requests + +api = OsuApi(TOKEN_OSU, connector=ReqConnector()) + +async def ask_osu(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, + r.total_score, (r.count300 + r.count100 + r.count50), + r.total_seconds_played, r.level, r.pp_rank] + return liste diff --git a/riot_api.py b/python/riot_api.py similarity index 97% rename from riot_api.py rename to python/riot_api.py index 11eb05c..c72e7f4 100644 --- a/riot_api.py +++ b/python/riot_api.py @@ -1,21 +1,21 @@ -from riotwatcher import LolWatcher -from private import TOKEN_RIOT - -WATCHER = LolWatcher(TOKEN_RIOT) -REGION = 'EUW1' - -def rank_track(player): - '''function that communicate with Riot API''' - ranked_stats = WATCHER.league.by_summoner(REGION, player['id']) - - if not ranked_stats: - return 'Unranked cette saison.' - - liste = [] - for infos in ranked_stats: - if infos['queueType'] == 'RANKED_SOLO_5x5': - what_rank = 'Solo Queue' - elif infos['queueType'] == 'RANKED_FLEX_SR': - what_rank = 'Flexible' - liste.append([what_rank, infos['tier'], infos['rank'], infos['leaguePoints'], infos['wins'], infos['losses']]) - return liste +from riotwatcher import LolWatcher +from private import TOKEN_RIOT + +WATCHER = LolWatcher(TOKEN_RIOT) +REGION = 'EUW1' + +def rank_track(player): + '''function that communicate with Riot API''' + ranked_stats = WATCHER.league.by_summoner(REGION, player['id']) + + if not ranked_stats: + return 'Unranked cette saison.' + + liste = [] + for infos in ranked_stats: + if infos['queueType'] == 'RANKED_SOLO_5x5': + what_rank = 'Solo Queue' + elif infos['queueType'] == 'RANKED_FLEX_SR': + what_rank = 'Flexible' + liste.append([what_rank, infos['tier'], infos['rank'], infos['leaguePoints'], infos['wins'], infos['losses']]) + return liste