add m;import - no cache for collections currently
This commit is contained in:
parent
62a96521c5
commit
8bc3abdf4d
|
@ -6,6 +6,7 @@ import database as db
|
|||
|
||||
onomancer_url = "https://onomancer.sibr.dev/api/"
|
||||
name_stats_hook = "generateStats2?name="
|
||||
collection_hook = "getCollection?token="
|
||||
|
||||
def get_stats(name):
|
||||
player = db.get_stats(name)
|
||||
|
@ -26,4 +27,10 @@ def get_scream(username):
|
|||
else:
|
||||
scream = json.loads(get_stats(username))["soulscream"]
|
||||
db.cache_soulscream(username, scream)
|
||||
return scream
|
||||
return scream
|
||||
|
||||
def get_collection(collection_url):
|
||||
# TODO: should probably add collection cache
|
||||
response = requests.get(onomancer_url + collection_hook + urllib.parse.quote(collection_url))
|
||||
if response.status_code == 200:
|
||||
return json.dumps(response.json())
|
|
@ -9,6 +9,9 @@ class Command:
|
|||
async def execute(self, msg, command):
|
||||
return
|
||||
|
||||
class CommandError(Exception):
|
||||
pass
|
||||
|
||||
class IntroduceCommand(Command):
|
||||
name = "introduce"
|
||||
template = ""
|
||||
|
@ -185,13 +188,31 @@ class SaveTeamCommand(Command):
|
|||
if you did it correctly, you'll get a team embed with a prompt to confirm. Hit the 👍 and it'll be saved."""
|
||||
|
||||
async def execute(self, msg, command):
|
||||
if db.get_team(command.split("\n")[0]) == None:
|
||||
save_task = asyncio.create_task(save_team_batch(msg, command))
|
||||
if db.get_team(command.split('\n',1)[1].split("\n")[0]) == None:
|
||||
team = team_from_message(command)
|
||||
save_task = asyncio.create_task(save_team_confirm(msg, team))
|
||||
await save_task
|
||||
else:
|
||||
name = command.split('\n',1)[1].split('\n')[0]
|
||||
await msg.channel.send(f"{name} already exists. Try a new name, maybe?")
|
||||
|
||||
class ImportCommand(Command):
|
||||
name = "import"
|
||||
template = "m;import [onomancer collection URL]"
|
||||
description = "Imports an onomancer collection as a new team. You can use the new onomancer simsim setting to ensure compatibility."
|
||||
|
||||
async def execute(self, msg, command):
|
||||
team_raw = ono.get_collection(command.strip())
|
||||
if not team_raw == None:
|
||||
team_json = json.loads(team_raw)
|
||||
if db.get_team(team_json["fullName"]) == None:
|
||||
team = team_from_collection(team_json)
|
||||
await asyncio.create_task(save_team_confirm(msg, team))
|
||||
else:
|
||||
await msg.channel.send(f"{team_json['fullName']} already exists. Try a new name, maybe?")
|
||||
else:
|
||||
await msg.channel.send("Something went pear-shaped while we were looking for that collection. You certain it's a valid onomancer URL?")
|
||||
|
||||
class ShowTeamCommand(Command):
|
||||
name = "showteam"
|
||||
template = "m;showteam [name]"
|
||||
|
@ -295,16 +316,17 @@ class AssignOwnerCommand(Command):
|
|||
#await msg.channel.send("We hit a snag. Tell xvi.")
|
||||
|
||||
|
||||
|
||||
|
||||
commands = [
|
||||
IntroduceCommand(),
|
||||
CountActiveGamesCommand(),
|
||||
AssignOwnerCommand(),
|
||||
IdolizeCommand(),
|
||||
ShowIdolCommand(),
|
||||
ShowPlayerCommand(),
|
||||
#SetupGameCommand(),
|
||||
SaveTeamCommand(),
|
||||
ImportCommand(),
|
||||
DeleteTeamCommand(),
|
||||
ShowTeamCommand(),
|
||||
ShowAllTeamsCommand(),
|
||||
SearchTeamsCommand(),
|
||||
|
@ -312,8 +334,6 @@ commands = [
|
|||
CreditCommand(),
|
||||
RomanCommand(),
|
||||
HelpCommand(),
|
||||
DeleteTeamCommand(),
|
||||
AssignOwnerCommand()
|
||||
]
|
||||
|
||||
client = discord.Client()
|
||||
|
@ -383,7 +403,9 @@ async def on_message(msg):
|
|||
comm = next(c for c in commands if command.startswith(c.name))
|
||||
await comm.execute(msg, command[len(comm.name):])
|
||||
except StopIteration:
|
||||
return
|
||||
await msg.channel.send("Can't find that command, boss; try checking the list with `m;help`.")
|
||||
except CommandError as ce:
|
||||
await msg.channel.send(str(ce))
|
||||
|
||||
async def start_game(channel):
|
||||
msg = await channel.send("Play ball!")
|
||||
|
@ -727,8 +749,32 @@ def build_star_embed(player_json):
|
|||
embed.add_field(name=starkeys[key], value=embedstring, inline=False)
|
||||
return embed
|
||||
|
||||
def team_from_collection(collection_raw):
|
||||
newteam_json = json.loads(collection_raw)
|
||||
# verify collection against our own restrictions
|
||||
if len(newteam_json["fullName"]) > 30:
|
||||
raise CommandError("Team names have to be less than 30 characters! Try again.")
|
||||
if len(newteam_json["slogan"]) > 100:
|
||||
raise CommandError("We've given you 100 characters for the slogan. Discord puts limits on us and thus, we put limits on you. C'est la vie.")
|
||||
if len(newteam_json["lineup"]) > 20:
|
||||
raise CommandError("20 players in the lineup, maximum. We're being really generous here.")
|
||||
if not len(newteam_json["rotation"]) == 1:
|
||||
raise CommandError("One and only one pitcher per team, thanks.")
|
||||
for player in newteam_json["lineup"] + newteam_json["rotation"]:
|
||||
if len(player["name"]) > 70:
|
||||
raise CommandError(f"{player['name']} is too long, chief. 70 or less.")
|
||||
|
||||
async def save_team_batch(message, command):
|
||||
#actually build the team
|
||||
newteam = games.team()
|
||||
newteam.name = newteam_json["fullName"]
|
||||
newteam.slogan = newteam_json["slogan"]
|
||||
for player in newteam_json["lineup"]:
|
||||
newteam.add_lineup(games.player(json.dumps(player)))
|
||||
newteam.set_pitcher(games.player(json.dumps(newteam_json["rotation"][0])))
|
||||
|
||||
return newteam
|
||||
|
||||
def team_from_message(command):
|
||||
newteam = games.team()
|
||||
roster = command.split("\n",1)[1].split("\n")
|
||||
newteam.name = roster[0] #first line is team name
|
||||
|
@ -736,21 +782,20 @@ async def save_team_batch(message, command):
|
|||
for rosternum in range(2,len(roster)-1):
|
||||
if roster[rosternum] != "":
|
||||
if len(roster[rosternum]) > 70:
|
||||
await message.channel.send(f"{roster[rosternum]} is too long, chief. 70 or less.")
|
||||
return
|
||||
raise CommandError(f"{roster[rosternum]} is too long, chief. 70 or less.")
|
||||
newteam.add_lineup(games.player(ono.get_stats(roster[rosternum].rstrip())))
|
||||
if len(roster[len(roster)-1]) > 70:
|
||||
await message.channel.send(f"{roster[len(roster)-1]} is too long, chief. 70 or less.")
|
||||
return
|
||||
raise CommandError(f"{roster[len(roster)-1]} is too long, chief. 70 or less.")
|
||||
newteam.set_pitcher(games.player(ono.get_stats(roster[len(roster)-1].rstrip()))) #last line is pitcher name
|
||||
|
||||
if len(newteam.name) > 30:
|
||||
await message.channel.send("Team names have to be less than 30 characters! Try again.")
|
||||
return
|
||||
raise CommandError("Team names have to be less than 30 characters! Try again.")
|
||||
elif len(newteam.slogan) > 100:
|
||||
await message.channel.send("We've given you 100 characters for the slogan. Discord puts limits on us and thus, we put limits on you. C'est la vie.")
|
||||
return
|
||||
raise CommandError("We've given you 100 characters for the slogan. Discord puts limits on us and thus, we put limits on you. C'est la vie.")
|
||||
|
||||
return newteam
|
||||
|
||||
async def save_team_confirm(message, newteam):
|
||||
await message.channel.send(embed=build_team_embed(newteam))
|
||||
checkmsg = await message.channel.send("Does this look good to you, boss?")
|
||||
await checkmsg.add_reaction("👍")
|
||||
|
@ -773,7 +818,6 @@ async def save_team_batch(message, command):
|
|||
await message.channel.send("Look, we don't have all day. 20 seconds is long enough, right? Try again.")
|
||||
return
|
||||
|
||||
|
||||
async def team_pages(msg, all_teams, search_term=None):
|
||||
pages = []
|
||||
page_max = math.ceil(len(all_teams)/25)
|
||||
|
|
Loading…
Reference in New Issue
Block a user