Files
AoyoBot/cogs/modals.py
Дмитрий Шиманский ae43a31e39 Initialize project
2024-02-22 19:04:48 +03:00

167 lines
8.5 KiB
Python

# modals.py
from handlers import logger, bot, api_id, api_token
import disnake
from pathlib import Path
import json
from disnake.ext import commands
import pyspw
import sqlite3
import psycopg2
from handlers import execute
class modals(commands.Cog):
def __init__(self, bot: disnake.Client):
self.bot = bot
logger.info(f"Модуль {self.__class__.__name__} включен!")
@commands.Cog.listener("on_modal_submit")
async def on_modal_submit(self, inter: disnake.ModalInteraction):
await inter.response.send_message(f"{inter.custom_id}", ephemeral=True)
if inter.custom_id in ["changeNamePrivateRoom", "newUsersLimit"]:
path = Path("tempFiles/voiceTempFile.json")
data = json.loads(path.read_text(encoding="utf-8"))
if (
int(data["voice_channels"][f"{inter.channel.id}"]["channel_owner"])
== inter.author.id
):
path = Path("tempFiles/voiceName.json")
data = json.loads(path.read_text(encoding="utf-8"))
for key, value in inter.text_values.items():
if inter.custom_id == "changeNamePrivateRoom":
data[f"{inter.author.id}"] = {
"chat_name": f"{value[:1024]}",
"channel_id": f"{inter.channel.id}",
}
path.write_text(
json.dumps(data, indent=7), encoding="utf-8", newline="\n"
)
await self.bot.get_channel(inter.channel_id).edit(name=value[:1024])
else:
await self.bot.get_channel(inter.channel_id).edit(
user_limit=int(value[:1024])
)
await inter.response.send_message("Готово!", ephemeral=True)
else:
await inter.response.send_message(
"Вы не создатель канала!", ephemeral=True
)
elif inter.custom_id in ["customModal", "customModal-api", "interpol", "interpol-api"]:
path = Path("guilds/guilds.json")
data = json.loads(path.read_text(encoding="utf-8"))
embed = disnake.Embed(
description=f"{inter.author.mention}", colour=inter.author.colour
)
for key, value in inter.text_values.items():
embed.add_field(
name=key.capitalize(),
value=value[:1024],
inline=False,
)
embed.set_image(url=inter.author.avatar.url if inter.author.avatar else None)
if inter.custom_id in ["customModal-api", "interpol-api"]:
api = (
pyspw.SpApi(card_id=api_id, card_token=api_token)
.get_user(inter.author.id)
.nickname
)
embed.set_footer(text=f"Игрок подтвержден! Никнейм: {api}")
if inter.custom_id in ["interpol-api", "interpol"]:
embed.set_footer(text=f"{inter.channel.id}")
await self.bot.get_channel(
data["guilds"][f"{inter.guild.id}"]["modals"][f"{inter.channel.id}"]["channel"]).send(
f"{inter.author.mention}",
embed=embed,
components=[
disnake.ui.Button(
label="Принять",
style=disnake.ButtonStyle.success,
custom_id="acceptInterpol",
),
disnake.ui.Button(
label="Отклонить",
style=disnake.ButtonStyle.danger,
custom_id="declineInterpol",
),
disnake.ui.Button(
label="Создать тикет",
style=disnake.ButtonStyle.blurple,
custom_id="createInterpolTicket",
),
],
)
else:
await self.bot.get_channel(
data["guilds"][f"{inter.guild.id}"]["modals"][f"{inter.channel.id}"][
f"{inter.message.id}"
]["channel"]
).send(f"{inter.author.mention}", embed=embed)
await inter.response.send_message("Готово!", ephemeral=True)
elif inter.custom_id in ["addCourtModal", "addSityModal"]:
modal_inter = inter
if inter.custom_id == "addCourtModal":
print("no")
sityName = "Unbound"
for key, values in modal_inter.text_values.items():
sityName = values
i = -1
embed = inter.message.embeds[0]
fieldFromEmbed = None
for field in embed.fields:
i = i + 1
if field.name == sityName:
fieldFromEmbed = field
break
if not fieldFromEmbed:
await modal_inter.response.send_message("Вы указали неправильный город", ephemeral=True)
return False
symbol = (list(fieldFromEmbed.value)[-2])
embed = inter.message.embeds[0]
embed.set_field_at(i, name=sityName, value=fieldFromEmbed.value.replace(f"({symbol})", f"({str(int(symbol)+1)})"), inline=False)
await modal_inter.response.send_message("Готово!", ephemeral=True)
await inter.message.edit(embed=embed)
else:
await modal_inter.response.send_message("Готово!", ephemeral=True)
sityName = "Unbound"
sityCoordinates = "Unbound"
for key, values in modal_inter.text_values.items():
if key == "sityName":
sityName = values
elif key == "sityCoordinates":
sityCoordinates = values
embed = inter.message.embeds[0]
embed.add_field(name=sityName, value=f"> **Расположение**: {sityCoordinates} \n > **Количество проведенных судов**: (0)", inline=False)
await inter.message.edit(embed=embed)
elif inter.custom_id == "addFarmModal":
farmName = "Unbound"
farmCoordinates = "Unbound"
farmType = "Unbound"
sityName = "Unbound"
for key, values in inter.text_values.items():
if key == "farmName":
farmName = values
elif key == "farmCoordinates":
farmCoordinates = values
elif key == "farmType":
farmType = values
elif key == "sityName":
sityName = values
if ";" in farmName or ";" in farmCoordinates or ";" in farmType or ";" in sityName:
await inter.response.send_message("SQL инъекции не работает, сын шалавы", ephemeral=True)
await (await inter.guild.fetch_member(945317832290336798)).send(f"Сын шлюхи {inter.author.mention} попытался использовать sql-инъекцию в {inter.channel.mention}")
return
if inter.message.embeds[0].title == "**Фермы**":
execute("INSERT INTO farms VALUES ({}, {}, {}, {}, {})".format(f'"{farmName}"', f'"{farmCoordinates}"', f'"{farmType}"', f'"{sityName}"', inter.author.id))
else:
execute("INSERT INTO private_farms VALUES ({}, {}, {}, {}, {})".format(f'"{farmName}"', f'"{farmCoordinates}"', f'"{farmType}"', f'"{sityName}"', inter.author.id))
embed = inter.message.embeds[0]
embed.add_field(name=sityName, value=f"> **Название фермы**: {farmName} \n > **Расположение**: {farmCoordinates} \n > **Тип фермы**: {farmType}", inline=False)
await inter.message.edit(embed=embed)
await inter.response.send_message("Готово!", ephemeral=True)
def setup(bot):
bot.add_cog(modals(bot))