Skip to content

Commit

Permalink
Rewritten Xbox cog (now using xbox-python-api)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rarmash committed May 18, 2024
1 parent b2a42f2 commit cf699b2
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 57 deletions.
1 change: 0 additions & 1 deletion gears/fortnite.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from discord.ext import commands
from discord.commands import SlashCommandGroup
from options import fortniteapi, myclient, servers_data
import json
import requests

class Fortnite(commands.Cog):
Expand Down
104 changes: 57 additions & 47 deletions gears/xbox.py
Original file line number Diff line number Diff line change
@@ -1,72 +1,80 @@
import requests
import discord
from discord.ext import commands
from discord.commands import SlashCommandGroup
from options import xboxapi, debugmode, myclient
from discord.ext import commands
from xpa import XPA

from options import xboxapi, myclient

xpa = XPA(xboxapi)


def get_games_amount(xuid):
games_list = xpa.get_user_achievements(xuid)

title_count = len(games_list)
recentgame = games_list[0]["name"]
curscoreonrecgame = games_list[0]["achievement"]["currentGamerscore"]
totalscoreonrecgame = games_list[0]["achievement"]["totalGamerscore"]
return title_count, recentgame, curscoreonrecgame, totalscoreonrecgame


def get_xbox_gamertag(ctx, gamertag):
if not gamertag:
author_id = str(ctx.author.id)
user_data = myclient[f"{str(ctx.guild.id)}"]["Users"].find_one({"_id": author_id})
if user_data:
gamertag = user_data.get("xbox")

return gamertag


class Xbox(commands.Cog):
def __init__(self, bot):
self.Bot = bot

xbox = SlashCommandGroup("xbox", "Команды Xbox")

def get_xbox_gamertag(self, ctx, gamertag):
if not gamertag:
author_id = str(ctx.author.id)
user_data = myclient[f"{str(ctx.guild.id)}"]["Users"].find_one({"_id": author_id})
if user_data:
gamertag = user_data.get("xbox")

return gamertag

def get_user_stats(self, gamertag):
response = requests.get(f'https://xbl.io/api/v2/search/{gamertag}', headers={'x-authorization': xboxapi})
response_data = response.json().get("people", [{}])[0]
return response_data

def get_games_amount(self, xuid):
response = requests.get(f'https://xbl.io/api/v2/achievements/player/{xuid}', headers={'x-authorization': xboxapi}).json()
title_count = len(response["titles"])
recentgame = response["titles"][0]["name"]
curscoreonrecgame = response["titles"][0]["achievement"]["currentGamerscore"]
totalscoreonrecgame = response["titles"][0]["achievement"]["totalGamerscore"]
return title_count, recentgame, curscoreonrecgame, totalscoreonrecgame

@xbox.command(description='Посмотреть статистику по пользователю')
async def stats(self, ctx: discord.ApplicationContext, gamertag = None):
async def stats(self, ctx: discord.ApplicationContext, gamertag=None):
Collection = myclient[f"{str(ctx.guild.id)}"]["Users"]
await ctx.defer()
gamertag = self.get_xbox_gamertag(ctx, gamertag)
gamertag = get_xbox_gamertag(ctx, gamertag)
if not gamertag:
await ctx.respond("Вы не привязали профиль Xbox к учётной записи Discord. Сделайте это, используя команду `/xbox connect <Gamertag>`!", ephemeral=True)
await ctx.respond(
"Вы не привязали профиль Xbox к учётной записи Discord. Сделайте это, используя команду `/xbox connect <Gamertag>`!",
ephemeral=True)
return
try:
stats_data = self.get_user_stats(gamertag)
embed = discord.Embed(title=f'Карточка игрока {stats_data["gamertag"]}', color=int(stats_data["preferredColor"]["primaryColor"], 16))
embed.add_field(name="Gamerscore", value=f'🅖 {stats_data["gamerScore"]}')
if stats_data["detail"]["accountTier"] == "Gold":
gamer_info = xpa.get_account_info_gamertag(gamertag)
embed = discord.Embed(title=f"Карточка игрока {gamer_info.gamertag}",
color=int(gamer_info.preferredColor["primaryColor"], 16))
embed.add_field(name="Gamerscore", value=f"🅖 {gamer_info.gamerScore}")
if gamer_info.accountTier == "Gold":
goldstatus = "Активен"
else:
goldstatus = "Не активен"
embed.add_field(name="Статус Game Pass Core", value=goldstatus)
embed.add_field(name="Фолловеров", value=f'{stats_data["detail"]["followerCount"]}')
embed.add_field(name="Друзей", value=f'{stats_data["detail"]["followingCount"]}')
embed.add_field(name="Фолловеров", value=gamer_info.followerCount)
embed.add_field(name="Друзей", value=gamer_info.followingCount)
try:
title_count, recentgame, curscoreonrecgame, totalscoreonrecgame = self.get_games_amount(stats_data["xuid"])
title_count, recentgame, curscoreonrecgame, totalscoreonrecgame = get_games_amount(gamer_info.xuid)
embed.add_field(name="Сыграно игр", value=title_count)
embed.add_field(name="Недавно играл в", value=f"{recentgame} (🅖 {curscoreonrecgame}/{totalscoreonrecgame})")
embed.add_field(name="Недавно играл в",
value=f"{recentgame} (🅖 {curscoreonrecgame}/{totalscoreonrecgame})")
except IndexError:
embed.add_field(name="Игровая статистика", value="Отсутствует, либо скрыта")
embed.add_field(name = "Ссылка на профиль", value = f"[Тык](https://account.xbox.com/ru-ru/Profile?Gamertag={str(stats_data['gamertag']).replace(' ', '%20')})")
embed.add_field(name="Ссылка на профиль",
value=f"[Тык](https://account.xbox.com/ru-ru/Profile?Gamertag={str(gamer_info.gamertag).replace(' ', '%20')})")
try:
embed.add_field(name = "Владелец профиля", value=f"<@{Collection.find_one({'xbox': gamertag})['_id']}>")
embed.add_field(name="Владелец профиля", value=f"<@{Collection.find_one({'xbox': gamertag})['_id']}>")
except TypeError:
pass
if stats_data["isXbox360Gamerpic"] == True:
embed.set_thumbnail(url=f"http://avatar.xboxlive.com/avatar/{str(stats_data['gamertag']).replace(' ', '%20')}/avatarpic-l.png")
if gamer_info.isXbox360Gamerpic == True:
embed.set_thumbnail(
url=f"http://avatar.xboxlive.com/avatar/{str(gamer_info.gamertag).replace(' ', '%20')}/avatarpic-l.png")
else:
embed.set_thumbnail(url=stats_data["displayPicRaw"])
await ctx.respond(embed = embed)
embed.set_thumbnail(url=gamer_info.displayPicRaw)
await ctx.respond(embed=embed)
except KeyError as e:
await ctx.respond(f"❓ Возникла ошибка {e}...", ephemeral=True)

Expand All @@ -76,13 +84,15 @@ async def connect(self, ctx: discord.ApplicationContext, gamertag):
await ctx.defer()
author = str(ctx.author.id)
try:
stats_data = self.get_user_stats(gamertag)
user_info = xpa.get_account_info_gamertag(gamertag)
Collection.update_one({"_id": author}, {"$set": {"xbox": gamertag}})
embed = discord.Embed(description=f"Аккаунт {gamertag} был успешно привязан к вашей учётной записи!", color=int(stats_data["preferredColor"]["primaryColor"], 16))
embed.set_thumbnail(url=stats_data["displayPicRaw"])
embed = discord.Embed(description=f"Аккаунт {gamertag} был успешно привязан к вашей учётной записи!",
color=int(user_info.preferredColor["primaryColor"], 16))
embed.set_thumbnail(url=user_info.displayPicRaw)
await ctx.respond(embed=embed)
except Exception as e:
await ctx.respond(f"При добавлении возникла ошибка {e}.\nВозможно, вы неверно указали Gamertag.")



def setup(bot):
bot.add_cog(Xbox(bot))
bot.add_cog(Xbox(bot))
3 changes: 1 addition & 2 deletions options.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@
from os import environ
import pymongo
import certifi
import json
from modules.generateConfig import *

# Load environment variables from .env file
load_dotenv()

version = "1.0"
version = "1.0.1"

# Get environment variables
token = environ.get('TOKEN')
Expand Down
14 changes: 7 additions & 7 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
py-cord[voice]==2.4.1
py-cord[voice]==2.5.0
# py-cord @ git+https://github.com/pycord/pycord-v3 # Preparing for Pycord v3
python-dotenv==1.0.0
pymongo==4.5.0
dnspython==2.4.2
python-dotenv==1.0.1
pymongo==4.7.2
dnspython==2.6.1
requests==2.31.0
gtts==2.3.2
gtts==2.5.1
pydub==0.25.1
asyncio==3.4.3
certifi==2023.7.22
requests==2.31.0
certifi==2024.2.2
xbox-python-api==0.1.2.4

0 comments on commit cf699b2

Please sign in to comment.