constatic
Version:
Constatic is a CLI for creating and managing modern TypeScript projects, providing an organized structure and features that streamline development.
179 lines (178 loc) • 5.29 kB
JavaScript
// src/menus/main/discord/bot/menu.ts
import { divider, instructions, json, log, toNpmName, uiMessage } from "#helpers";
import { searchSelect, theme, withDefaults } from "../../../../helpers/prompts.js";
import { checkbox, input, select } from "@inquirer/prompts";
import ck from "chalk";
import path from "node:path";
import { initBotAction } from "#actions/bot/init.js";
async function discordBotMenu(cli) {
const templatePath = path.join(cli.rootname, "/templates/discord/bot");
const displayCurrCwd = ck.dim.underline(path.basename(process.cwd()) + "/");
const projectPath = await input(withDefaults({
message: uiMessage({
"en-US": `\uD83D\uDCC1 Project name ${displayCurrCwd}`,
"pt-BR": `\uD83D\uDCC1 Nome do projeto ${displayCurrCwd}`
}) + `
`,
async validate(projetpath) {
const message = uiMessage({
"en-US": `${projetpath} is not a valid path`,
"pt-BR": `${projetpath} não é um caminho válido!`
});
if (!projetpath) {
return message;
}
return true;
},
required: true,
default: "./"
}));
divider();
const distPath = path.resolve(projectPath);
const isDistRoot = distPath === process.cwd();
const npmName = toNpmName(path.basename(isDistRoot ? distPath : projectPath));
log.success(ck.bgBlue(` ${npmName} `));
divider();
const properties = await json.read(path.join(templatePath, "properties.json"));
const database = await select(withDefaults({
message: uiMessage({
"en-US": "\uD83E\uDDF0 Database preset",
"pt-BR": "\uD83E\uDDF0 Predefinição de banco de dados"
}),
loop: false,
choices: [
{
name: uiMessage({
"en-US": "None",
"pt-BR": "Nenhum"
}, ck.red.dim),
value: undefined
},
...Object.entries(properties.presets.databases).filter(([_, preset]) => preset.disabled !== true).map(([value, preset]) => ({
name: `${preset.icon} ${preset.name} ${ck.dim(`(${preset.hint})`)}`,
value,
description: preset.hint
}))
]
}));
divider();
const extras = await checkbox(withDefaults({
message: uiMessage({
"en-US": "✨ Extra features",
"pt-BR": "✨ Recursos extras"
}),
choices: [
{
name: uiMessage({
"en-US": "\uD83D\uDDD0 Discloud files",
"pt-BR": "\uD83D\uDDD0 Arquivos Discloud"
}, ck.greenBright),
value: "discloud",
checked: true
},
{
name: uiMessage({
"en-US": "◍ API Server",
"pt-BR": "◍ Servidor de API"
}, ck.cyanBright),
value: "server"
},
{
name: uiMessage({
"en-US": "\uD83D\uDDF2 Tsup compiler",
"pt-BR": "\uD83D\uDDF2 Compilador tsup"
}, ck.blueBright),
value: "tsup"
}
],
instructions: instructions.checkbox,
required: false
}));
divider();
const server = extras.includes("server") ? await select(withDefaults({
message: uiMessage({
"en-US": "\uD83C\uDF10 API Server",
"pt-BR": "\uD83C\uDF10 Servidor de API"
}),
choices: [
...Object.entries(properties.presets.servers).filter(([_, preset]) => preset.disabled !== true).map(([value, preset]) => ({
name: `${preset.icon} ${preset.name} ${ck.dim(`(${preset.hint})`)}`,
value
}))
]
})) : undefined;
if (extras.includes("server"))
divider();
const tokens = cli.config.get("discord.bot.tokens", []);
const token = tokens.length >= 1 ? await select(withDefaults({
message: uiMessage({
"en-US": "\uD83D\uDD11 Saved token",
"pt-BR": "\uD83D\uDD11 Token salvo"
}),
choices: [
{
name: uiMessage({
"en-US": "None",
"pt-BR": "Nenhum"
}, ck.red.dim),
value: ""
},
...tokens.map((token2) => ({
name: `\uD83E\uDD16 ${ck.yellow(token2.name)}`,
value: token2.name
}))
]
})) : undefined;
divider();
const scripts = cli.config.get("presets.scripts", []);
const selectedScripts = scripts.length < 1 ? [] : await searchSelect(withDefaults({
message: uiMessage({
"en-US": "\uD83D\uDDD0 Script presets",
"pt-BR": "\uD83D\uDDD0 Predefinições de scripts"
}),
options: scripts.map((script) => ({
name: script.name,
value: script.name
})),
theme: theme.searchSelect,
instructions: instructions.searchSelect
}));
if (scripts.length >= 1)
divider();
const managerSuffix = ck.bgWhite(` ${cli.shell.agent} `);
const install = await select(withDefaults({
message: uiMessage({
"en-US": `\uD83D\uDCE5 Install dependencies? ${managerSuffix}`,
"pt-BR": `\uD83D\uDCE5 Instalar dependências? ${managerSuffix}`
}),
choices: [
{
name: uiMessage({
"en-US": "Yes",
"pt-BR": "Sim"
}, ck.greenBright),
value: "yes"
},
{
name: uiMessage({
"en-US": "No",
"pt-BR": "Não"
}, ck.redBright),
value: "no"
}
]
})) == "yes";
divider();
await initBotAction(cli, {
dist: distPath,
database,
extras,
server,
install,
token,
scripts: selectedScripts
});
}
export {
discordBotMenu
};