forked from Cotorrra/Sr.Cotorre-discord-edition
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bot.py
191 lines (160 loc) · 7.53 KB
/
bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
import os
import discord
import requests
from discord.ext import commands
from dotenv import load_dotenv
from FAQ.formating import format_faq
from backs.search import resolve_back_search
from core.resolve import resolve_search
from core.search import card_search
from decks.formating import format_deck
from decks.deck import extract_deck_info
from decks.search import search_for_upgrades, find_deck
from e_cards.search import use_ec_keywords
from p_cards.search import use_pc_keywords
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
bot = commands.Bot(command_prefix='!a')
ah_all_cards = requests.get('https://es.arkhamdb.com/api/public/cards?encounter=1').json()
ah_player = requests.get('https://es.arkhamdb.com/api/public/cards?encounter=0').json()
# Encounter p_cards include: Special player p_cards, Weaknesses, enemies, acts, plans, etc.
ah_encounter = [c for c in ah_all_cards if "spoiler" in c]
@bot.event
async def on_ready():
print(f'{bot.user.name} está listo para usarse c:')
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name='tus Miedos'))
@bot.command(name='hhelp')
async def send_help_short(ctx):
title = "¿Necesitas ayuda?"
description = "Estos son los comandos de este Bot:"
ahj = "``!ahj [nombre] ~[subtitulo]~ ([extra])``\n > Busca cartas de jugador y las muestra aquí."
ahm = "``!ahm [nombre] ~[subtitulo]~ ([extra])``\n > Busca cartas de encuentros (lugares, actos, escenarios)."
ahback = "``!ahback [nombre] ~[subtitulo]~ ([extra])``\n > Muestra la parte de atrás de ciertas cartas."
ahd = "``!ahd [id]``\n > Busca en ArkhamDB el mazo dado."
ahu = "``!ahu [id]``\n > Busca en ArkhamDB el mazo y calcula la mejora más reciente."
ahhelp = "``!ahhelp``\n" \
"> Devuelve la versión corta de la ayuda (esta)." \
"``!ahhelpme``\n" \
"> Devuelve la versión larga de la ayuda."
embed = discord.Embed(title=title, description=description)
embed.add_field(name="Cartas de Jugador:", value=ahj, inline=False)
embed.add_field(name="Cartas de Encuentros:", value=ahm, inline=False)
embed.add_field(name="Partes traseras de Cartas:", value=ahback, inline=False)
embed.add_field(name="Mazos de ArkhamDB:", value=ahd, inline=False)
embed.add_field(name="Mejoras de Mazos de ArkhamDB:", value=ahu, inline=False)
embed.add_field(name="Ayuda:", value=ahhelp, inline=False)
await ctx.send(embed=embed)
@bot.command(name='hhelpme')
async def send_help(ctx):
title = "¿Necesitas ayuda?"
description = "Estos son los comandos de este Bot:"
ahj = "``!ahj [nombre] ~[subtitulo]~ ([extra])``\n" \
">>> Busca cartas en ArkhamDB y las muestra aquí.\n" \
"``[extra]`` puede ser cualquier combinación de lo siguiente: \n" \
"**0-5** para el Nivel\n" \
"**G**, **B**, **R**, **M**, **S** y **N** para la Clase.\n" \
"**P**: para cartas Permanentes\n" \
"**U**: para cartas Únicas\n" \
"**E**: para cartas Excepcionales\n" \
"**C**: para cartas Características\n" \
"**A**: para cartas Avanzadas de los investigadores paralelos.\n" \
"Ejemplo: \n" \
"``!ahj Whisky (3S)`` devolverá: https://es.arkhamdb.com/card/05191\n" \
"``!ahj Solución ~Acido~`` devolverá: https://es.arkhamdb.com/card/02263"
ahm = "``!ahm [nombre] ~[subtitulo]~ ([extra])``\n" \
">>> Busca cartas de encuentros (lugares, actos, escenarios, " \
"etc.) que no sean cartas de jugador estándar. (¡Ojo con los Spoilers!) \n" \
"``[extra]`` puede contener lo siguiente:\n " \
"**S**: para Escenario\n" \
"**A**: para Actos\n" \
"**P**: para Planes\n" \
"**T**: para Traiciones\n" \
"**E**: para Enemigos\n" \
"**L**: Lugares\n" \
"**J**: Para cartas de jugador."
ahback = "``!ahback [nombre] ~[subtitulo]~ ([extra])``\n" \
">>> Muestra la parte de atrás de ciertas cartas. \n" \
"``[extra]`` puede contener lo siguiente:\n" \
"**S**: para Escenarios\n" \
"**A**: para Actos\n" \
"**P**: para Planes\n" \
"**T**: para Traiciones\n" \
"**E**: para Enemigos\n" \
"**L**: para Lugares\n" \
"**J**: para Cartas de jugador de encuentros."
ahd = "``!ahd [id]``\n" \
">>> Busca en ArkhamDB el mazo dado y lo muestra, si es público o privado. \n" \
"Si el link es ``https://es.arkhamdb.com/deck/view/1320033`` entonces su id será ``1320033``."
ahu = "``!ahu [id]``\n " \
">>> Busca en ArkhamDB el historial de mazos y calcula la mejora según el mazo anterior en ArkhamDB."
ahhelp = "``!ahhelp``\n" \
"> Devuelve la versión corta de la ayuda." \
"``!ahhelpme``\n" \
"> Devuelve la versión larga de la ayuda (esta)."
footnote = "El Sr. \"Co-Torre\"™ es desarrollado por Cotorra."
embed = discord.Embed(title=title, description=description)
embed.add_field(name="Cartas de Jugador:", value=ahj, inline=False)
embed.add_field(name="Cartas de Encuentros:", value=ahm, inline=False)
embed.add_field(name="Partes traseras de Cartas:", value=ahback, inline=False)
embed.add_field(name="Mazos de ArkhamDB:", value=ahd, inline=False)
embed.add_field(name="Mejoras de Mazos de ArkhamDB:", value=ahu, inline=False)
embed.add_field(name="Ayuda:", value=ahhelp, inline=False)
embed.set_footer(text=footnote)
await ctx.send(embed=embed)
@bot.command(name='hback')
async def look_for_card_back(ctx):
query = ' '.join(ctx.message.content.split()[1:])
f_cards = [c for c in ah_all_cards if c["double_sided"]]
r_cards = card_search(query, f_cards, use_ec_keywords)
response, embed = resolve_back_search(r_cards)
if embed:
await ctx.send(response, embed=embed)
else:
await ctx.send(response)
@bot.command(name='hj')
async def look_for_player_card(ctx):
query = ' '.join(ctx.message.content.split()[1:])
r_cards = card_search(query, ah_player, use_pc_keywords)
response, embed = resolve_search(r_cards)
if embed:
await ctx.send(response, embed=embed)
else:
await ctx.send(response)
@bot.command(name='hd')
async def look_for_deck(ctx, code: str):
deck = find_deck(code)
if not deck:
response = "Mazo no encontrado"
await ctx.send(response)
else:
deck_info = extract_deck_info(deck, ah_all_cards)
embed = format_deck(deck, deck_info)
response = "¡Mazo Encontrado!"
await ctx.send(response, embed=embed)
@bot.command(name='hm')
async def look_for_encounter(ctx):
query = ' '.join(ctx.message.content.split()[1:])
r_cards = card_search(query, ah_encounter, use_ec_keywords)
response, embed = resolve_search(r_cards)
if embed:
await ctx.send(response, embed=embed)
else:
await ctx.send(response)
@bot.command(name='hu')
async def look_for_upgrades(ctx):
query = ' '.join(ctx.message.content.split()[1:])
response, embed = search_for_upgrades(query, ah_player)
if embed:
await ctx.send(response, embed=embed)
else:
await ctx.send(response)
@bot.command(name='hp')
async def look_for_faq(ctx):
query = ' '.join(ctx.message.content.split()[1:])
r_cards = card_search(query, ah_all_cards, use_ec_keywords)
if r_cards:
embed = format_faq(r_cards[0])
await ctx.send("¡Tengo un FAQ!", embed=embed)
else:
await ctx.send("No encontré la carta.")
bot.run(TOKEN)