80 lines
4.1 KiB
Python
80 lines
4.1 KiB
Python
import disnake
|
|
from disnake import TextInputStyle
|
|
import helpers
|
|
import json
|
|
import embed_factory
|
|
class LLModal(disnake.ui.Modal):
|
|
def __init__(self,cp,pike=0,archer=0):
|
|
components = [
|
|
disnake.ui.TextInput(
|
|
label="Enter CP Rank if number below is wrong",
|
|
placeholder="Last CP was: {cp}".format(cp=cp),
|
|
custom_id="cp",
|
|
style=TextInputStyle.short,
|
|
max_length=5,
|
|
required=False,
|
|
value = cp,
|
|
),
|
|
disnake.ui.TextInput(
|
|
label="Villa ID's seperate with space",
|
|
placeholder="1234 4352 54234 ...etc",
|
|
custom_id="villa_ids",
|
|
style=TextInputStyle.short,
|
|
),
|
|
disnake.ui.TextInput(
|
|
label="How many Archers?",
|
|
placeholder="200",
|
|
custom_id="archers",
|
|
value=pike,
|
|
style=TextInputStyle.short,
|
|
),
|
|
disnake.ui.TextInput(
|
|
label="How many Pikes?",
|
|
placeholder="300",
|
|
custom_id="pikes",
|
|
value=archer,
|
|
style=TextInputStyle.short,
|
|
),
|
|
]
|
|
super().__init__(
|
|
title="Liege Lord Request Form",
|
|
custom_id="submit_ll",
|
|
components=components
|
|
)
|
|
|
|
async def callback(self,inter: disnake.ModalInteraction):
|
|
await inter.response.defer(ephemeral=True)
|
|
playerCP = inter.text_values['cp']
|
|
prefArchers = inter.text_values['archers']
|
|
prefPikes = inter.text_values['pikes']
|
|
print("{player} is cp {cp} and input: {villaids}".format(player=inter.author.display_name,cp=playerCP,villaids=inter.text_values['villa_ids']))
|
|
helpers.sql_set("INSERT INTO user(dID,name,cp,gID,prefArchers,prefPikes) VALUES(?,?,?,?,?,?) ON CONFLICT(dID) DO UPDATE SET cp = excluded.cp,prefArchers = excluded.prefArchers,prefPikes = excluded.prefPikes",(inter.author.id,inter.author.display_name,playerCP,inter.guild_id,prefArchers,prefPikes))
|
|
result = json.loads(helpers.sql_get("SELECT lldata FROM guild WHERE gID = {gID}".format(gID = inter.guild.id))[0][0])
|
|
|
|
if 'll' not in result.keys():
|
|
await inter.response.send_message(content="Failed, no thread open", ephemeral=True)
|
|
return
|
|
thread = inter.guild.get_channel_or_thread(result['ll'][1])
|
|
|
|
if ',' in inter.text_values['villa_ids']:
|
|
villa_ids = [villa for villa in inter.text_values['villa_ids'].split(',')]
|
|
else:
|
|
villa_ids = [villa for villa in inter.text_values['villa_ids'].split()]
|
|
if len(villa_ids):
|
|
for villa in villa_ids:
|
|
button_done = disnake.ui.Button(emoji='✅',custom_id='llcheck')
|
|
#button_done.callback = sbComponents.ll_button_callback
|
|
embed = disnake.Embed(title="LL Request - {id} from {name} CP: {cp}".format(id=villa,cp=playerCP,name=inter.author.display_name))
|
|
embed.description = "{name} is looking for a LL for {id}, if you fulfill this request, or have gotten a LL click the ✅ below to remove it from the list".format(name=inter.author.display_name,id=villa)
|
|
embed.add_field(name="Archers",value=prefArchers,inline=True)
|
|
embed.add_field(name="Pikes",value=prefPikes,inline=True)
|
|
view = disnake.ui.View()
|
|
view.add_item(button_done)
|
|
msg = await thread.send(embed=embed,view=view)
|
|
helpers.sql_set("INSERT INTO llrequests(parentID,villaID,ownerID,ownerCP,fulfilled,messageID,displayName) VALUES(?,?,?,?,?,?,?)",(thread.id,villa,inter.author.id,playerCP,0,msg.id,inter.author.display_name))
|
|
channel = inter.guild.get_channel_or_thread(result['ll'][0])
|
|
message = await channel.fetch_message(result['ll'][1])
|
|
await message.edit(embed=embed_factory.lfll(result['ll'][1]))
|
|
await channel.send(content="Request has been added!",delete_after=30)
|
|
await inter.followup.send(content="Done! 💖 Should be listed here: <#{id}>".format(id=channel.id))
|
|
return |