create-discord-bot
Advanced tools
Comparing version 0.2.2 to 0.2.3
#!/usr/bin/env node | ||
var __defProp=Object.defineProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0});import process3 from"node:process";import{Option,program}from"commander";import{red,yellow,green}from"picocolors";import prompts from"prompts";import validateProjectName from"validate-npm-package-name";var package_default_name="create-discord-bot",package_default_version="0.2.2";import{cp,stat,mkdir,readdir,readFile,writeFile}from"node:fs/promises";import path from"node:path";import process2 from"node:process";import{URL}from"node:url";import glob from"fast-glob";import picocolors2 from"picocolors";import{execSync}from"node:child_process";import process from"node:process";import picocolors from"picocolors";function resolvePackageManager(){const npmConfigUserAgent=process.env.npm_config_user_agent;return npmConfigUserAgent?npmConfigUserAgent.startsWith("npm")?"npm":npmConfigUserAgent.startsWith("yarn")?"yarn":npmConfigUserAgent.startsWith("pnpm")?"pnpm":npmConfigUserAgent.startsWith("bun")?"bun":(console.error(picocolors.yellow(`Detected an unsupported package manager (${npmConfigUserAgent}). Falling back to npm.`)),"npm"):"npm"}function install(packageManager2){let installCommand=`${packageManager2} install`;switch(console.log(`Installing dependencies with ${packageManager2}...`),packageManager2){case"yarn":console.log(),installCommand=[`${packageManager2} set version stable`,`${packageManager2} config set nodeLinker node-modules`,`${packageManager2} config set logFilters --json '[{ "code": "YN0002", "level": "discard" }, { "code": "YN0013", "level": "discard" }, { "code": "YN0032", "level": "discard" }, { "code": "YN0060", "level": "discard" }]'`,`${packageManager2} plugin import interactive-tools`,`${packageManager2} plugin import workspace-tools`,installCommand];break;case"deno":installCommand=`${packageManager2} cache --reload src/index.ts`;break;case"pnpm":case"bun":console.log()}const env={...process.env,ADBLOCK:"1",NODE_ENV:"development",DISABLE_OPENCOLLECTIVE:"1"};if(Array.isArray(installCommand))for(const[index,command]of installCommand.entries()){if(index===installCommand.length-1){execSync(command,{stdio:"inherit",env:env});break}execSync(command,{stdio:"ignore",env:env})}else execSync(installCommand,{stdio:"inherit",env:env})}async function createDiscordBot({directory:directory,installPackages:installPackages2,typescript:typescript2,packageManager:packageManager2}){const root=path.resolve(directory),directoryName=path.basename(root);console.log();(!(await stat(root).catch((async error=>{if("ENOENT"===error.code)return await mkdir(root,{recursive:!0}),stat(root);throw error}))).isDirectory()||(await readdir(root)).length>0)&&(console.error(picocolors2.red(`The directory ${picocolors2.yellow(`"${directoryName}"`)} is either not a directory or is not empty.`)),console.error(picocolors2.red("Please specify an empty directory.")),process2.exit(1)),console.log(`Creating ${directoryName} in ${picocolors2.green(root)}.`);const deno2="deno"===packageManager2;await cp(new URL("../template/"+(deno2?"Deno":typescript2?"TypeScript":"JavaScript"),import.meta.url),root,{recursive:!0});const bun="bun"===packageManager2;bun&&(await cp(new URL(`../template/Bun/${typescript2?"TypeScript":"JavaScript"}/package.json`,import.meta.url),`${root}/package.json`),typescript2&&(await cp(new URL("../template/Bun/Typescript/tsconfig.eslint.json",import.meta.url),`${root}/tsconfig.eslint.json`),await cp(new URL("../template/Bun/Typescript/tsconfig.json",import.meta.url),`${root}/tsconfig.json`))),process2.chdir(root);const newVSCodeSettings=await readFile("./.vscode/settings.json",{encoding:"utf8"}).then((str=>{let newStr=str.replace("[REPLACE_ME]",deno2||bun?"auto":packageManager2);return deno2&&(newStr=newStr.replaceAll('"[REPLACE_BOOL]"',!0)),newStr}));await writeFile("./.vscode/settings.json",newVSCodeSettings);const globStream=glob.stream("./src/**/*.ts");for await(const file of globStream){const newData=await readFile(file,{encoding:"utf8"}).then((str=>str.replaceAll("[REPLACE_IMPORT_EXT]",typescript2?"ts":"js")));await writeFile(file,newData)}if(!deno2){const newPackageJSON=await readFile("./package.json",{encoding:"utf8"}).then((str=>{let newStr=str.replace("[REPLACE_ME]",directoryName);return newStr=newStr.replaceAll("[REPLACE_IMPORT_EXT]",typescript2?"ts":"js"),newStr}));await writeFile("./package.json",newPackageJSON)}if(installPackages2)try{install(packageManager2)}catch(error){console.log();"SIGINT"===error.signal?console.log(picocolors2.red("Installation aborted.")):(console.error(picocolors2.red("Installation failed.")),process2.exit(1))}console.log(),console.log(picocolors2.green("All done! Be sure to read through the discord.js guide for help on your journey.")),console.log(`Link: ${picocolors2.cyan("https://guide.discordjs.dev")}`)}__name(resolvePackageManager,"resolvePackageManager"),__name(install,"install"),__name(createDiscordBot,"createDiscordBot");var projectDirectory="",handleSigTerm=__name((()=>process3.exit(0)),"handleSigTerm");process3.on("SIGINT",handleSigTerm),process3.on("SIGTERM",handleSigTerm);var onPromptState=__name((state=>{state.aborted&&(process3.stdout.write("[?25h"),process3.stdout.write("\n"),process3.exit(1))}),"onPromptState");program.name(package_default_name).version(package_default_version).description("Create a basic discord.js bot.").argument("[directory]","What is the name of the directory you want to create this project in?").usage(`${green("<directory>")}`).action((directory=>{projectDirectory=directory})).option("--typescript","Whether to use the TypeScript template.").option("--javascript","Whether to use the JavaScript template.").option("--no-install","Whether to not automatically install the packages.").addOption(new Option("--package-manager <packageManager>","The package manager to use.").choices(["npm","pnpm","yarn","bun","deno"]).default(resolvePackageManager())).allowUnknownOption().parse();var{typescript:typescript,javascript:javascript,packageManager:packageManager,install:installPackages}=program.opts();if(projectDirectory||(projectDirectory=(await prompts({onState:onPromptState,type:"text",name:"directory",initial:"my-bot",message:"What is the name of the directory you want to create this project in?",validate:directory=>{const validationResult=validateProjectName(directory);if(!validationResult.validForNewPackages){const errors=[];for(const error of[...validationResult.errors??[],...validationResult.warnings??[]])errors.push(red(`- ${error}`));return red(`Cannot create a project named ${yellow(`"${directory}"`)} due to npm naming restrictions.\n\nErrors:\n${errors.join("\n")}\n\n${red("\nSee https://docs.npmjs.com/cli/configuring-npm/package-json for more details.")}}`)}return!0}})).directory),!("deno"===packageManager)&&void 0===typescript&&void 0===javascript){const{useTypescript:useTypescript}=await prompts({onState:onPromptState,type:"toggle",name:"useTypescript",message:"Do you want to use TypeScript?",initial:!0,active:"Yes",inactive:"No"});typescript=useTypescript}await createDiscordBot({typescript:typescript,directory:projectDirectory,packageManager:packageManager,installPackages:installPackages}); | ||
var __defProp=Object.defineProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0});import process3 from"node:process";import{Option,program}from"commander";import picocolors3 from"picocolors";import prompts from"prompts";import validateProjectName from"validate-npm-package-name";var package_default_name="create-discord-bot",package_default_version="0.2.3";import{cp,stat,mkdir,readdir,readFile,writeFile}from"node:fs/promises";import path from"node:path";import process2 from"node:process";import{URL}from"node:url";import glob from"fast-glob";import picocolors2 from"picocolors";import{execSync}from"node:child_process";import process from"node:process";import picocolors from"picocolors";function resolvePackageManager(){const npmConfigUserAgent=process.env.npm_config_user_agent;return npmConfigUserAgent?npmConfigUserAgent.startsWith("npm")?"npm":npmConfigUserAgent.startsWith("yarn")?"yarn":npmConfigUserAgent.startsWith("pnpm")?"pnpm":npmConfigUserAgent.startsWith("bun")?"bun":(console.error(picocolors.yellow(`Detected an unsupported package manager (${npmConfigUserAgent}). Falling back to npm.`)),"npm"):"npm"}function install(packageManager2){let installCommand=`${packageManager2} install`;switch(console.log(`Installing dependencies with ${packageManager2}...`),packageManager2){case"yarn":console.log(),installCommand=[`${packageManager2} set version stable`,`${packageManager2} config set nodeLinker node-modules`,`${packageManager2} config set logFilters --json '[{ "code": "YN0002", "level": "discard" }, { "code": "YN0013", "level": "discard" }, { "code": "YN0032", "level": "discard" }, { "code": "YN0060", "level": "discard" }]'`,`${packageManager2} plugin import interactive-tools`,`${packageManager2} plugin import workspace-tools`,installCommand];break;case"deno":installCommand=`${packageManager2} cache --reload src/index.ts`;break;case"pnpm":case"bun":console.log()}const env={...process.env,ADBLOCK:"1",NODE_ENV:"development",DISABLE_OPENCOLLECTIVE:"1"};if(Array.isArray(installCommand))for(const[index,command]of installCommand.entries()){if(index===installCommand.length-1){execSync(command,{stdio:"inherit",env:env});break}execSync(command,{stdio:"ignore",env:env})}else execSync(installCommand,{stdio:"inherit",env:env})}async function createDiscordBot({directory:directory,installPackages:installPackages2,typescript:typescript2,packageManager:packageManager2}){const root=path.resolve(directory),directoryName=path.basename(root);console.log();(!(await stat(root).catch((async error=>{if("ENOENT"===error.code)return await mkdir(root,{recursive:!0}),stat(root);throw error}))).isDirectory()||(await readdir(root)).length>0)&&(console.error(picocolors2.red(`The directory ${picocolors2.yellow(`"${directoryName}"`)} is either not a directory or is not empty.`)),console.error(picocolors2.red("Please specify an empty directory.")),process2.exit(1)),console.log(`Creating ${directoryName} in ${picocolors2.green(root)}.`);const deno2="deno"===packageManager2;await cp(new URL("../template/"+(deno2?"Deno":typescript2?"TypeScript":"JavaScript"),import.meta.url),root,{recursive:!0});const bun="bun"===packageManager2;bun&&(await cp(new URL(`../template/Bun/${typescript2?"TypeScript":"JavaScript"}/package.json`,import.meta.url),`${root}/package.json`),typescript2&&(await cp(new URL("../template/Bun/Typescript/tsconfig.eslint.json",import.meta.url),`${root}/tsconfig.eslint.json`),await cp(new URL("../template/Bun/Typescript/tsconfig.json",import.meta.url),`${root}/tsconfig.json`))),process2.chdir(root);const newVSCodeSettings=await readFile("./.vscode/settings.json",{encoding:"utf8"}).then((str=>{let newStr=str.replace("[REPLACE_ME]",deno2||bun?"auto":packageManager2);return deno2&&(newStr=newStr.replaceAll('"[REPLACE_BOOL]"',!0)),newStr}));await writeFile("./.vscode/settings.json",newVSCodeSettings);const globStream=glob.stream("./src/**/*.ts");for await(const file of globStream){const newData=await readFile(file,{encoding:"utf8"}).then((str=>str.replaceAll("[REPLACE_IMPORT_EXT]",typescript2?"ts":"js")));await writeFile(file,newData)}if(!deno2){const newPackageJSON=await readFile("./package.json",{encoding:"utf8"}).then((str=>{let newStr=str.replace("[REPLACE_ME]",directoryName);return newStr=newStr.replaceAll("[REPLACE_IMPORT_EXT]",typescript2?"ts":"js"),newStr}));await writeFile("./package.json",newPackageJSON)}if(installPackages2)try{install(packageManager2)}catch(error){console.log();"SIGINT"===error.signal?console.log(picocolors2.red("Installation aborted.")):(console.error(picocolors2.red("Installation failed.")),process2.exit(1))}console.log(),console.log(picocolors2.green("All done! Be sure to read through the discord.js guide for help on your journey.")),console.log(`Link: ${picocolors2.cyan("https://guide.discordjs.dev")}`)}__name(resolvePackageManager,"resolvePackageManager"),__name(install,"install"),__name(createDiscordBot,"createDiscordBot");var projectDirectory="",handleSigTerm=__name((()=>process3.exit(0)),"handleSigTerm");process3.on("SIGINT",handleSigTerm),process3.on("SIGTERM",handleSigTerm);var onPromptState=__name((state=>{state.aborted&&(process3.stdout.write("[?25h"),process3.stdout.write("\n"),process3.exit(1))}),"onPromptState");program.name(package_default_name).version(package_default_version).description("Create a basic discord.js bot.").argument("[directory]","What is the name of the directory you want to create this project in?").usage(`${picocolors3.green("<directory>")}`).action((directory=>{projectDirectory=directory})).option("--typescript","Whether to use the TypeScript template.").option("--javascript","Whether to use the JavaScript template.").option("--no-install","Whether to not automatically install the packages.").addOption(new Option("--package-manager <packageManager>","The package manager to use.").choices(["npm","pnpm","yarn","bun","deno"]).default(resolvePackageManager())).allowUnknownOption().parse();var{typescript:typescript,javascript:javascript,packageManager:packageManager,install:installPackages}=program.opts();if(projectDirectory||(projectDirectory=(await prompts({onState:onPromptState,type:"text",name:"directory",initial:"my-bot",message:"What is the name of the directory you want to create this project in?",validate:directory=>{const validationResult=validateProjectName(directory);if(!validationResult.validForNewPackages){const errors=[];for(const error of[...validationResult.errors??[],...validationResult.warnings??[]])errors.push(picocolors3.red(`- ${error}`));return picocolors3.red(`Cannot create a project named ${picocolors3.yellow(`"${directory}"`)} due to npm naming restrictions.\n\nErrors:\n${errors.join("\n")}\n\n${picocolors3.red("\nSee https://docs.npmjs.com/cli/configuring-npm/package-json for more details.")}}`)}return!0}})).directory),!("deno"===packageManager)&&void 0===typescript&&void 0===javascript){const{useTypescript:useTypescript}=await prompts({onState:onPromptState,type:"toggle",name:"useTypescript",message:"Do you want to use TypeScript?",initial:!0,active:"Yes",inactive:"No"});typescript=useTypescript}await createDiscordBot({typescript:typescript,directory:projectDirectory,packageManager:packageManager,installPackages:installPackages}); |
{ | ||
"$schema": "https://json.schemastore.org/package.json", | ||
"name": "create-discord-bot", | ||
"version": "0.2.2", | ||
"version": "0.2.3", | ||
"description": "A simple way to create a startup Discord bot.", | ||
@@ -6,0 +6,0 @@ "type": "module", |
@@ -14,4 +14,4 @@ { | ||
"dependencies": { | ||
"@discordjs/core": "^1.0.1", | ||
"discord.js": "^14.13.0" | ||
"@discordjs/core": "^1.1.0", | ||
"discord.js": "^14.14.0" | ||
}, | ||
@@ -18,0 +18,0 @@ "devDependencies": { |
@@ -14,4 +14,4 @@ { | ||
"dependencies": { | ||
"@discordjs/core": "^1.0.1", | ||
"discord.js": "^14.13.0" | ||
"@discordjs/core": "^1.1.0", | ||
"discord.js": "^14.14.0" | ||
}, | ||
@@ -18,0 +18,0 @@ "devDependencies": { |
@@ -1,2 +0,2 @@ | ||
import type { RESTPostAPIApplicationCommandsJSONBody, CommandInteraction } from 'npm:discord.js@^14.13.0'; | ||
import type { RESTPostAPIApplicationCommandsJSONBody, CommandInteraction } from 'npm:discord.js@^14.14.0'; | ||
import type { StructurePredicate } from '../util/loaders.ts'; | ||
@@ -3,0 +3,0 @@ |
@@ -1,2 +0,2 @@ | ||
import type { ClientEvents } from 'npm:discord.js@^14.13.0'; | ||
import type { ClientEvents } from 'npm:discord.js@^14.14.0'; | ||
import type { StructurePredicate } from '../util/loaders.ts'; | ||
@@ -3,0 +3,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { Events } from 'npm:discord.js@^14.13.0'; | ||
import { Events } from 'npm:discord.js@^14.14.0'; | ||
import type { Event } from './index.ts'; | ||
@@ -3,0 +3,0 @@ |
import 'https://deno.land/std@0.199.0/dotenv/load.ts'; | ||
import { URL } from 'node:url'; | ||
import { Client, GatewayIntentBits } from 'npm:discord.js@^14.13.0'; | ||
import { Client, GatewayIntentBits } from 'npm:discord.js@^14.14.0'; | ||
import { loadCommands, loadEvents } from './util/loaders.ts'; | ||
@@ -5,0 +5,0 @@ import { registerEvents } from './util/registerEvents.ts'; |
import 'https://deno.land/std@0.199.0/dotenv/load.ts'; | ||
import { URL } from 'node:url'; | ||
import { API } from 'npm:@discordjs/core@^1.0.1/http-only'; | ||
import { REST } from 'npm:discord.js@^14.13.0'; | ||
import { API } from 'npm:@discordjs/core@^1.1.0/http-only'; | ||
import { REST } from 'npm:discord.js@^14.14.0'; | ||
import { loadCommands } from './loaders.ts'; | ||
@@ -6,0 +6,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { Events, type Client } from 'npm:discord.js@^14.13.0'; | ||
import { Events, type Client } from 'npm:discord.js@^14.14.0'; | ||
import type { Command } from '../commands/index.ts'; | ||
@@ -3,0 +3,0 @@ import type { Event } from '../events/index.ts'; |
@@ -14,4 +14,4 @@ { | ||
"dependencies": { | ||
"@discordjs/core": "^1.0.1", | ||
"discord.js": "^14.13.0", | ||
"@discordjs/core": "^1.1.0", | ||
"discord.js": "^14.14.0", | ||
"dotenv": "^16.3.1" | ||
@@ -18,0 +18,0 @@ }, |
@@ -15,4 +15,4 @@ { | ||
"dependencies": { | ||
"@discordjs/core": "^1.0.1", | ||
"discord.js": "^14.13.0", | ||
"@discordjs/core": "^1.1.0", | ||
"discord.js": "^14.14.0", | ||
"dotenv": "^16.3.1" | ||
@@ -19,0 +19,0 @@ }, |
51912