Publish project to Git
This commit is contained in:
commit
5ff2dd9c50
10 changed files with 888 additions and 0 deletions
313
cogs/integrations.py
Normal file
313
cogs/integrations.py
Normal file
|
@ -0,0 +1,313 @@
|
|||
import discord
|
||||
import json
|
||||
import time
|
||||
import urllib.request
|
||||
from discord.ext import commands
|
||||
|
||||
logins = {
|
||||
"steam": {
|
||||
"api-key": "",
|
||||
},
|
||||
"riot": {
|
||||
"api-key": "",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def most_frequent(List):
|
||||
counter = 0
|
||||
num = List[0]
|
||||
for i in List:
|
||||
curr_frequency = List.count(i)
|
||||
if (curr_frequency > counter):
|
||||
counter = curr_frequency
|
||||
num = i
|
||||
return num
|
||||
|
||||
|
||||
class Integrations(commands.Cog):
|
||||
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.command(brief="Steam user's ban info", description="Uses the Steam API to return a specified users detailed ban status.")
|
||||
async def steambans(self, ctx, *, steamID64=""):
|
||||
steamWebApiKey = logins["steam"]["api-key"]
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={steamWebApiKey}&steamids={steamID64}") as url:
|
||||
playerSummaries = json.loads(url.read().decode())
|
||||
try:
|
||||
personaname = playerSummaries['response']['players'][0]['personaname']
|
||||
except:
|
||||
personaname = "*data not found*"
|
||||
try:
|
||||
realname = playerSummaries['response']['players'][0]['realname']
|
||||
except:
|
||||
realname = "*data not found*"
|
||||
try:
|
||||
avatarfull = playerSummaries['response']['players'][0]['avatarfull']
|
||||
except:
|
||||
avatarfull = "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/b5/b5bd56c1aa4644a474a2e4972be27ef9e82e517e_full.jpg"
|
||||
try:
|
||||
profileurl = playerSummaries['response']['players'][0]['profileurl']
|
||||
except:
|
||||
profileurl = f"https://steamcommunity.com/profiles/{steamID64}"
|
||||
except:
|
||||
personaname, realname, avatarfull, profileurl = "*data not loaded*", "*data not loaded*", "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/b5/b5bd56c1aa4644a474a2e4972be27ef9e82e517e_full.jpg", f"https://steamcommunity.com/profiles/{steamID64}"
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"http://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key={steamWebApiKey}&steamids={steamID64}") as url:
|
||||
getPlayerBans = json.loads(url.read().decode())
|
||||
try:
|
||||
communityBanned = getPlayerBans['players'][0]['CommunityBanned']
|
||||
except:
|
||||
communityBanned = "*data not found*"
|
||||
try:
|
||||
vacBanned = getPlayerBans['players'][0]['VACBanned']
|
||||
except:
|
||||
vacBanned = "*data not found*"
|
||||
try:
|
||||
numberOfVACBans = getPlayerBans['players'][0]['NumberOfVACBans']
|
||||
except:
|
||||
numberOfVACBans = "*data not found*"
|
||||
try:
|
||||
daysSinceLastBan = getPlayerBans['players'][0]['DaysSinceLastBan']
|
||||
except:
|
||||
daysSinceLastBan = "*data not found*"
|
||||
try:
|
||||
numberOfGameBans = getPlayerBans['players'][0]['NumberOfGameBans']
|
||||
except:
|
||||
numberOfGameBans = "*data not found*"
|
||||
try:
|
||||
economyBan = getPlayerBans['players'][0]['EconomyBan']
|
||||
except:
|
||||
economyBan = "*data not found*"
|
||||
except:
|
||||
communityBanned, vacBanned, numberOfVACBans, daysSinceLastBan, numberOfGameBans, economyBan = "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*"
|
||||
embed = discord.Embed(title="Steam Bans Check", description="")
|
||||
embed.set_image(url=f"{avatarfull}")
|
||||
embed.add_field(name="Username", value=f"{personaname}")
|
||||
embed.add_field(name="Real name", value=f"{realname}")
|
||||
embed.add_field(name="Profile url", value=f"{profileurl}")
|
||||
embed.add_field(name="VAC", value=f"{vacBanned}")
|
||||
embed.add_field(name="Number of VAC bans", value=f"{numberOfVACBans}")
|
||||
embed.add_field(name="Days since last ban", value=f"{daysSinceLastBan}")
|
||||
embed.add_field(name="Number of game bans", value=f"{numberOfGameBans}")
|
||||
embed.add_field(name="Community banned", value=f"{communityBanned}")
|
||||
embed.add_field(name="Economy ban", value=f"{economyBan}")
|
||||
embed.colour = (0x5dcff6)
|
||||
embed.set_footer(text="Steam",
|
||||
icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Steam_icon_logo.svg/2000px-Steam_icon_logo.svg.png")
|
||||
await ctx.send(content=None, embed=embed)
|
||||
|
||||
@commands.command(aliases=["csgo", "cs"], brief="CS:GO stats info", description="Uses the Steam API to return and calculate a specified users Counter-Strike: Global Offensive statistics.")
|
||||
async def csgostats(self, ctx, *, steamID64=""):
|
||||
steamWebApiKey = logins["steam"]["api-key"]
|
||||
try:
|
||||
with urllib.request.urlopen(f"http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={steamWebApiKey}&steamids={steamID64}") as url:
|
||||
playerSummaries = json.loads(url.read().decode())
|
||||
try:
|
||||
personaname = playerSummaries['response']['players'][0]['personaname']
|
||||
except:
|
||||
personaname = "*data not found*"
|
||||
try:
|
||||
realname = playerSummaries['response']['players'][0]['realname']
|
||||
except:
|
||||
realname = "*data not found*"
|
||||
try:
|
||||
avatarfull = playerSummaries['response']['players'][0]['avatarfull']
|
||||
except:
|
||||
avatarfull = "*data not found*"
|
||||
try:
|
||||
profileurl = playerSummaries['response']['players'][0]['profileurl']
|
||||
except:
|
||||
profileurl = "*data not found*"
|
||||
except:
|
||||
personaname, realname, avatarfull, profileurl = "*data not loaded*", "*data not loaded*", "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/b5/b5bd56c1aa4644a474a2e4972be27ef9e82e517e_full.jpg", f"https://steamcommunity.com/profiles/{steamID64}"
|
||||
try:
|
||||
with urllib.request.urlopen(f"http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key={steamWebApiKey}&steamid={steamID64}") as url:
|
||||
getUserStatsForGame = json.loads(url.read().decode())
|
||||
playerstats = getUserStatsForGame["playerstats"]
|
||||
stats = playerstats["stats"]
|
||||
for i in range(len(stats)):
|
||||
if stats[i]['name'] == "total_kills":
|
||||
totalKills = stats[i]['value']
|
||||
if stats[i]['name'] == "total_deaths":
|
||||
totalDeaths = stats[i]['value']
|
||||
if stats[i]['name'] == "total_time_played":
|
||||
totalTimePlayed = stats[i]['value']
|
||||
if stats[i]['name'] == "total_wins":
|
||||
totalWins = stats[i]['value']
|
||||
if stats[i]['name'] == "total_kills_headshot":
|
||||
totalKillsHeadshot = stats[i]['value']
|
||||
if stats[i]['name'] == "total_shots_fired":
|
||||
totalShotsFired = stats[i]['value']
|
||||
if stats[i]['name'] == "total_shots_hit":
|
||||
totalShotsHit = stats[i]['value']
|
||||
if stats[i]['name'] == "total_mvps":
|
||||
totalMvps = stats[i]['value']
|
||||
killToDeath = round((totalKills / totalDeaths), 2)
|
||||
accuracy = round((totalShotsHit / totalShotsFired * 100), 2)
|
||||
headshotPercentage = round((totalKillsHeadshot / totalKills * 100), 2)
|
||||
totalTimePlayed = round(totalTimePlayed / 3600)
|
||||
except:
|
||||
killToDeath, totalKills, totalTimePlayed, accuracy, headshotPercentage, totalMvps = "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*", "*data not loaded*"
|
||||
try:
|
||||
data = {}
|
||||
for i in range(len(stats)):
|
||||
if stats[i]['name'].startswith("total_kills_"):
|
||||
data[f"{stats[i]['name']}"] = int(f"{stats[i]['value']}")
|
||||
try:
|
||||
data.pop("total_kills_knife")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_hegrenade")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_headshot")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_enemy_weapon")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_enemy_blinded")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_knife_fight")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_against_zoomed_sniper")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_molotov")
|
||||
except:
|
||||
error = True
|
||||
try:
|
||||
data.pop("total_kills_taser")
|
||||
except:
|
||||
error = True
|
||||
data = {k: v for k, v in sorted(data.items(), key=lambda item: item[1], reverse=True)} # Sort weapons into most used
|
||||
dict_items = data.items()
|
||||
values = list(dict_items)[:5] # Cut to the top 5 most used
|
||||
for i in range(0, len(values)): # Save stats to easily referenceable variables
|
||||
if i == 0:
|
||||
ak47 = values[i][1]
|
||||
elif i == 1:
|
||||
awp = values[i][1]
|
||||
elif i == 2:
|
||||
m4a1 = values[i][1]
|
||||
elif i == 3:
|
||||
deagle = values[i][1]
|
||||
elif i == 4:
|
||||
hkp2000 = values[i][1]
|
||||
except:
|
||||
error = True
|
||||
if error == True:
|
||||
print(f"error is true")
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"http://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key={steamWebApiKey}&steamids={steamID64}") as url:
|
||||
getPlayerBans = json.loads(url.read().decode())
|
||||
try:
|
||||
vacBanned = getPlayerBans['players'][0]['VACBanned']
|
||||
except:
|
||||
vacBanned = "*data not found*"
|
||||
except:
|
||||
vacBanned = "*data not loaded*"
|
||||
embed = discord.Embed(title="CS:GO Stats", description="")
|
||||
embed.set_image(url=f"{avatarfull}")
|
||||
embed.add_field(name="Username", value=f"{personaname}")
|
||||
embed.add_field(name="Real name", value=f"{realname}")
|
||||
embed.add_field(name="Profile url", value=f"{profileurl}")
|
||||
embed.add_field(name="VAC", value=f"{vacBanned}")
|
||||
embed.add_field(name="K/D", value=f"{killToDeath}")
|
||||
embed.add_field(name="Total Kills", value=f"{totalKills}")
|
||||
embed.add_field(name="Time Played", value=f"{totalTimePlayed} hours")
|
||||
#embed.add_field(name="Win Percentage", value=f"")
|
||||
embed.add_field(name="Accuracy", value=f"{accuracy}%")
|
||||
embed.add_field(name="Headshot Percentage", value=f"{headshotPercentage}%")
|
||||
embed.add_field(name="MVPs", value=f"{totalMvps}")
|
||||
embed.add_field(name="Total Weapon Kills", value=f"AK-47: {ak47}, M4A1: {m4a1}, AWP: {awp}, DEAGLE: {deagle}, HKP2000: {hkp2000}")
|
||||
embed.colour = (0xf99d1c)
|
||||
embed.set_footer(text="Counter-Strike: Global Offensive", icon_url="http://i.imgur.com/JP5mOFP.png")
|
||||
await ctx.send(content=None, embed=embed)
|
||||
|
||||
@commands.command(brief="UNFINISHED - League of Legends Stats", description="League of Legends Stats")
|
||||
async def lol(self, ctx, name, region="DEFAULT"):
|
||||
print(region.casefold())
|
||||
start = time.time()
|
||||
riotGamesApiKey = logins["riot"]["api-key"]
|
||||
regions = ["BR1", "EUN1", "EUW1", "JP1", "KR", "LA1", "LA2", "NA1", "OC1", "TR1", "RU"]
|
||||
if region == "DEFAULT":
|
||||
for i in range(0, len(regions)):
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"https://{regions[i].casefold()}.api.riotgames.com/lol/summoner/v4/summoners/by-name/{name.casefold()}?api_key={riotGamesApiKey}") as url:
|
||||
data = json.loads(url.read().decode())
|
||||
print(f"FOUND {regions[i]}")
|
||||
correctRegion = regions[i].casefold()
|
||||
if data == None:
|
||||
break # Stop searching through the regions if one has been found
|
||||
except:
|
||||
print(f"NOT FOUND {regions[i]}")
|
||||
else:
|
||||
try:
|
||||
print(f"{region, name, riotGamesApiKey}")
|
||||
print(
|
||||
f"https://{region.casefold()}.api.riotgames.com/lol/summoner/v4/summoners/by-name/{name.casefold()}?api_key={riotGamesApiKey}")
|
||||
with urllib.request.urlopen(
|
||||
f"https://{region.casefold()}.api.riotgames.com/lol/summoner/v4/summoners/by-name/{name.casefold()}?api_key={riotGamesApiKey}") as url:
|
||||
data = json.loads(url.read().decode())
|
||||
correctRegion = region.casefold()
|
||||
except:
|
||||
print(f"error")
|
||||
name = data["name"]
|
||||
accountId = data["accountId"]
|
||||
summonerLevel = data["summonerLevel"]
|
||||
profileIconId = data["profileIconId"]
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"https://{correctRegion.casefold()}.api.riotgames.com/lol/match/v4/matchlists/by-account/{accountId}?api_key={riotGamesApiKey}") as url:
|
||||
data2 = json.loads(url.read().decode())
|
||||
except:
|
||||
print("error2")
|
||||
lane = []
|
||||
for i in range(0, len(data2)):
|
||||
lane.append(data2["matches"][i]["lane"])
|
||||
role = []
|
||||
for i in range(0, len(data2)):
|
||||
role.append(data2["matches"][i]["role"])
|
||||
champion = []
|
||||
for i in range(0, len(data2)):
|
||||
champion.append(data2["matches"][i]["champion"])
|
||||
totalGames = data2["totalGames"]
|
||||
embed = discord.Embed(title="League of Legends Stats", description="")
|
||||
embed.add_field(name="Name", value=f"{name}")
|
||||
embed.add_field(name="Region", value=f"{correctRegion}")
|
||||
# embed.add_field(name="Account ID", value=f"{accountId}")
|
||||
embed.add_field(name="Summoner Level", value=f"{summonerLevel}")
|
||||
embed.add_field(name="Favourite Lane", value=f"{most_frequent(lane)}")
|
||||
embed.add_field(name="Favourite Role", value=f"{most_frequent(role)}")
|
||||
embed.add_field(name="Favourite Champion", value=f"{most_frequent(champion)}")
|
||||
embed.add_field(name="Total Games", value=f"{totalGames}")
|
||||
embed.colour = (0xc28f2c)
|
||||
embed.set_footer(text="League of Legends",
|
||||
icon_url="https://pbs.twimg.com/profile_images/1229450306343145472/eOInxRFz_400x400.png")
|
||||
end = time.time()
|
||||
embed.add_field(name="Time Taken", value=f"{round(end - start)} second(s)")
|
||||
await ctx.send(content=None, embed=embed)
|
||||
|
||||
@commands.command(brief="UNRELEASED - Valorant Stats", description="Valorant Stats")
|
||||
async def valorant(self, ctx, name="DEFAULT", region="DEFAULT"):
|
||||
await ctx.send(f"GAME NOT RELEASED YET")
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(Integrations(bot))
|
Loading…
Add table
Add a link
Reference in a new issue