2020-01-20 21:47:45 +00:00
|
|
|
|
from typing import *
|
|
|
|
|
from royalnet.commands import *
|
|
|
|
|
from royalnet.utils import *
|
2020-04-29 16:57:32 +00:00
|
|
|
|
from ..tables import Steam, FiorygiTransaction
|
2020-01-20 21:47:45 +00:00
|
|
|
|
import steam
|
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SteampoweredCommand(Command):
|
|
|
|
|
name: str = "steampowered"
|
|
|
|
|
|
|
|
|
|
description: str = "Connetti il tuo account di Steam!"
|
|
|
|
|
|
2020-01-20 23:54:55 +00:00
|
|
|
|
syntax: str = "{profile_url}"
|
2020-01-20 21:47:45 +00:00
|
|
|
|
|
|
|
|
|
def __init__(self, interface: CommandInterface):
|
|
|
|
|
super().__init__(interface)
|
|
|
|
|
if "Steam" not in self.config or "web_api_key" not in self.config["Steam"]:
|
|
|
|
|
raise ConfigurationError("[c]Steam.web_api_key[/c] config option is missing!")
|
|
|
|
|
self._api = steam.WebAPI(self.config["Steam"]["web_api_key"])
|
|
|
|
|
|
2020-04-02 14:56:52 +00:00
|
|
|
|
@staticmethod
|
|
|
|
|
def _display(account: Steam):
|
2020-01-20 21:47:45 +00:00
|
|
|
|
string = f"ℹ️ [b]{account.persona_name}[/b]\n" \
|
|
|
|
|
f"{account.profile_url}\n" \
|
|
|
|
|
f"\n" \
|
2020-01-20 23:54:55 +00:00
|
|
|
|
f"SteamID: [c]{account.steamid.as_32}[/c]\n" \
|
|
|
|
|
f"SteamID2: [c]{account.steamid.as_steam2}[/c]\n" \
|
|
|
|
|
f"SteamID3: [c]{account.steamid.as_steam3}[/c]\n" \
|
|
|
|
|
f"SteamID64: [c]{account.steamid.as_64}[/c]\n" \
|
|
|
|
|
f"\n" \
|
|
|
|
|
f"Created on: [b]{account.account_creation_date}[/b]\n"
|
2020-01-20 21:47:45 +00:00
|
|
|
|
return string
|
|
|
|
|
|
2020-04-02 14:56:52 +00:00
|
|
|
|
@staticmethod
|
|
|
|
|
async def _call(method, *args, **kwargs):
|
|
|
|
|
try:
|
|
|
|
|
await asyncify(method, *args, **kwargs)
|
|
|
|
|
except Exception:
|
|
|
|
|
raise ExternalError("Steam API request returned an error.")
|
|
|
|
|
|
2020-01-20 21:47:45 +00:00
|
|
|
|
async def _update(self, account: Steam):
|
2020-04-02 14:56:52 +00:00
|
|
|
|
# noinspection PyProtectedMember
|
|
|
|
|
response = await self._call(self._api.ISteamUser.GetPlayerSummaries_v2, steamids=account._steamid)
|
2020-01-20 21:47:45 +00:00
|
|
|
|
r = response["response"]["players"][0]
|
|
|
|
|
account.persona_name = r["personaname"]
|
|
|
|
|
account.profile_url = r["profileurl"]
|
|
|
|
|
account.avatar = r["avatar"]
|
|
|
|
|
account.primary_clan_id = r["primaryclanid"]
|
|
|
|
|
account.account_creation_date = datetime.datetime.fromtimestamp(r["timecreated"])
|
|
|
|
|
|
|
|
|
|
async def run(self, args: CommandArgs, data: CommandData) -> None:
|
|
|
|
|
author = await data.get_author()
|
|
|
|
|
if len(args) > 0:
|
2020-01-20 23:54:55 +00:00
|
|
|
|
url = args.joined()
|
2020-04-02 14:56:52 +00:00
|
|
|
|
steamid64 = await self._call(steam.steamid.steam64_from_url, url)
|
|
|
|
|
response = await self._call(self._api.ISteamUser.GetPlayerSummaries_v2, steamids=steamid64)
|
2020-01-20 21:47:45 +00:00
|
|
|
|
r = response["response"]["players"][0]
|
|
|
|
|
steam_account = self.alchemy.get(Steam)(
|
|
|
|
|
user=author,
|
2020-01-20 23:54:55 +00:00
|
|
|
|
_steamid=int(steamid64),
|
2020-01-20 21:47:45 +00:00
|
|
|
|
persona_name=r["personaname"],
|
|
|
|
|
profile_url=r["profileurl"],
|
|
|
|
|
avatar=r["avatarfull"],
|
|
|
|
|
primary_clan_id=r["primaryclanid"],
|
|
|
|
|
account_creation_date=datetime.datetime.fromtimestamp(r["timecreated"])
|
|
|
|
|
)
|
|
|
|
|
data.session.add(steam_account)
|
|
|
|
|
await data.session_commit()
|
|
|
|
|
await data.reply(f"↔️ Account {steam_account} connesso a {author}!")
|
2020-04-29 16:57:32 +00:00
|
|
|
|
await FiorygiTransaction.spawn_fiorygi(data, author, 1,
|
|
|
|
|
"aver connesso il proprio account di Steam a Royalnet")
|
2020-01-20 21:47:45 +00:00
|
|
|
|
else:
|
|
|
|
|
# Update and display the Steam info for the current account
|
|
|
|
|
if len(author.steam) == 0:
|
|
|
|
|
raise UserError("Nessun account di Steam trovato.")
|
|
|
|
|
message = ""
|
|
|
|
|
for account in author.steam:
|
|
|
|
|
await self._update(account)
|
|
|
|
|
message += self._display(account)
|
|
|
|
|
message += "\n"
|
|
|
|
|
await data.session_commit()
|
|
|
|
|
await data.reply(message)
|