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