-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
109 lines (94 loc) · 4.03 KB
/
Copy pathmain.py
File metadata and controls
109 lines (94 loc) · 4.03 KB
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
import os, discord, zipfile
from squarecloud.client import Client
from squarecloud.file import File
from pathlib import Path
from datetime import datetime
from discord.ext import commands
from discord import app_commands
from dotenv import load_dotenv
from views import SelectAplicacoes, AtivacaoMenu
from db import enviar_app, obter_apps, verificar_ativacao
load_dotenv(override=True)
BOT_TOKEN = os.getenv("BOT_TOKEN")
SQUARE_KEY = os.getenv("SQUARE_KEY")
intents = discord.Intents.all()
bot = commands.Bot(".", intents=intents)
square_client = Client(SQUARE_KEY)
@bot.event
async def on_ready():
await bot.tree.sync()
print("Bot pronto!")
@bot.tree.command()
@app_commands.choices(
linguagem=[
app_commands.Choice(name="Python", value="python"),
app_commands.Choice(name='JavaScript', value='javascript')
]
)
async def deploy(interaction:discord.Interaction, upload_zip:discord.Attachment, nome:str, descricao:str|None, memoria:int, linguagem:app_commands.Choice[str], arquivo_principal:str):
if not verificar_ativacao(interaction.user):
await interaction.response.send_message("Você precisa ativar o bot na sua conta. Use o comando `/gerenciar_ativacao`", ephemeral=True)
return
if memoria < 256:
await interaction.response.send_message("O mínimo de memória deve ser 256MB.", ephemeral=True)
return
await interaction.response.defer(ephemeral=True)
zip_path = Path(f'./tmp/{datetime.now().timestamp()}_{upload_zip.filename}')
await upload_zip.save(zip_path)
try:
with zipfile.ZipFile(zip_path, 'r') as zip:
arquivos_no_zip = zip.namelist()
if arquivo_principal not in arquivos_no_zip:
await interaction.followup.send(f"O arquivo principal `{arquivo_principal}` não está no zip enviado.")
os.unlink(zip_path)
return
except Exception as erro:
await interaction.followup.send("O zip está incorreto ou inválido.")
print(erro)
return
linhas = [
f"MAIN={arquivo_principal}",
f"MEMORY={memoria}",
f"VERSION=recommended",
f"DISPLAY_NAME={nome}"
]
if descricao:
linhas.append(f"DESCRIPTION={descricao}")
conteudo_config = "\n".join(linhas)
with zipfile.ZipFile(zip_path, 'a') as zip:
if 'squarecloud.app' not in zip.namelist() and 'squarecloud.config' not in zip.namelist():
zip.writestr("squarecloud.app", conteudo_config)
dependencias_arquivos = {
'python':'requirements.txt',
'javascript':'package.json'
}
if dependencias_arquivos[linguagem.value] not in zip.namelist():
await interaction.followup.send(f"O arquivo de dependências está ausente. Inclua o `{dependencias_arquivos[linguagem.value]}` no projeto.")
return
upload_data = await square_client.upload_app(File(zip_path))
enviar_app(upload_data, interaction.user)
os.unlink(zip_path)
await interaction.followup.send("A aplicação foi enviada para a hospedagem com sucesso.")
@bot.tree.command()
async def apps(interaction:discord.Interaction):
if not verificar_ativacao(interaction.user):
await interaction.response.send_message("Você precisa ativar o bot na sua conta. Use o comando `/gerenciar_ativacao`", ephemeral=True)
return
user_apps = obter_apps(interaction.user)
if not user_apps:
await interaction.response.send_message(f"Você não tem nenhuma aplicação hospedada.")
return
aplicacoes = []
for app in user_apps:
app = await square_client.app(app['id'])
aplicacoes.append(app)
await interaction.response.defer(ephemeral=True)
view = discord.ui.View()
view.add_item(SelectAplicacoes(aplicacoes))
await interaction.followup.send("Teste", view=view)
@bot.tree.command()
async def gerenciar_ativacao(interact:discord.Interaction):
await interact.response.defer(ephemeral=True)
menu = AtivacaoMenu(interact.user)
await interact.followup.send(view=menu)
bot.run(BOT_TOKEN)