Initial setup
commit
15bab7ac9e
@ -0,0 +1,160 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import discord
|
||||
from discord import app_commands
|
||||
from discord.app_commands import Choice
|
||||
|
||||
import re
|
||||
|
||||
from requests import get
|
||||
from sys import argv
|
||||
from os import environ
|
||||
from json import loads
|
||||
from traceback import format_exc
|
||||
|
||||
def get_cards(query: str):
|
||||
|
||||
print(f"{mana_cost}\t{name}: {type_line}")
|
||||
for line in oracle_text.split('\n'):
|
||||
print(f"\t{line}")
|
||||
|
||||
intents = discord.Intents.default()
|
||||
client = discord.Client(intents=intents)
|
||||
tree = app_commands.CommandTree(client)
|
||||
|
||||
@client.event
|
||||
async def on_ready():
|
||||
await tree.sync()
|
||||
print(f"Logged in as {client.user}")
|
||||
|
||||
mana_numbers = [
|
||||
"<:mana0:292901467382087680>",
|
||||
"<:mana1:292901508373282827>",
|
||||
"<:mana2:292901509060886528>",
|
||||
"<:mana3:292901508771610624>",
|
||||
"<:mana4:292901508712890379>",
|
||||
"<:mana5:292901508796645386>",
|
||||
"<:mana6:292901508780130304>",
|
||||
"<:mana7:292901508540792835>",
|
||||
"<:mana8:292901508830330880>",
|
||||
"<:mana9:292901508826005504>",
|
||||
"<:mana10:292901508851302400>",
|
||||
"<:mana11:292901508838850570>",
|
||||
"<:mana12:292901508838850560>",
|
||||
"<:mana13:292901508872142858>",
|
||||
"<:mana14:292901508855627776>",
|
||||
"<:mana15:1013559311055732826>",
|
||||
"<:mana16:292901508708564993>"
|
||||
]
|
||||
|
||||
|
||||
mana_symbols = {
|
||||
"W": "<:manaw:1007102126813610074>",
|
||||
"U": "<:manau:292901508754702338>",
|
||||
"B": "<:manab:292901508872273920>",
|
||||
"R": "<:manar:292901508796645397>",
|
||||
"G": "<:manag:292901508654301185>",
|
||||
"C": "<:manac:292901508943577088>",
|
||||
"S": "<:manas:292901509081858058>",
|
||||
|
||||
"W/U": "<:manawu:292901508696113153>",
|
||||
"W/B": "<:manawb:292901509044109312>",
|
||||
"B/R": "<:manabr:292901508939382784>",
|
||||
"B/G": "<:manabg:292901508863754241>",
|
||||
"U/B": "<:manaub:292901509056692224>",
|
||||
"U/R": "<:manaur:292901509010817024>",
|
||||
"R/G": "<:manarg:292901508738056193>",
|
||||
"R/W": "<:manarw:292901508834525190>",
|
||||
"G/W": "<:managw:292901508977000448>",
|
||||
"G/U": "<:managu:292901509035851788>",
|
||||
|
||||
"2/W": "<:mana2w:292901508771741696>",
|
||||
"2/U": "<:mana2u:292901508721410058>",
|
||||
"2/B": "<:mana2b:292901508469489667>",
|
||||
"2/R": "<:mana2r:292901508310368259>",
|
||||
"2/G": "<:mana2g:292901508695982080>",
|
||||
|
||||
"C/P": "<:manacp:1271312850740187137>",
|
||||
"W/P": "<:manawp:292901508826005515>",
|
||||
"U/P": "<:manaup:292901508780130305>",
|
||||
"B/P": "<:manabp:292901508922474496>",
|
||||
"R/P": "<:manarp:292901509023137792>",
|
||||
"G/P": "<:managp:292901508964679680>",
|
||||
|
||||
"HW": "<:manahw:936814586663948398>",
|
||||
"HR": "<:manahr:936814586382921752>",
|
||||
|
||||
"X": "<:manax:292901509082120202>",
|
||||
"Y": "<:manay:936814586638766151>",
|
||||
"Z": "<:manaz:936814586680713276>",
|
||||
|
||||
"T": "<:manat:292901509073731584>",
|
||||
"Q": "<:manaq:292901508834394123>",
|
||||
"E": "<:manae:292901508947640320>",
|
||||
|
||||
"P": "<:manap:1260458912046645319>",
|
||||
|
||||
"A": "<:manaa:936814586680713276>",
|
||||
"CHAOS": "<:manachaos:292901508712890369>",
|
||||
"∞": "<:manainfinity:936814586731040898>",
|
||||
}
|
||||
|
||||
@tree.command(
|
||||
name="search",
|
||||
description="Search scryfall with an advanced expression",
|
||||
)
|
||||
@app_commands.choices(sort=[
|
||||
Choice(name="Released", value="released"),
|
||||
Choice(name="Name", value="name"),
|
||||
Choice(name="Collector Number", value="set"),
|
||||
Choice(name="Price", value="usd"),
|
||||
])
|
||||
async def search(interaction, query: str, sort: Choice[str] = "released", max: int = 5):
|
||||
print(f"Processing: {query}")
|
||||
try:
|
||||
resp = get("https://api.scryfall.com/cards/search", params={"q": query, "order": sort, "include_variations": True})
|
||||
obj = loads(resp.text)
|
||||
|
||||
if resp.status_code != 200:
|
||||
raise Exception(obj.get("details", "unknown error"))
|
||||
|
||||
num_cards = obj["total_cards"]
|
||||
|
||||
embed = discord.Embed(title=f"{query}: {num_cards} results", type="rich")
|
||||
|
||||
num_cards = 0
|
||||
for card in obj["data"]:
|
||||
name = card["name"]
|
||||
type_line = card["type_line"]
|
||||
mana_cost = card.get("mana_cost")
|
||||
#mana_cost = re.sub("{([0-9]*)}", "{MANA\\1}", mana_cost)
|
||||
mana_cost = mana_cost.format(*mana_numbers, **mana_symbols)
|
||||
|
||||
name_str = f"{mana_cost}\t{name}: {type_line}"
|
||||
|
||||
oracle_str = card.get("oracle_text")
|
||||
#oracle_str = re.sub("{([0-9]*)}", ":mana\\1:", oracle_str)
|
||||
oracle_str = oracle_str.format(*mana_numbers, **mana_symbols)
|
||||
|
||||
|
||||
if len(embed) + len(oracle_str) + len(name_str) > 6000:
|
||||
break
|
||||
|
||||
embed.add_field(name=name_str, value=oracle_str, inline=False)
|
||||
|
||||
num_cards += 1
|
||||
if num_cards >= max:
|
||||
break
|
||||
|
||||
await interaction.response.send_message(embed=embed)
|
||||
except (Exception, discord.HTTPException) as e:
|
||||
print(format_exc())
|
||||
embed = discord.Embed(type="rich")
|
||||
embed.add_field(name=f"\"{query}\" error", value=str(e))
|
||||
await interaction.response.send_message(embed=embed)
|
||||
|
||||
token = environ.get("DISCORD_BOT_TOKEN")
|
||||
if token:
|
||||
client.run(token)
|
||||
else:
|
||||
print("Set DISCORD_BOT_TOKEN environment and run again")
|
Loading…
Reference in New Issue