mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a2a5b4565 | ||
|
|
5fdc1eda7f | ||
|
|
e00d1df32e | ||
|
|
31c221bd5e | ||
|
|
0aba4a6606 | ||
|
|
e9c7661804 | ||
|
|
446417bfb9 | ||
|
|
6b58ef731b | ||
|
|
b62129bf04 | ||
|
|
3d121ff01c | ||
|
|
d201087d4f | ||
|
|
1af4a2bed4 | ||
|
|
edcaed083e | ||
|
|
a4fe2c50df | ||
|
|
9ea991626d | ||
|
|
64f20f1cf5 | ||
|
|
41cc72fe63 |
2
.github/workflows/continuous-integration.yml
vendored
2
.github/workflows/continuous-integration.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out Git repository
|
- name: Check out Git repository
|
||||||
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
|
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node.js
|
||||||
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||||
|
|||||||
532
.yarn/releases/yarn-3.5.0.cjs → .yarn/releases/yarn-3.5.1.cjs
vendored
Normal file → Executable file
532
.yarn/releases/yarn-3.5.0.cjs → .yarn/releases/yarn-3.5.1.cjs
vendored
Normal file → Executable file
File diff suppressed because one or more lines are too long
@@ -2,4 +2,4 @@ enableGlobalCache: true
|
|||||||
|
|
||||||
nodeLinker: node-modules
|
nodeLinker: node-modules
|
||||||
|
|
||||||
yarnPath: .yarn/releases/yarn-3.5.0.cjs
|
yarnPath: .yarn/releases/yarn-3.5.1.cjs
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [2.6.3](https://github.com/sern-handler/handler/compare/v2.6.2...v2.6.3) (2023-06-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* autocomplete nested option and merge main ([5fdc1ed](https://github.com/sern-handler/handler/commit/5fdc1eda7f4fcc1f94af7eca661660c0edeb3251))
|
||||||
|
|
||||||
## [2.6.2](https://github.com/sern-handler/handler/compare/v2.6.1...v2.6.2) (2023-04-15)
|
## [2.6.2](https://github.com/sern-handler/handler/compare/v2.6.1...v2.6.2) (2023-04-15)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
23
LICENSE.md
23
LICENSE.md
@@ -1,23 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
**Copyright (c) 2022 Sern**
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
End license text.
|
|
||||||
23
README.md
23
README.md
@@ -15,19 +15,16 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Why?
|
## Why?
|
||||||
- Most handlers don't support discord.js 14.7+
|
- For you. A framework that's tailored to your exact needs.
|
||||||
- Customizable, composable commands
|
- Lightweight. Does a lot while being small.
|
||||||
- Plug and play or customize to your liking
|
- Latest features. Support for discord.js v14 and all of its interactions.
|
||||||
- Embraces reactive programming for consistent and reliable backend
|
- Hybrid, customizable and composable commands. Create them just how you like.
|
||||||
- Customizable logger, error handling, and more
|
- Start quickly. Plug and play or customize to your liking.
|
||||||
- Active development and growing [community](https://sern.dev/discord)
|
- Embraces reactive programming. For consistent and reliable backend.
|
||||||
## 👀 Quick Look
|
- Switch and customize how errors are handled, logging, and more.
|
||||||
|
- Use it with TypeScript or JavaScript. CommonJS and ESM supported.
|
||||||
* Support for discord.js v14 and all interactions
|
- Active and growing community, always here to help. [Join us](https://sern.dev/discord)
|
||||||
* Hybrid commands
|
- Unleash its full potential with a powerful CLI and awesome plugins.
|
||||||
* Lightweight and customizable
|
|
||||||
* ESM, CommonJS and TypeScript support
|
|
||||||
* A powerful CLI and awesome community-made plugins
|
|
||||||
|
|
||||||
## 📜 Installation
|
## 📜 Installation
|
||||||
|
|
||||||
|
|||||||
12
package.json
12
package.json
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@sern/handler",
|
"name": "@sern/handler",
|
||||||
"packageManager": "yarn@3.5.0",
|
"packageManager": "yarn@3.5.1",
|
||||||
"version": "2.6.2",
|
"version": "2.6.3",
|
||||||
"description": "A complete, customizable, typesafe, & reactive framework for discord bots.",
|
"description": "A complete, customizable, typesafe, & reactive framework for discord bots.",
|
||||||
"main": "dist/cjs/index.cjs",
|
"main": "dist/cjs/index.cjs",
|
||||||
"module": "dist/esm/index.mjs",
|
"module": "dist/esm/index.mjs",
|
||||||
@@ -41,12 +41,12 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^18.15.11",
|
"@types/node": "^18.15.11",
|
||||||
"@typescript-eslint/eslint-plugin": "5.58.0",
|
"@typescript-eslint/eslint-plugin": "5.58.0",
|
||||||
"@typescript-eslint/parser": "5.58.0",
|
"@typescript-eslint/parser": "5.59.1",
|
||||||
"discord.js": "^14.9.0",
|
"discord.js": "^14.9.0",
|
||||||
"esbuild": "^0.15.2",
|
"esbuild": "^0.17.0",
|
||||||
"esbuild-ifdef": "^0.2.0",
|
"esbuild-ifdef": "^0.2.0",
|
||||||
"eslint": "8.38.0",
|
"eslint": "8.39.0",
|
||||||
"prettier": "2.8.7",
|
"prettier": "2.8.8",
|
||||||
"tsup": "^6.7.0",
|
"tsup": "^6.7.0",
|
||||||
"typescript": "5.0.2"
|
"typescript": "5.0.2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
||||||
import type { SernAutocompleteData, SernOptionsData } from '../../types/module';
|
import type { SernAutocompleteData, SernOptionsData } from '../../types/module';
|
||||||
|
import assert from 'assert';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uses an iterative DFS to check if an autocomplete node exists
|
* Uses an iterative DFS to check if an autocomplete node exists
|
||||||
@@ -11,37 +12,43 @@ export default function treeSearch(
|
|||||||
options: SernOptionsData[] | undefined,
|
options: SernOptionsData[] | undefined,
|
||||||
): SernAutocompleteData | undefined {
|
): SernAutocompleteData | undefined {
|
||||||
if (options === undefined) return undefined;
|
if (options === undefined) return undefined;
|
||||||
const _options = options.slice(); // required to prevent direct mutation of options
|
//clone to prevent mutation of original command module
|
||||||
let autocompleteData: SernAutocompleteData | undefined;
|
const _options = options.map(a => ({...a}));
|
||||||
|
let subcommands = new Set();
|
||||||
while (_options.length > 0) {
|
while (_options.length > 0) {
|
||||||
const cur = _options.pop()!;
|
const cur = _options.pop()!;
|
||||||
switch (cur.type) {
|
switch (cur.type) {
|
||||||
case ApplicationCommandOptionType.Subcommand:
|
case ApplicationCommandOptionType.Subcommand:
|
||||||
{
|
{
|
||||||
for (const option of cur.options ?? []) {
|
subcommands.add(cur.name);
|
||||||
|
for (const option of cur.options ?? [])
|
||||||
_options.push(option);
|
_options.push(option);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ApplicationCommandOptionType.SubcommandGroup:
|
case ApplicationCommandOptionType.SubcommandGroup:
|
||||||
{
|
{
|
||||||
for (const command of cur.options ?? []) {
|
for (const command of cur.options ?? [])
|
||||||
_options.push(command);
|
_options.push(command);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if (cur.autocomplete) {
|
if ('autocomplete' in cur && cur.autocomplete) {
|
||||||
const choice = iAutocomplete.options.getFocused(true);
|
const choice = iAutocomplete.options.getFocused(true);
|
||||||
if (cur.name === choice.name && cur.autocomplete) {
|
assert('command' in cur, "No command property found for autocomplete option");
|
||||||
autocompleteData = cur;
|
if(subcommands.size > 0) {
|
||||||
|
const parent = iAutocomplete.options.getSubcommand();
|
||||||
|
const parentAndOptionMatches = subcommands.has(parent) && cur.name === choice.name;
|
||||||
|
if (parentAndOptionMatches) {
|
||||||
|
return cur;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(cur.name === choice.name) {
|
||||||
|
return cur;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}}
|
||||||
return autocompleteData;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user