diff --git a/.changeset/cuddly-pans-lie.md b/.changeset/cuddly-pans-lie.md new file mode 100644 index 0000000..d257f03 --- /dev/null +++ b/.changeset/cuddly-pans-lie.md @@ -0,0 +1,5 @@ +--- +'@softnetics/what-is-dis': patch +--- + +Add docs for what-is-dis diff --git a/.changeset/lovely-eels-relate.md b/.changeset/lovely-eels-relate.md new file mode 100644 index 0000000..ec277de --- /dev/null +++ b/.changeset/lovely-eels-relate.md @@ -0,0 +1,5 @@ +--- +"@softnetics/what-is-dis": patch +--- + +Fix dependencies error on bundle diff --git a/packages/what-is-dis/README.md b/packages/what-is-dis/README.md new file mode 100644 index 0000000..b4e5833 --- /dev/null +++ b/packages/what-is-dis/README.md @@ -0,0 +1,123 @@ +# What Is Dis + +Typescript Discord bot framework aims to be a simple and easy to use framework for creating discord bots. It is built on top of [discord.js](https://discord.js.org/#/) + +# Table of Contents + +# Installation + +```bash +npm install discord.js @softnetics/what-is-dis +# Or +yarn add discord.js @softnetics/what-is-dis +# Or +pnpm add discord.js @softnetics/what-is-dis +# Or +bun add discord.js @softnetics/what-is-dis +``` + +# Usage + +```ts +import { GatewayIntentBits } from '@discordjs/core' +import { DiscordBot, defineSlashCommandBasic } from '@softnetics/what-is-dis' + +const pingCommand = defineSlashCommandBasic({ + name: 'ping', + description: 'Ping!', + options: { + message: { + type: 'string', + description: 'Message to echo back', + choices: [ + { name: 'Hello', value: 'hello' }, + { name: 'World', value: 'world' }, + ], + }, + to: { + type: 'user', + description: 'User to ping', + required: true, + }, + }, + execute: async ({ interaction, body, logger }) => { + const message = body.message // Type: "hello" | "world" | undefined + const user = body.to // Type: string (user id) + logger.info(`Received /ping command with message: ${message} and user: ${user}`) + await interaction.reply({ + content: `Pong! ${message} <@${user}>`, + }) + }, +}) + +// Create a discord bot instance +const bot = new DiscordBot({ + clientId: environment.DISCORD_CLIENT_ID, + token: environment.DISCORD_TOKEN, + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.MessageContent, + ], + // If this value is set, the bot will only register commands in this guild. It's useful for development. + developmentGuildId: environment.DISCORD_DEVELOPMENT_GUILD_ID, + // If this value is set to true, the bot will delete the commands before registering them for `developmentGuildId`. + refreshCommands: true, + // Add more slash commands here + slashCommands: [pingCommand], + // Customized logger + loggerOptions: { + level: 'debug', + }, + // This function will be called when the bot is ready + onReady: ({ logger }) => { + logger.info('Try to excecute /ping command!') + }, + // This function will be called before the bot shuts down + onShutDown: async ({ logger }) => { + logger.info('Bot is shutting down!') + }, +}) + +// Register the given slash commands and listen for the event +bot.listen() +``` + +# Examples + +You can find examples in the [examples](./examples) folder. + +- [Ping-pong discord bot](./examples/bun-simple-bot/) + +# Features + +- [x] Slash commands + - Input types + - [x] Subcommands + - [ ] 🚧 Subcommand groups + - [x] String + - [x] Integer + - [x] Boolean + - [x] User + - [x] Channel + - [x] Role + - [x] Mentionable + - [x] Number + - [x] Attachment +- [ ] 🚧 Message command with prefix +- [ ] 🚧 Message components + - [ ] 🚧 [Action Rows](https://discordjs.guide/message-components/action-rows.html) + - [ ] 🚧 [Buttons](https://discordjs.guide/message-components/buttons.html) + - [ ] 🚧 [Select menus](https://discordjs.guide/message-components/select-menus.html) +- [ ] 🚧 Other components + - [ ] 🚧 [Modal](https://discordjs.guide/interactions/modals.html#building-and-responding-with-modals) + - [ ] 🚧 [Context Menu](https://discordjs.guide/interactions/context-menus.html) +- [ ] 🚧 Emoji reactions + +# Contributing + +WIP + +# License + +[MIT](./LICENSE) diff --git a/packages/what-is-dis/package.json b/packages/what-is-dis/package.json index 3cf638f..cd95987 100644 --- a/packages/what-is-dis/package.json +++ b/packages/what-is-dis/package.json @@ -5,10 +5,29 @@ "main": "dist/index.cjs", "types": "dist/index.d.ts", "module": "dist/index.js", + "license": "MIT", "homepage": "https://github.com/softnetics/what-is-dis", + "bugs": { + "url": "https://github.com/softnetics/what-is-dis" + }, + "repository": { + "type": "git", + "url": "https://github.com/softnetics/what-is-dis.git" + }, "files": [ "dist" ], + "keywords": [ + "typescript", + "discord", + "discord.js", + "type-safe" + ], + "author": { + "name": "Saenyakorn Siangsanoh", + "email": "me@saenyakorn.dev", + "url": "https://saenyakorn.dev" + }, "scripts": { "build": "tsup", "build:watch": "tsup --watch", @@ -17,12 +36,12 @@ "dependencies": { "discord.js": "^14.14.1", "winston": "^3.11.0", - "zod": "^3.22.4" + "zod": "^3.22.4", + "utility-types": "^3.10.0", + "typescript": "^5.2.2" }, "devDependencies": { "@internal/project-config": "workspace:^", - "tsup": "^7.2.0", - "typescript": "^5.2.2", - "utility-types": "^3.10.0" + "tsup": "^7.2.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3afa1b..8cdd08d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,6 +76,12 @@ importers: discord.js: specifier: ^14.14.1 version: 14.14.1 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + utility-types: + specifier: ^3.10.0 + version: 3.10.0 winston: specifier: ^3.11.0 version: 3.11.0 @@ -89,12 +95,6 @@ importers: tsup: specifier: ^7.2.0 version: 7.2.0(typescript@5.2.2) - typescript: - specifier: ^5.2.2 - version: 5.2.2 - utility-types: - specifier: ^3.10.0 - version: 3.10.0 packages: @@ -2397,7 +2397,7 @@ packages: /utility-types@3.10.0: resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} engines: {node: '>= 4'} - dev: true + dev: false /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}