mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 17:36:56 +00:00
Compare commits
105 Commits
api-update
...
v2.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71cec6f142 | ||
|
|
14556223fd | ||
|
|
59c1c9c6a9 | ||
|
|
a120136f55 | ||
|
|
9b2d7eea5f | ||
|
|
4d7aa97b66 | ||
|
|
83eadcd2e5 | ||
|
|
c0bf346841 | ||
|
|
73c161fffe | ||
|
|
ee763301d0 | ||
|
|
c5f6eb9794 | ||
|
|
ec8a61a9ee | ||
|
|
87c17dbe10 | ||
|
|
790ce1681c | ||
|
|
cbad7380e1 | ||
|
|
ad36875be2 | ||
|
|
50288867a5 | ||
|
|
6b8995d149 | ||
|
|
82bbddac8d | ||
|
|
03936eb2ea | ||
|
|
c4019f7a08 | ||
|
|
992619f8e5 | ||
|
|
b995560ec6 | ||
|
|
f01ef9b86c | ||
|
|
702c5750fc | ||
|
|
d5d1b4129b | ||
|
|
7658d3e3ab | ||
|
|
9c1abc6b2e | ||
|
|
20bc135a7d | ||
|
|
8a373de880 | ||
|
|
395549c173 | ||
|
|
dbc180fa78 | ||
|
|
ff5c161469 | ||
|
|
82637245f3 | ||
|
|
bc3ed918da | ||
|
|
62bfcb1eb7 | ||
|
|
fbf54c9d36 | ||
|
|
b999918b71 | ||
|
|
224ce97fe8 | ||
|
|
f52dd01ca5 | ||
|
|
b8841e926d | ||
|
|
f0f54cb7f2 | ||
|
|
ebe759f5e0 | ||
|
|
58d97e08a5 | ||
|
|
21a438768b | ||
|
|
b3ed8da68f | ||
|
|
c5bd94131d | ||
|
|
3dec347ef0 | ||
|
|
4e9530f4d7 | ||
|
|
0da1b5a4dc | ||
|
|
8a7a671300 | ||
|
|
bf8a5d5a11 | ||
|
|
74378f0f12 | ||
|
|
0559fcca96 | ||
|
|
70d7bdb8c5 | ||
|
|
b6ea3da23f | ||
|
|
75a6a04db5 | ||
|
|
24fae252a7 | ||
|
|
d70a2a1d5e | ||
|
|
0d6e592614 | ||
|
|
44ee2f4440 | ||
|
|
b560d56346 | ||
|
|
344229b65f | ||
|
|
ca728f755b | ||
|
|
d8d6330260 | ||
|
|
c17c49bb17 | ||
|
|
7da7bff700 | ||
|
|
a0587f59d4 | ||
|
|
d62be87c9a | ||
|
|
35a200f055 | ||
|
|
d96681bfb5 | ||
|
|
d1b034b826 | ||
|
|
2387add445 | ||
|
|
7bf15a2d5d | ||
|
|
07e6dabce1 | ||
|
|
8e3feb81ca | ||
|
|
9a16c20dad | ||
|
|
17eb816ec9 | ||
|
|
79be5096d3 | ||
|
|
4fea383519 | ||
|
|
ca9ac52fae | ||
|
|
9cb25a585a | ||
|
|
17033254d4 | ||
|
|
2f5e0fc772 | ||
|
|
a35ceb9531 | ||
|
|
fbbd79babc | ||
|
|
501745b7ea | ||
|
|
6ea84ac8cd | ||
|
|
76c4333a81 | ||
|
|
ac459593a0 | ||
|
|
c5dac42da0 | ||
|
|
ef2200c257 | ||
|
|
fcb5f6747c | ||
|
|
dd75650a46 | ||
|
|
4872590b28 | ||
|
|
cc127bd040 | ||
|
|
9dd82a3cfb | ||
|
|
9340cf229c | ||
|
|
7c97fa9461 | ||
|
|
ef22aca5ff | ||
|
|
e71b63d261 | ||
|
|
e677ce0839 | ||
|
|
371f9d711a | ||
|
|
a5320dddb9 | ||
|
|
92b83c8d32 |
12
.eslintrc
12
.eslintrc
@@ -3,9 +3,11 @@
|
||||
"extends": ["plugin:@typescript-eslint/recommended"],
|
||||
"parserOptions": { "ecmaVersion": "latest", "sourceType": "script" },
|
||||
"rules": {
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals" : true }],
|
||||
"semi": ["error", "always"],
|
||||
"@typescript-eslint/no-empty-interface": 0
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
|
||||
"semi": ["error", "always"],
|
||||
"@typescript-eslint/no-empty-interface": 0,
|
||||
"@typescript-eslint/ban-types" : 0,
|
||||
"@typescript-eslint/no-explicit-any": "off"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@@ -1,2 +1 @@
|
||||
src/* @jacoobes
|
||||
docs/* @Murtatrxx
|
||||
* @jacoobes
|
||||
|
||||
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG] Write a descriptive title."
|
||||
labels: bug
|
||||
assignees: EvolutionX-10, jacoobes, Murtatrxx
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Versioning**
|
||||
NodeJS version:
|
||||
DiscordJS version:
|
||||
SernHandler version:
|
||||
Channel: (e.g. beta)
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Sern Community Support
|
||||
url: https://discord.gg/9w8jzsR48U
|
||||
about: Please ask and answer questions here.
|
||||
43
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
43
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Ask for things that are not in sern
|
||||
title: "[Feature] Request a feature"
|
||||
labels: feature
|
||||
assignees: EvolutionX-10, jacoobes, Murtatrxx
|
||||
|
||||
---
|
||||
Request a new feature!
|
||||
---
|
||||
### Is your proposal related to a problem?
|
||||
|
||||
<!--
|
||||
Provide a clear and concise description of what the problem is.
|
||||
For example, "I'm always frustrated when..."
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
|
||||
### Describe the solution you'd like
|
||||
|
||||
<!--
|
||||
Provide a clear and concise description of what you want to happen.
|
||||
-->
|
||||
|
||||
(Describe your proposed solution here.)
|
||||
|
||||
### Describe alternatives you've considered
|
||||
|
||||
<!--
|
||||
Let us know about other solutions you've tried or researched.
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
|
||||
### Additional context
|
||||
|
||||
<!--
|
||||
Is there anything else you can add about the proposal?
|
||||
You might want to link to related issues here, if you haven't already.
|
||||
-->
|
||||
|
||||
(Write your answer here.)
|
||||
26
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
26
.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
# Description
|
||||
|
||||
Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.
|
||||
|
||||
Fixes # (issue)
|
||||
|
||||
## Type of change
|
||||
|
||||
Please delete options that are not relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] This change requires a documentation update
|
||||
|
||||
# Checklist:
|
||||
|
||||
- [ ] My code follows the style guidelines of this project
|
||||
- [ ] I have performed a self-review of my code
|
||||
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||
- [ ] I have made corresponding changes to the documentation
|
||||
- [ ] My changes generate no new warnings
|
||||
- [ ] I have added tests that prove my fix is effective or that my feature works
|
||||
- [ ] New and existing unit tests pass locally with my changes
|
||||
- [ ] Any dependent changes have been merged and published in downstream modules
|
||||
|
||||
2
.github/SECURITY.md
vendored
2
.github/SECURITY.md
vendored
@@ -14,6 +14,6 @@ Project is currently under heavy development but you can try out our [npm packag
|
||||
|
||||
You can report a vulnerability by opening an issue on the [project's GitHub](https://github.com/SernHandler/Sern/issues) repository.
|
||||
|
||||
Please provide as much information as possible when reporting a vulnerability. We are lookin information for, the affected version, and the steps to reproduce the vulnerability.
|
||||
Please provide as much information as possible when reporting a vulnerability. We are looking information for, the affected version, and the steps to reproduce the vulnerability.
|
||||
|
||||
Be patient, we are working on fixing all reported vulnerabilities.
|
||||
|
||||
8
.github/workflows/codeql-analysis.yml
vendored
8
.github/workflows/codeql-analysis.yml
vendored
@@ -24,14 +24,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
uses: github/codeql-action/analyze@v2
|
||||
|
||||
44
.github/workflows/continuous-integration.yml
vendored
Normal file
44
.github/workflows/continuous-integration.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: Continuous Integration
|
||||
|
||||
on:
|
||||
# Trigger the workflow on push or pull request or custom
|
||||
push:
|
||||
branches:
|
||||
main
|
||||
pull_request_target:
|
||||
branches:
|
||||
main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
Prettier:
|
||||
name: Run Prettier
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # tag=v3
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
|
||||
with:
|
||||
node-version: 17
|
||||
|
||||
# Prettier must be in `package.json`
|
||||
- name: Install Node.js dependencies
|
||||
run: npm i -g prettier && npm i
|
||||
|
||||
- name: Run Prettier
|
||||
run: prettier --write .
|
||||
|
||||
- name: Create Pull Request
|
||||
id: cpr
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
commit-message: "style: pretty please"
|
||||
branch: prettier
|
||||
delete-branch: true
|
||||
branch-suffix: short-commit-hash
|
||||
title: "style: pretty please"
|
||||
body: "pretty pretty prettier"
|
||||
reviewers: EvolutionX-10
|
||||
20
.github/workflows/dependency-review.yml
vendored
Normal file
20
.github/workflows/dependency-review.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: 'Dependency Review'
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v2
|
||||
8
.github/workflows/npm-publish.yml
vendored
8
.github/workflows/npm-publish.yml
vendored
@@ -8,8 +8,8 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
- run: npm ci
|
||||
@@ -19,8 +19,8 @@ jobs:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v2
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
14
.github/workflows/release-please.yml
vendored
Normal file
14
.github/workflows/release-please.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
name: release-please
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
release-please:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: google-github-actions/release-please-action@v3
|
||||
with:
|
||||
release-type: node
|
||||
package-name: release-please-action
|
||||
bump-patch-for-minor-pre-major: true
|
||||
|
||||
29
.github/workflows/test.yml
vendored
29
.github/workflows/test.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
run-tests:
|
||||
name: Run Tests
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 17
|
||||
|
||||
- name: Install Node.js dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -82,5 +82,8 @@ dist
|
||||
# VisualStudio Config file
|
||||
.vs
|
||||
|
||||
# VSCode settings and cache
|
||||
.vscode
|
||||
|
||||
# IntelliJ IDEA Config file
|
||||
.idea/
|
||||
|
||||
10
.npmignore
10
.npmignore
@@ -1,5 +1,4 @@
|
||||
src/
|
||||
tsconfig.json
|
||||
docs/
|
||||
.gitignore
|
||||
|
||||
@@ -9,7 +8,6 @@ logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
@@ -106,4 +104,10 @@ CODE_OF_CONDUCT.md
|
||||
|
||||
babel.config.js
|
||||
|
||||
tests/
|
||||
tsup.config.js
|
||||
|
||||
tsconfig-base.json
|
||||
|
||||
tsconfig.cjs.json
|
||||
|
||||
tsconfig.esm.json
|
||||
@@ -1 +1,3 @@
|
||||
README.md
|
||||
.github/
|
||||
*.md
|
||||
dist/
|
||||
12
.prettierrc
12
.prettierrc
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": true,
|
||||
"printWidth": 100,
|
||||
"tabWidth": 4,
|
||||
"arrowParens": "avoid"
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": true,
|
||||
"printWidth": 100,
|
||||
"tabWidth": 4,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
|
||||
140
CHANGELOG.md
Normal file
140
CHANGELOG.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# Changelog
|
||||
|
||||
## [2.0.0](https://github.com/sern-handler/handler/compare/v1.2.1...v2.0.0) (2022-12-28)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* (2.0 global services) ([#156](https://github.com/sern-handler/handler/issues/156))
|
||||
|
||||
### Features
|
||||
|
||||
* (2.0 global services) ([#156](https://github.com/sern-handler/handler/issues/156)) ([1455622](https://github.com/sern-handler/handler/commit/14556223fd6f79b797fb2aee03e795d4f4e94a8b))
|
||||
|
||||
## [1.2.1](https://github.com/sern-handler/handler/compare/v1.2.0...v1.2.1) (2022-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **autocomplete:** now support multiple autocomplete options ([#147](https://github.com/sern-handler/handler/issues/147)) ([cbad738](https://github.com/sern-handler/handler/commit/cbad7380e1993b96c643f365726457f63e4fbd5d))
|
||||
|
||||
## [1.2.0](https://github.com/sern-handler/handler/compare/v1.1.0...v1.2.0) (2022-09-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* allow constructable modules ([#133](https://github.com/sern-handler/handler/issues/133)) ([03936eb](https://github.com/sern-handler/handler/commit/03936eb2ea1d1af7cada04d77bb8345d63a5e20f))
|
||||
* classmodules@arcs ([#143](https://github.com/sern-handler/handler/issues/143)) ([5028886](https://github.com/sern-handler/handler/commit/50288867a5b171511941a1be3877d721694e9f77))
|
||||
* update CODEOWNERS ([6b8995d](https://github.com/sern-handler/handler/commit/6b8995d149c857558415a6c151a3f575ec373445))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* feat of allow constructable modules ([#138](https://github.com/sern-handler/handler/issues/138)) ([82bbdda](https://github.com/sern-handler/handler/commit/82bbddac8d656b60b3a1fb2471ea03ee5224f5c3))
|
||||
|
||||
## [1.1.0](https://github.com/sern-handler/handler/compare/v1.0.0...v1.1.0) (2022-08-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add proper error handling ([#115](https://github.com/sern-handler/handler/issues/115)) ([395549c](https://github.com/sern-handler/handler/commit/395549c173cb62a18205e451bf2cb5579ba9a6e0))
|
||||
|
||||
|
||||
### Miscellaneous Chores
|
||||
|
||||
* release 1.1.0 ([8a373de](https://github.com/sern-handler/handler/commit/8a373de880ff18df85af812adf9f6f6a4f45028d))
|
||||
|
||||
## 1.0.0 (2022-08-15)
|
||||
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* improve quality of code, refactorings, QOL intellisense (#64)
|
||||
|
||||
### Features
|
||||
|
||||
* add .prettierignore and ignore README.md ([7ae5ecf](https://github.com/sern-handler/handler/commit/7ae5ecf1a64700d667e85420ae4b2eaf31781d85))
|
||||
* Add castings for res ([2697e35](https://github.com/sern-handler/handler/commit/2697e35b2e5b754ea9d0d84db3720fb68b3f43db))
|
||||
* Add DefinetlyDefined type, more todo statements ([c8c0c84](https://github.com/sern-handler/handler/commit/c8c0c841db2423e29d69bbc1a3ab590bfebb5d5b))
|
||||
* add discord.js as a peerDependency instead ([b3ed8da](https://github.com/sern-handler/handler/commit/b3ed8da68f55b69a7fe1697cd88c552243cc637f))
|
||||
* add docs/ to npmignore ([f90342d](https://github.com/sern-handler/handler/commit/f90342d6b140241f7a6a95dea71c05bf309a7a52))
|
||||
* add externallyUsed.ts and support BothCommands again ([fc81bfc](https://github.com/sern-handler/handler/commit/fc81bfc6d75e4722486766715abe7271ad21cd7f))
|
||||
* add feature-request.md ([#92](https://github.com/sern-handler/handler/issues/92)) ([0d6e592](https://github.com/sern-handler/handler/commit/0d6e592614f0d4eeaaa9ffe5ba245fe002f5b907))
|
||||
* add frontmatter ([#95](https://github.com/sern-handler/handler/issues/95)) ([75a6a04](https://github.com/sern-handler/handler/commit/75a6a04db56551049387e38979bb7ef21356f303))
|
||||
* Add messageComponent handler ([d29298c](https://github.com/sern-handler/handler/commit/d29298c17a1d67146bdddb9cf07a16924c55ed3a))
|
||||
* add version.txt ([4fea383](https://github.com/sern-handler/handler/commit/4fea383519b9905c17c7679587f69b530c08cec8))
|
||||
* added conventional commits ([741cf13](https://github.com/sern-handler/handler/commit/741cf13fd56ac49ebca6f73ecc3a2209f00e774d))
|
||||
* Added SECURITY file & formatted some TypeScript code ([779011a](https://github.com/sern-handler/handler/commit/779011a124ab76bbfb19a2a11889bf9255cbd360))
|
||||
* adding better typings, refactoring ([99e2a99](https://github.com/sern-handler/handler/commit/99e2a997edaac1ba880e56bf782ecd1fa5e96b4c))
|
||||
* Adding docs to some data structures, moving to default from export files ([0ae541d](https://github.com/sern-handler/handler/commit/0ae541daba4c5d2aa3e612ab4b78fd6a858717ad))
|
||||
* adding modal and autocomplete support ([77856ce](https://github.com/sern-handler/handler/commit/77856ce5d0d8d1e2e2f5a971269224a4174bc205))
|
||||
* adding refactoring for repetitive event plugin processing ([475b073](https://github.com/sern-handler/handler/commit/475b0736d573bb8969b2a0eb9180231aa8618a0e))
|
||||
* Adding sern event listeners, overriding and typing methods ([115d1a4](https://github.com/sern-handler/handler/commit/115d1a49b52eb45d9b68ba015f8f734b902e9a60))
|
||||
* Adding TextInput map & starting event plugins for message components ([6ac9720](https://github.com/sern-handler/handler/commit/6ac9720260040afb12d232b002c28db99b18e093))
|
||||
* Aliases optional ([430315a](https://github.com/sern-handler/handler/commit/430315ad02060121e75604aee40c246c71a7e8d2))
|
||||
* better looking typings for modules ([53bc080](https://github.com/sern-handler/handler/commit/53bc080a290fd5064993aa0d98497d4b239ac8f3))
|
||||
* broadening EventPlugin default generic type, reformat with prettier ([88dcdee](https://github.com/sern-handler/handler/commit/88dcdee818e42405234ef502087226a8c042c92f))
|
||||
* CodeQL ([7012da6](https://github.com/sern-handler/handler/commit/7012da60530c2b0b5d8cc97b417a80cd8031f51f))
|
||||
* delete partition.ts ([f6d584c](https://github.com/sern-handler/handler/commit/f6d584cf99abdb292985f812e64553a37ab51a01))
|
||||
* Edited event names for more conciseness, finished basic event emitters ([3f64a8a](https://github.com/sern-handler/handler/commit/3f64a8aa0a47a09f822d54f2b3f03bc42faa10f7))
|
||||
* finished interactionCreate.ts handling? (need test) ([97907b7](https://github.com/sern-handler/handler/commit/97907b746fc94d6e8b65e2fec1cce4b0c3160491))
|
||||
* finishing autocomplete!! ([d63423c](https://github.com/sern-handler/handler/commit/d63423cfc458cb9ab07b9900a7c4d2f7ea8d71b9))
|
||||
* finishing optionData for autocomplete changes, adding class for builder ([b08eebf](https://github.com/sern-handler/handler/commit/b08eebf6850acaee3b56bb1c60aec2a026a5144c))
|
||||
* Finishing up autocomplete, need to test ([d50b801](https://github.com/sern-handler/handler/commit/d50b8013ee343b2be0ed232938e9f5f91c43b493))
|
||||
* fix duplicate ([c5bd941](https://github.com/sern-handler/handler/commit/c5bd94131dfb20b2c69b7eeb96f3ad89d6de43f4))
|
||||
* **handler:** adding higher-order-function wrappers to increase readability and shorten code ([0f0b0fb](https://github.com/sern-handler/handler/commit/0f0b0fb61c80654179e2c6d6f69e50c70114201b))
|
||||
* **handler:** command plugins work?! ([70bd12d](https://github.com/sern-handler/handler/commit/70bd12dd61182f48445c707a9199421b1dba586e))
|
||||
* **handler:** progress on event plugins ([2f61399](https://github.com/sern-handler/handler/commit/2f61399b5e5ad53ee3165e19cb74dd279b827b99))
|
||||
* **higherorders.ts:** a new function that acts as a command options builder ([651009c](https://github.com/sern-handler/handler/commit/651009c9ed5e8e04cf44fa4438f94a9e119aa8f8))
|
||||
* improve quality of code, refactorings, QOL intellisense ([#64](https://github.com/sern-handler/handler/issues/64)) ([e71b63d](https://github.com/sern-handler/handler/commit/e71b63d261d86b17ddc05fbee999f63623d8c6d1))
|
||||
* Improved TypeScript experince ([dad3042](https://github.com/sern-handler/handler/commit/dad3042a644b0e47d01319f48eefe01632678cc3))
|
||||
* interactionCreate.ts refactoring ([c4e8e51](https://github.com/sern-handler/handler/commit/c4e8e517b3f4bb6baca902251a0afa22b2548450))
|
||||
* Making name required in auto cmp interactions ([ac8a2f4](https://github.com/sern-handler/handler/commit/ac8a2f4c86a1c426d32e388a5439a8696db52279))
|
||||
* move name and description out of OptionsData[] ([93942bd](https://github.com/sern-handler/handler/commit/93942bd0e7d0ac688d20159cab2c70c3285085f4))
|
||||
* Optional plugins to reduce bloat ([2b81d53](https://github.com/sern-handler/handler/commit/2b81d53503209a738b70d238512c82542d3d88e8))
|
||||
* **prefix:** make defaultPrefix optional ([f6b88dc](https://github.com/sern-handler/handler/commit/f6b88dcdc80c407e14f4d6ae73eb27e75d195e18))
|
||||
* **readme.md:** added basic command examples ([63b2d3a](https://github.com/sern-handler/handler/commit/63b2d3a5723ac6e1f0baa0de8b65640cecd7d634))
|
||||
* remove comments about prev commit ([a220949](https://github.com/sern-handler/handler/commit/a2209494bdd05ca89176aff82f7d3afce0b8de46))
|
||||
* remove copyright bloat ([48737ef](https://github.com/sern-handler/handler/commit/48737efea3c0fce572238701e72335293333379f))
|
||||
* remove externallyUsed.ts ([3dec347](https://github.com/sern-handler/handler/commit/3dec347ef0957845601f0eb2acb3f1815d1e9ca1))
|
||||
* Revamp Docs ([#47](https://github.com/sern-handler/handler/issues/47)) ([163e48f](https://github.com/sern-handler/handler/commit/163e48f3eb38d37500cefc8d0c722c083a3070c7))
|
||||
* **sern.ts:** adding logging instead of large complaining messages from bot ([00a5fa4](https://github.com/sern-handler/handler/commit/00a5fa43ad9e0b4c7d5ef1f2772a4cb186768837))
|
||||
* **sern.ts:** beginning to add new basic logger system ([ef9d53e](https://github.com/sern-handler/handler/commit/ef9d53e6b1a9009eab5ce9ff9f8b5542d1d7cf7f))
|
||||
* **sern.ts:** changed how module is passed around, now has name property at runtime ([40fb723](https://github.com/sern-handler/handler/commit/40fb7231436331c97fa791eab3b8b51636e826f1))
|
||||
* **sern.ts:** changing default value of args in text based cmd to string[], from string ([1397974](https://github.com/sern-handler/handler/commit/1397974fb6e6d8c1b1e82db8272ef0a57916022c))
|
||||
* **sern.ts:** changing default value of args in text based cmd to string[], from string ([e0541f7](https://github.com/sern-handler/handler/commit/e0541f777bc3dcb1ec0c0cccf219b9fa66199a2b))
|
||||
* **sern.ts:** changing text-based command parser fn value to string[] ([b11f999](https://github.com/sern-handler/handler/commit/b11f9996749977a16e516523af7a8e2a9e6521ae))
|
||||
* **sern.ts:** renaming Module.delegate to Module.execute ([8702876](https://github.com/sern-handler/handler/commit/870287674aa7eccbe1fc890d1cf2cd808982b801))
|
||||
* should be able to register other nodejs event emitters ([b8cda35](https://github.com/sern-handler/handler/commit/b8cda351e1f549422692c633255ac1d6c7d78a9b))
|
||||
* shrink package size, improve dev deps, esm and cjs support ([#98](https://github.com/sern-handler/handler/issues/98)) ([74378f0](https://github.com/sern-handler/handler/commit/74378f0f12cf5d16b90ddbc01fb42505e0235c39))
|
||||
* update example ([0da1b5a](https://github.com/sern-handler/handler/commit/0da1b5a4dc6823807880ade03728b466fe895190))
|
||||
* Updated Readme design ([369586f](https://github.com/sern-handler/handler/commit/369586f378f807ba9906167b5ada197c2c95e411))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* accidentally imported wildcard from wrong place & namespace ([8782cad](https://github.com/sern-handler/handler/commit/8782cad9cddbb24c03c2bfff96d3377aceb5f542))
|
||||
* autocomplete in nested form ([#97](https://github.com/sern-handler/handler/issues/97)) ([70d7bdb](https://github.com/sern-handler/handler/commit/70d7bdb8c53a1990addc5c9fd54427f194833b4e))
|
||||
* Change discord server link ([#62](https://github.com/sern-handler/handler/issues/62)) ([e677ce0](https://github.com/sern-handler/handler/commit/e677ce083966dedc945d236034e2ce4a7a586e05))
|
||||
* **codeql-analysis.yml:** Fixed autobuild issue on some TS files & deleted more unused comments ([e51c7ff](https://github.com/sern-handler/handler/commit/e51c7ffed038f0519a37f4339406c28546d92c83))
|
||||
* crash on collectors ([#89](https://github.com/sern-handler/handler/issues/89)) ([a0587f5](https://github.com/sern-handler/handler/commit/a0587f59d43d62642c033e0bb843902f9e6dc0c4))
|
||||
* crash on collectors pt ([7da7bff](https://github.com/sern-handler/handler/commit/7da7bff700f8e46e72412ca5d379a6edbc14e10a))
|
||||
* didn't run prettier, now i am ([6c144de](https://github.com/sern-handler/handler/commit/6c144defcacd7732e15292f6c3e5eaea7944bc32))
|
||||
* Fix return type of sernModule ([cf85a5d](https://github.com/sern-handler/handler/commit/cf85a5db6413e2b8b42143f70964f7a19789e1ff))
|
||||
* Fixed renovate warning ([#77](https://github.com/sern-handler/handler/issues/77)) ([76c4333](https://github.com/sern-handler/handler/commit/76c4333a817006100f0b99d73bb455e82797d3d9))
|
||||
* Fixed typo in Security.md ([c35def9](https://github.com/sern-handler/handler/commit/c35def99c93e77a0c932a1b8f1da06cd45fde294))
|
||||
* **handler.ts:** added the changes of Module<T>.execute to type delegate (now type execute) ([f062a33](https://github.com/sern-handler/handler/commit/f062a338687be4b3ac64c048a63bdcb895282d2d))
|
||||
* linting issue in markup.ts ([dac665d](https://github.com/sern-handler/handler/commit/dac665d6281a29ec79663adb26a3e5c5243e6ae0))
|
||||
* Non-exhaustiveness led to commands not registering readyEvent.ts ([b266508](https://github.com/sern-handler/handler/commit/b26650818e2c193c326356359b38412117ea6186))
|
||||
* prettier changes again ([d5bb992](https://github.com/sern-handler/handler/commit/d5bb9922dfdb14e4f7e95ad5acd470765b7a90c2))
|
||||
* prettier wants lf line ending ([571a804](https://github.com/sern-handler/handler/commit/571a8044b027afee91466219a841817dd55ef455))
|
||||
* **sern.ts:** checking ctx instanceof Message always returned false ([7166947](https://github.com/sern-handler/handler/commit/7166947d28f3be1a6e1c44385eb7946731784f58))
|
||||
* Standard for of does not resolve promises. Switched to for await ([66b9f51](https://github.com/sern-handler/handler/commit/66b9f51fa73cf07a589671d13ca4c65a9c8193a1))
|
||||
* **utilexports.ts:** forgot to remove the deleted feat of option builder ([1cff46c](https://github.com/sern-handler/handler/commit/1cff46c0ab5959d8e0f0fe89f1e6cd4c6cebff19))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* Move enums to enums.ts ([40a10bf](https://github.com/sern-handler/handler/commit/40a10bf32b9a1c6afbf85bdaeb2a7918c15ac7a8))
|
||||
* Re-add plugins overload ([b9b5919](https://github.com/sern-handler/handler/commit/b9b59197df7d9bbeac3df68ebe6f7cea1ce50677))
|
||||
* remove version.txt ([ca9ac52](https://github.com/sern-handler/handler/commit/ca9ac52fae32108b4cb90b201204d5c358c5ef7b))
|
||||
@@ -1,5 +1,5 @@
|
||||
# Code of Conduct
|
||||
All participants of SernHandler are expected to abide by our Code of Conduct, both online and during in-person events that are hosted and/or associated with SernHandler.
|
||||
All participants of sern are expected to abide by our Code of Conduct, both online and during in-person events that are hosted and/or associated with sern.
|
||||
|
||||
# The Pledge
|
||||
In the interest of fostering an open and welcoming environment, we pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
@@ -26,7 +26,7 @@ Examples of behaviour that contributes to creating a positive environment includ
|
||||
• Other conduct which you know could reasonably be considered inappropriate in a professional setting. <br/>
|
||||
• Enforcement. <br/>
|
||||
|
||||
Violations of the Code of Conduct may be reported by sending a message to [discord server](https://discord.com/). All reports will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Further details of specific enforcement policies may be posted separately.
|
||||
Violations of the Code of Conduct may be reported by reaching us on our [discord server](https://discord.com/). All reports will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
We hold the right and responsibility to remove comments or other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any members for other behaviours that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
|
||||
87
README.md
87
README.md
@@ -1,13 +1,21 @@
|
||||
# SernHandler
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/sern-handler/.github/main/banner.png" width="900px" />
|
||||
</div>
|
||||
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/v/@sern/handler?maxAge=3600" alt="NPM version" /></a>
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/dt/@sern/handler?maxAge=3600" alt="NPM downloads" /></a>
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
<h1 align="center">Handlers. Redefined.</h1>
|
||||
<h4 align="center">A customizable, batteries-included, powerful discord.js framework to streamline bot development.</h4>
|
||||
|
||||
A customizable, batteries-included, powerful discord.js framework to automate and streamline your bot development.
|
||||
<div align="center" styles="margin-top: 10px">
|
||||
<img src="https://img.shields.io/badge/open-source-brightgreen" />
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/v/@sern/handler?maxAge=3600" alt="NPM version" /></a>
|
||||
<a href="https://www.npmjs.com/package/@sern/handler"><img src="https://img.shields.io/npm/dt/@sern/handler?maxAge=3600" alt="NPM downloads" /></a>
|
||||
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-brightgreen" alt="License MIT" /></a>
|
||||
<a href="https://sern.dev"><img alt="docs.rs" src="https://img.shields.io/docsrs/docs" /></a>
|
||||
<img alt="Lines of code" src="https://img.shields.io/badge/total%20lines-2k-blue" />
|
||||
</div>
|
||||
|
||||
|
||||
## Installation
|
||||
## 📜 Installation
|
||||
|
||||
```sh
|
||||
npm install @sern/handler
|
||||
@@ -21,13 +29,26 @@ yarn add @sern/handler
|
||||
pnpm add @sern/handler
|
||||
```
|
||||
|
||||
## Basic Usage
|
||||
## 👀 Quick Look
|
||||
|
||||
* Support for discord.js v14 and all interactions
|
||||
* Hybrid commands
|
||||
* Lightweight and customizable
|
||||
* ESM, CommonJS and TypeScript support
|
||||
* A powerful CLI and awesome community-made plugins
|
||||
|
||||
## 👶 Basic Usage
|
||||
|
||||
#### ` index.js (CommonJS)`
|
||||
|
||||
```js
|
||||
// Import the discord.js Client and GatewayIntentBits
|
||||
const { Client, GatewayIntentBits } = require('discord.js');
|
||||
const { Sern } = require('sern-handler');
|
||||
|
||||
// Import Sern namespace
|
||||
const { Sern } = require('@sern/handler');
|
||||
|
||||
// Our configuration file
|
||||
const { defaultPrefix, token } = require('./config.json');
|
||||
|
||||
const client = new Client({
|
||||
@@ -37,11 +58,20 @@ const client = new Client({
|
||||
GatewayIntentBits.GuildMessages
|
||||
]
|
||||
});
|
||||
export const useContainer = Sern.makeDependencies({
|
||||
build: root => root
|
||||
.add({ '@sern/client': single(client) })
|
||||
.add({ '@sern/logger': single(new DefaultLogging()) })
|
||||
});
|
||||
|
||||
//View docs for all options
|
||||
Sern.init({
|
||||
client,
|
||||
defaultPrefix,
|
||||
commands : 'src/commands',
|
||||
defaultPrefix: '!', // removing defaultPrefix will shut down text commands
|
||||
commands: 'src/commands',
|
||||
// events: 'src/events' (optional),
|
||||
containerConfig : {
|
||||
get: useContainer
|
||||
}
|
||||
});
|
||||
|
||||
client.login(token);
|
||||
@@ -50,34 +80,35 @@ client.login(token);
|
||||
#### ` ping.js (CommonJS)`
|
||||
|
||||
```js
|
||||
const { Sern, CommandType } = require('@sern/handler');
|
||||
const { CommandType, commandModule } = require('@sern/handler');
|
||||
|
||||
exports.default = {
|
||||
description: 'A ping pong command',
|
||||
type: CommandType.Slash,
|
||||
execute(ctx) {
|
||||
ctx.reply('pong!');
|
||||
}
|
||||
};
|
||||
exports.default = commandModule({
|
||||
name: 'ping',
|
||||
description: 'A ping pong command',
|
||||
type: CommandType.Slash,
|
||||
execute(ctx) {
|
||||
ctx.reply('pong!');
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
See our [templates](https://github.com/sern-handler/templates) for TypeScript examples and more
|
||||
See our [templates](https://github.com/sern-handler/templates) for TypeScript examples and more.
|
||||
|
||||
## CLI
|
||||
## 💻 CLI
|
||||
|
||||
We are providing a [command line interface](https://github.com/sern-handler/cli) for better & easier bot developement. Don't forget to view it.
|
||||
It is **highly encouraged** to use the [command line interface](https://github.com/sern-handler/cli) for your project. Don't forget to view it.
|
||||
|
||||
## Links
|
||||
## 🔗 Links
|
||||
|
||||
- [Official Documentation](https://sern-handler.js.org)
|
||||
- [Support Server](https://discord.com/invite/Yvb7DnqjXX)
|
||||
- [Official Documentation and Guide](https://sern.dev)
|
||||
- [Support Server](https://sern.dev/discord)
|
||||
|
||||
## Contribute
|
||||
## 👋 Contribute
|
||||
|
||||
- Read our contribution [guidelines](https://github.com/sern-handler/handler) carefully
|
||||
- Read our contribution [guidelines](./.github/CONTRIBUTING.md) carefully
|
||||
- Pull up on [issues](https://github.com/sern-handler/handler/issues) and report bugs
|
||||
- All kinds of contributions are welcomed.
|
||||
|
||||
## Roadmap
|
||||
## 🚈 Roadmap
|
||||
|
||||
You can check our [roadmap](https://github.com/sern-handler/roadmap) to see what's going to be added or patched in the future.
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [['@babel/preset-env', { targets: { node: 'current' } }], '@babel/preset-typescript'],
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
|
||||
@@ -1 +0,0 @@
|
||||
sern-handler.js.org
|
||||
@@ -1,110 +0,0 @@
|
||||
:root {
|
||||
--light-hl-0: #000000;
|
||||
--dark-hl-0: #d4d4d4;
|
||||
--light-hl-1: #af00db;
|
||||
--dark-hl-1: #c586c0;
|
||||
--light-hl-2: #001080;
|
||||
--dark-hl-2: #9cdcfe;
|
||||
--light-hl-3: #a31515;
|
||||
--dark-hl-3: #ce9178;
|
||||
--light-hl-4: #0000ff;
|
||||
--dark-hl-4: #569cd6;
|
||||
--light-hl-5: #0070c1;
|
||||
--dark-hl-5: #4fc1ff;
|
||||
--light-hl-6: #795e26;
|
||||
--dark-hl-6: #dcdcaa;
|
||||
--light-hl-7: #008000;
|
||||
--dark-hl-7: #6a9955;
|
||||
--light-hl-8: #cd3131;
|
||||
--dark-hl-8: #f44747;
|
||||
--light-code-background: #f5f5f5;
|
||||
--dark-code-background: #1e1e1e;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
--hl-0: var(--light-hl-0);
|
||||
--hl-1: var(--light-hl-1);
|
||||
--hl-2: var(--light-hl-2);
|
||||
--hl-3: var(--light-hl-3);
|
||||
--hl-4: var(--light-hl-4);
|
||||
--hl-5: var(--light-hl-5);
|
||||
--hl-6: var(--light-hl-6);
|
||||
--hl-7: var(--light-hl-7);
|
||||
--hl-8: var(--light-hl-8);
|
||||
--code-background: var(--light-code-background);
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--hl-0: var(--dark-hl-0);
|
||||
--hl-1: var(--dark-hl-1);
|
||||
--hl-2: var(--dark-hl-2);
|
||||
--hl-3: var(--dark-hl-3);
|
||||
--hl-4: var(--dark-hl-4);
|
||||
--hl-5: var(--dark-hl-5);
|
||||
--hl-6: var(--dark-hl-6);
|
||||
--hl-7: var(--dark-hl-7);
|
||||
--hl-8: var(--dark-hl-8);
|
||||
--code-background: var(--dark-code-background);
|
||||
}
|
||||
}
|
||||
|
||||
body.light {
|
||||
--hl-0: var(--light-hl-0);
|
||||
--hl-1: var(--light-hl-1);
|
||||
--hl-2: var(--light-hl-2);
|
||||
--hl-3: var(--light-hl-3);
|
||||
--hl-4: var(--light-hl-4);
|
||||
--hl-5: var(--light-hl-5);
|
||||
--hl-6: var(--light-hl-6);
|
||||
--hl-7: var(--light-hl-7);
|
||||
--hl-8: var(--light-hl-8);
|
||||
--code-background: var(--light-code-background);
|
||||
}
|
||||
|
||||
body.dark {
|
||||
--hl-0: var(--dark-hl-0);
|
||||
--hl-1: var(--dark-hl-1);
|
||||
--hl-2: var(--dark-hl-2);
|
||||
--hl-3: var(--dark-hl-3);
|
||||
--hl-4: var(--dark-hl-4);
|
||||
--hl-5: var(--dark-hl-5);
|
||||
--hl-6: var(--dark-hl-6);
|
||||
--hl-7: var(--dark-hl-7);
|
||||
--hl-8: var(--dark-hl-8);
|
||||
--code-background: var(--dark-code-background);
|
||||
}
|
||||
|
||||
.hl-0 {
|
||||
color: var(--hl-0);
|
||||
}
|
||||
.hl-1 {
|
||||
color: var(--hl-1);
|
||||
}
|
||||
.hl-2 {
|
||||
color: var(--hl-2);
|
||||
}
|
||||
.hl-3 {
|
||||
color: var(--hl-3);
|
||||
}
|
||||
.hl-4 {
|
||||
color: var(--hl-4);
|
||||
}
|
||||
.hl-5 {
|
||||
color: var(--hl-5);
|
||||
}
|
||||
.hl-6 {
|
||||
color: var(--hl-6);
|
||||
}
|
||||
.hl-7 {
|
||||
color: var(--hl-7);
|
||||
}
|
||||
.hl-8 {
|
||||
color: var(--hl-8);
|
||||
}
|
||||
pre,
|
||||
code {
|
||||
background: var(--code-background);
|
||||
}
|
||||
@@ -1,907 +0,0 @@
|
||||
.tsd-kind-icon {
|
||||
display: block;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
text-indent: -20px;
|
||||
}
|
||||
.tsd-kind-icon:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
margin: 0 3px 2px 0;
|
||||
background-image: url(./icons.png);
|
||||
}
|
||||
@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
|
||||
.tsd-kind-icon:before {
|
||||
background-image: url(./icons@2x.png);
|
||||
background-size: 238px 204px;
|
||||
}
|
||||
}
|
||||
|
||||
.tsd-signature.tsd-kind-icon:before {
|
||||
background-position: 0 -153px;
|
||||
}
|
||||
|
||||
.tsd-kind-object-literal > .tsd-kind-icon:before {
|
||||
background-position: 0px -17px;
|
||||
}
|
||||
.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -17px;
|
||||
}
|
||||
.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -17px;
|
||||
}
|
||||
|
||||
.tsd-kind-class > .tsd-kind-icon:before {
|
||||
background-position: 0px -34px;
|
||||
}
|
||||
.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -34px;
|
||||
}
|
||||
.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -34px;
|
||||
}
|
||||
|
||||
.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -51px;
|
||||
}
|
||||
.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -51px;
|
||||
}
|
||||
.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -51px;
|
||||
}
|
||||
|
||||
.tsd-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: 0px -68px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -68px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -85px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -85px;
|
||||
}
|
||||
.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-namespace > .tsd-kind-icon:before {
|
||||
background-position: 0px -102px;
|
||||
}
|
||||
.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -102px;
|
||||
}
|
||||
.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-module > .tsd-kind-icon:before {
|
||||
background-position: 0px -102px;
|
||||
}
|
||||
.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -102px;
|
||||
}
|
||||
.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: 0px -119px;
|
||||
}
|
||||
.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -119px;
|
||||
}
|
||||
.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -119px;
|
||||
}
|
||||
|
||||
.tsd-kind-enum-member > .tsd-kind-icon:before {
|
||||
background-position: 0px -136px;
|
||||
}
|
||||
.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -136px;
|
||||
}
|
||||
.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -136px;
|
||||
}
|
||||
|
||||
.tsd-kind-signature > .tsd-kind-icon:before {
|
||||
background-position: 0px -153px;
|
||||
}
|
||||
.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -153px;
|
||||
}
|
||||
.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -153px;
|
||||
}
|
||||
|
||||
.tsd-kind-type-alias > .tsd-kind-icon:before {
|
||||
background-position: 0px -170px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -170px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -170px;
|
||||
}
|
||||
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: 0px -187px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -17px -187px;
|
||||
}
|
||||
.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -34px -187px;
|
||||
}
|
||||
|
||||
.tsd-kind-variable > .tsd-kind-icon:before {
|
||||
background-position: -136px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -0px;
|
||||
}
|
||||
.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -0px;
|
||||
}
|
||||
|
||||
.tsd-kind-property > .tsd-kind-icon:before {
|
||||
background-position: -136px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -0px;
|
||||
}
|
||||
.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -0px;
|
||||
}
|
||||
|
||||
.tsd-kind-get-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -17px;
|
||||
}
|
||||
.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -17px;
|
||||
}
|
||||
|
||||
.tsd-kind-set-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -34px;
|
||||
}
|
||||
.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -34px;
|
||||
}
|
||||
|
||||
.tsd-kind-accessor > .tsd-kind-icon:before {
|
||||
background-position: -136px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -51px;
|
||||
}
|
||||
.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -51px;
|
||||
}
|
||||
|
||||
.tsd-kind-function > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-method > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-call-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -68px;
|
||||
}
|
||||
.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -68px;
|
||||
}
|
||||
|
||||
.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: -136px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited
|
||||
> .tsd-kind-icon:before {
|
||||
background-position: -102px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -85px;
|
||||
}
|
||||
.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before {
|
||||
background-position: -136px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited
|
||||
> .tsd-kind-icon:before {
|
||||
background-position: -102px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -85px;
|
||||
}
|
||||
.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -85px;
|
||||
}
|
||||
|
||||
.tsd-kind-constructor > .tsd-kind-icon:before {
|
||||
background-position: -136px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -102px;
|
||||
}
|
||||
.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-constructor-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -102px;
|
||||
}
|
||||
.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -102px;
|
||||
}
|
||||
|
||||
.tsd-kind-index-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -119px;
|
||||
}
|
||||
.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -119px;
|
||||
}
|
||||
|
||||
.tsd-kind-event > .tsd-kind-icon:before {
|
||||
background-position: -136px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -136px;
|
||||
}
|
||||
.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -136px;
|
||||
}
|
||||
|
||||
.tsd-is-static > .tsd-kind-icon:before {
|
||||
background-position: -136px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -153px;
|
||||
}
|
||||
.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -153px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before {
|
||||
background-position: -136px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -170px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -170px;
|
||||
}
|
||||
|
||||
.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before {
|
||||
background-position: -136px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -153px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before {
|
||||
background-position: -51px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -68px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -85px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -102px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before {
|
||||
background-position: -170px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before {
|
||||
background-position: -187px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before {
|
||||
background-position: -119px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before {
|
||||
background-position: -204px -187px;
|
||||
}
|
||||
.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before {
|
||||
background-position: -221px -187px;
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 480 B |
Binary file not shown.
|
Before Width: | Height: | Size: 855 B |
@@ -1,992 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Handler - SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Handler.html">Handler</a></li>
|
||||
</ul>
|
||||
<h1>Class Handler</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Handler</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Constructors</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#constructor" class="tsd-kind-icon">constructor</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section tsd-is-private tsd-is-private-protected">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#wrapper" class="tsd-kind-icon">wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Accessors</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#commandDir" class="tsd-kind-icon">command<wbr />Dir</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section tsd-is-private tsd-is-private-protected">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#commandResult" class="tsd-kind-icon">command<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<a href="Sern.Handler.html#findModuleFrom" class="tsd-kind-icon">find<wbr />Module<wbr />From</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#interactionResult" class="tsd-kind-icon">interaction<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#registerModules" class="tsd-kind-icon">register<wbr />Modules</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#reloadSlash" class="tsd-kind-icon">reload<wbr />Slash</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Constructors</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a id="constructor" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
constructor<a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-constructor tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
new <wbr />Handler<span class="tsd-signature-symbol">(</span>wrapper<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L36"
|
||||
>handler/sern.ts:36</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
wrapper:
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The data that is required to run sern handler</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <a href="Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group tsd-is-private tsd-is-private-protected">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a id="wrapper" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> wrapper<a
|
||||
href="#wrapper"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
wrapper<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Wrapper</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L28"
|
||||
>handler/sern.ts:28</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Accessors</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="client" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
client<a href="#client" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> client<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Client</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L246"
|
||||
>handler/sern.ts:246</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Client</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>the discord.js client (DiscordJS#Client));</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="commandDir" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
command<wbr />Dir<a href="#commandDir" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> commandDir<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L237"
|
||||
>handler/sern.ts:237</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
|
||||
<div><p>Directory of the commands folder</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="prefix" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
prefix<a href="#prefix" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> prefix<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L228"
|
||||
>handler/sern.ts:228</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
|
||||
<div><p>The prefix used for legacy commands</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a id="privateServers" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
private<wbr />Servers<a href="#privateServers" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
<span class="tsd-signature-symbol">get</span> privateServers<span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L255"
|
||||
>handler/sern.ts:255</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>readonly</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h4>
|
||||
<div><p>[]} Private server ID for testing or personal use</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group tsd-is-private tsd-is-private-protected">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="commandResult" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> command<wbr />Result<a
|
||||
href="#commandResult"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
command<wbr />Result<span class="tsd-signature-symbol">(</span>module<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandVal</span>, message<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L112"
|
||||
>handler/sern.ts:112</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>module: <span class="tsd-signature-type">CommandVal</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>Command file information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
message: <span class="tsd-signature-type">Message</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The message object</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>Takes return value and replies it, if possible input</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section
|
||||
class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private"
|
||||
>
|
||||
<a id="findModuleFrom" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> find<wbr />Module<wbr />From<a
|
||||
href="#findModuleFrom"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
find<wbr />Module<wbr />From<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">(</span>ctx<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">CommandVal</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L194"
|
||||
>handler/sern.ts:194</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>
|
||||
T<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>ctx: <span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>name of possible command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">undefined</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">CommandVal</span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="interactionResult" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> interaction<wbr />Result<a
|
||||
href="#interactionResult"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
interaction<wbr />Result<span class="tsd-signature-symbol">(</span>module<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandVal</span>, interaction<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">undefined</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L88"
|
||||
>handler/sern.ts:88</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>module: <span class="tsd-signature-type">CommandVal</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>Command file information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
interaction: <span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">CacheType</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>The Discord.js command interaction (DiscordJS#CommandInteraction))</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">undefined</span><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div><p>Takes return value and replies it, if possible input</p></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="registerModules" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> register<wbr />Modules<a
|
||||
href="#registerModules"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
register<wbr />Modules<span class="tsd-signature-symbol">(</span>modArr<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-symbol">{ </span>absPath<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>mod<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">; </span>name<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L142"
|
||||
>handler/sern.ts:142</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>This function chains <code>Files.buildData</code></p>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
modArr: <span class="tsd-signature-symbol">{ </span>absPath<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">; </span>mod<span class="tsd-signature-symbol">: </span
|
||||
><a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface"
|
||||
>Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">; </span>name<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>module information</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a id="reloadSlash" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagPrivate">Private</span> reload<wbr />Slash<a
|
||||
href="#reloadSlash"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
reload<wbr />Slash<span class="tsd-signature-symbol">(</span>cmdName<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, description<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, options<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">ApplicationCommandOptionData</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Promise</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L207"
|
||||
>handler/sern.ts:207</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>cmdName: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>name of command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>description: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>description of command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
options: <span class="tsd-signature-type">ApplicationCommandOptionData</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>any options for the slash command</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#constructor" class="tsd-kind-icon">constructor</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#wrapper" class="tsd-kind-icon">wrapper</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#commandDir" class="tsd-kind-icon">command<wbr />Dir</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-get-signature tsd-parent-kind-class">
|
||||
<a href="Sern.Handler.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#commandResult" class="tsd-kind-icon">command<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-has-type-parameter tsd-is-private">
|
||||
<a href="Sern.Handler.html#findModuleFrom" class="tsd-kind-icon">find<wbr />Module<wbr />From</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#interactionResult" class="tsd-kind-icon">interaction<wbr />Result</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#registerModules" class="tsd-kind-icon">register<wbr />Modules</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<a href="Sern.Handler.html#reloadSlash" class="tsd-kind-icon">reload<wbr />Slash</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private">
|
||||
<span class="tsd-kind-icon">Private property</span>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private">
|
||||
<span class="tsd-kind-icon">Private method</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,204 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>CommandType - SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.CommandType.html">CommandType</a></li>
|
||||
</ul>
|
||||
<h1>Enumeration CommandType</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Enumeration members</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#SLASH" class="tsd-kind-icon">SLASH</a>
|
||||
</li>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#TEXT" class="tsd-kind-icon">TEXT</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Enumeration members</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a id="SLASH" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
SLASH<a href="#SLASH" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">SLASH<span class="tsd-signature-symbol"> = 2</span></div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L303"
|
||||
>handler/sern.ts:303</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a id="TEXT" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
TEXT<a href="#TEXT" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">TEXT<span class="tsd-signature-symbol"> = 1</span></div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L302"
|
||||
>handler/sern.ts:302</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#SLASH" class="tsd-kind-icon">SLASH</a>
|
||||
</li>
|
||||
<li class="tsd-kind-enum-member tsd-parent-kind-enum">
|
||||
<a href="Sern.CommandType.html#TEXT" class="tsd-kind-icon">TEXT</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
168
docs/index.html
168
docs/index.html
@@ -1,168 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="assets/style.css" />
|
||||
<link rel="stylesheet" href="assets/highlight.css" />
|
||||
<script async src="assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base=".">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container"><h1>sern-handler</h1></div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<div class="tsd-panel tsd-typography">
|
||||
<a href="#sern-handler" id="sern-handler" style="color: inherit; text-decoration: none">
|
||||
<h1>Sern Handler</h1>
|
||||
</a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler">
|
||||
<img src="https://img.shields.io/npm/v/sern_handler?maxAge=3600" alt="NPM version"
|
||||
/></a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler"
|
||||
><img src="https://img.shields.io/npm/dt/sern_handler?maxAge=3600" alt="NPM downloads"
|
||||
/></a>
|
||||
<a href="https://www.npmjs.com/package/sern-handler"
|
||||
><img src="https://img.shields.io/badge/builds-stable" alt="Builds Passing"
|
||||
/></a>
|
||||
|
||||
<p>
|
||||
Sern can automate and streamline development of your discord bot with new version compatibility and full
|
||||
customization.
|
||||
</p>
|
||||
<ul>
|
||||
<li>A reincarnation of <a href="https://github.com/jacoobes/sern_handler">this old project</a></li>
|
||||
</ul>
|
||||
|
||||
<a href="#installation" id="installation" style="color: inherit; text-decoration: none">
|
||||
<h2>Installation</h2>
|
||||
</a>
|
||||
<pre><code class="language-sh"><span class="hl-0">npm install sern-handler</span>
|
||||
</code></pre>
|
||||
<pre><code class="language-sh"><span class="hl-0">yarn add sern-handler</span>
|
||||
</code></pre>
|
||||
<pre><code class="language-sh"><span class="hl-0">pnpm add sern-handler</span>
|
||||
</code></pre>
|
||||
|
||||
<a href="#basic-usage" id="basic-usage" style="color: inherit; text-decoration: none">
|
||||
<h2>Basic Usage</h2>
|
||||
</a>
|
||||
|
||||
<a href="#indexjs" id="indexjs" style="color: inherit; text-decoration: none">
|
||||
<h4><code>index.js</code></h4>
|
||||
</a>
|
||||
<pre><code class="language-js"><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Client</span><span class="hl-0">, </span><span class="hl-2">Intents</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'discord.js'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Sern</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'sern-handler'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">prefix</span><span class="hl-0">, </span><span class="hl-2">token</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'../src/secrets.json'</span><span class="hl-0">;</span><br/><br/><span class="hl-4">const</span><span class="hl-0"> </span><span class="hl-5">client</span><span class="hl-0"> = </span><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-6">Client</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-2">intents:</span><span class="hl-0"> [</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILDS</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILD_MESSAGES</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">Intents</span><span class="hl-0">.</span><span class="hl-5">FLAGS</span><span class="hl-0">.</span><span class="hl-5">GUILD_MEMBERS</span><br/><span class="hl-0"> ]</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-4">new</span><span class="hl-0"> </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-6">Handler</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">prefix</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">commands :</span><span class="hl-0"> </span><span class="hl-3">'dist/commands'</span><span class="hl-0">, </span><br/><span class="hl-0"> </span><span class="hl-2">privateServers :</span><span class="hl-0"> [ </span><br/><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">test :</span><span class="hl-0"> </span><span class="hl-4">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">id:</span><span class="hl-0"> </span><span class="hl-3">'server-id'</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> ],</span><br/><span class="hl-0"> </span><span class="hl-6">init</span><span class="hl-2">:</span><span class="hl-0"> </span><span class="hl-4">async</span><span class="hl-0"> (</span><span class="hl-2">handler</span><span class="hl-0">) </span><span class="hl-4">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">// Optional function to initialize anything else on bot startup</span><br/><span class="hl-0"> },</span><br/><span class="hl-0">});</span><br/><br/><br/><span class="hl-2">client</span><span class="hl-0">.</span><span class="hl-6">login</span><span class="hl-0">(</span><span class="hl-2">token</span><span class="hl-0">);</span>
|
||||
</code></pre>
|
||||
|
||||
<a href="#pingjs" id="pingjs" style="color: inherit; text-decoration: none">
|
||||
<h4><code>ping.js</code></h4>
|
||||
</a>
|
||||
<pre><code class="language-js"><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Sern</span><span class="hl-0">, </span><span class="hl-2">Types</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'sern-handler'</span><span class="hl-0">;</span><br/><span class="hl-1">import</span><span class="hl-0"> { </span><span class="hl-2">Ok</span><span class="hl-0"> } </span><span class="hl-1">from</span><span class="hl-0"> </span><span class="hl-3">'ts-results'</span><span class="hl-0">;</span><br/><br/><span class="hl-1">export</span><span class="hl-0"> </span><span class="hl-1">default</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">alias:</span><span class="hl-0"> [],</span><br/><span class="hl-0"> </span><span class="hl-2">desc :</span><span class="hl-0"> </span><span class="hl-3">'A ping pong command'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">visibility :</span><span class="hl-0"> </span><span class="hl-3">'private'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">test :</span><span class="hl-0"> </span><span class="hl-4">false</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-2">type:</span><span class="hl-0"> </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-2">CommandType</span><span class="hl-0">.</span><span class="hl-5">SLASH</span><span class="hl-0"> | </span><span class="hl-2">Sern</span><span class="hl-0">.</span><span class="hl-2">CommandType</span><span class="hl-0">.</span><span class="hl-5">TEXT</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-6">execute</span><span class="hl-2"> :</span><span class="hl-0"> </span><span class="hl-4">async</span><span class="hl-0"> ({ </span><span class="hl-2">message</span><span class="hl-0">, </span><span class="hl-2">interaction</span><span class="hl-0"> }, </span><span class="hl-2">args</span><span class="hl-0">) </span><span class="hl-4">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-2">interaction</span><span class="hl-0">.</span><span class="hl-6">reply</span><span class="hl-0">({ </span><span class="hl-2">content:</span><span class="hl-0"> </span><span class="hl-3">'Pong! })</span><span class="hl-8">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">};</span>
|
||||
</code></pre>
|
||||
<p>See <a href="https://sernhandler.js.org">documentation</a> for TypeScript examples and more</p>
|
||||
|
||||
<a href="#links-" id="links-" style="color: inherit; text-decoration: none">
|
||||
<h2>Links <img src="https://img.shields.io/badge/Coming-Soon-purple" alt="link" /></h2>
|
||||
</a>
|
||||
<ul>
|
||||
<li><a href="https://tmp.com">Official Documentation</a></li>
|
||||
<li><a href="https://tmp.com">Example Bot</a></li>
|
||||
<li><a href="https://google.com">Discord Server</a></li>
|
||||
</ul>
|
||||
|
||||
<a href="#contribute" id="contribute" style="color: inherit; text-decoration: none">
|
||||
<h2>Contribute</h2>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
Pull up on <a href="https://github.com/jacoobes/Sern/issues">issues</a> and tell me if there are bugs
|
||||
</li>
|
||||
<li>All kinds of contributions are welcomed!</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class="current"><a href="modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky"><ul></ul></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,559 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Module | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Module.html">Module</a></li>
|
||||
</ul>
|
||||
<h1>Interface Module<T></h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-comment">
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>An object that gets imported and acts as a command.</p>
|
||||
</div>
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>property</dt>
|
||||
<dd><p>{string} desc</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{Visibility} visibility</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{CommandType} type</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd>
|
||||
<p>
|
||||
{(eventParams : Context, args : Ok<T=string>) => Awaitable<possibleOutput | void>}
|
||||
execute
|
||||
</p>
|
||||
</dd>
|
||||
<dt>prop</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-type-parameters">
|
||||
<h3>Type parameters</h3>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>T = <span class="tsd-signature-type">string</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Module</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#alias" class="tsd-kind-icon">alias</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#desc" class="tsd-kind-icon">desc</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#test" class="tsd-kind-icon">test</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#type" class="tsd-kind-icon">type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#visibility" class="tsd-kind-icon">visibility</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#parse" class="tsd-kind-icon">parse</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="alias" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
alias<a href="#alias" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
alias<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L288"
|
||||
>handler/sern.ts:288</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="desc" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
desc<a href="#desc" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
desc<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L289"
|
||||
>handler/sern.ts:289</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="test" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
test<a href="#test" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
test<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L292"
|
||||
>handler/sern.ts:292</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="type" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
type<a href="#type" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
type<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-signature-type" data-tsd-kind="Enumeration"
|
||||
>CommandType</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L291"
|
||||
>handler/sern.ts:291</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="visibility" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
visibility<a href="#visibility" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
visibility<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../modules/Types.html#Visibility" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Visibility</a
|
||||
>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L290"
|
||||
>handler/sern.ts:290</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="execute" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
execute<a href="#execute" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
execute<span class="tsd-signature-symbol">(</span>eventParams<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>, args<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Ok</span
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Awaitable</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a href="../modules/Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L293"
|
||||
>handler/sern.ts:293</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
eventParams:
|
||||
<a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
args: <span class="tsd-signature-type">Ok</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns <span class="tsd-signature-type">Awaitable</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><a
|
||||
href="../modules/Types.html#possibleOutput"
|
||||
class="tsd-signature-type"
|
||||
data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="parse" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagOptional">Optional</span> parse<a
|
||||
href="#parse"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<span class="tsd-signature-symbol">(</span>ctx<span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>, args<span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Types.html#Arg" class="tsd-signature-type" data-tsd-kind="Type alias">Arg</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="../modules/Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L294"
|
||||
>handler/sern.ts:294</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
ctx:
|
||||
<a href="../modules/Types.html#Context" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Context</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
args:
|
||||
<a href="../modules/Types.html#Arg" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>Arg</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="../modules/Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#alias" class="tsd-kind-icon">alias</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#desc" class="tsd-kind-icon">desc</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#test" class="tsd-kind-icon">test</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#type" class="tsd-kind-icon">type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#visibility" class="tsd-kind-icon">visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Module.html#parse" class="tsd-kind-icon">parse</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,409 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Wrapper | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li><a href="Sern.Wrapper.html">Wrapper</a></li>
|
||||
</ul>
|
||||
<h1>Interface Wrapper</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel tsd-comment">
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>An object to be passed into Sern.Handler constructor.</p>
|
||||
</div>
|
||||
<dl class="tsd-comment-tags">
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly Client} client</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly string} prefix</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly string} commands</p></dd>
|
||||
<dt>prop</dt>
|
||||
<dd><p>{(handler : Handler) => void)} init</p></dd>
|
||||
<dt>property</dt>
|
||||
<dd><p>{readonly {test: boolean, id: string}[]} privateServers</p></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-hierarchy">
|
||||
<h3>Hierarchy</h3>
|
||||
<ul class="tsd-hierarchy">
|
||||
<li><span class="target">Wrapper</span></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Properties</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#commands" class="tsd-kind-icon">commands</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Methods</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#init" class="tsd-kind-icon">init</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Properties</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="client" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> client<a
|
||||
href="#client"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
client<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Client</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L270"
|
||||
>handler/sern.ts:270</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="commands" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> commands<a
|
||||
href="#commands"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
commands<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L272"
|
||||
>handler/sern.ts:272</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="prefix" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> prefix<a
|
||||
href="#prefix"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
prefix<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L271"
|
||||
>handler/sern.ts:271</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-property tsd-parent-kind-interface">
|
||||
<a id="privateServers" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagReadonly">Readonly</span> private<wbr />Servers<a
|
||||
href="#privateServers"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
private<wbr />Servers<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{ </span>id<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>test<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">[]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L274"
|
||||
>handler/sern.ts:274</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Methods</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-method tsd-parent-kind-interface">
|
||||
<a id="init" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
<span class="tsd-flag ts-flagOptional">Optional</span> init<a
|
||||
href="#init"
|
||||
aria-label="Permalink"
|
||||
class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-method tsd-parent-kind-interface">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
init<span class="tsd-signature-symbol">(</span>handler<span class="tsd-signature-symbol">: </span
|
||||
><a href="../classes/Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class">Handler</a
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">void</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/sern.ts#L273"
|
||||
>handler/sern.ts:273</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>
|
||||
handler:
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-signature-type" data-tsd-kind="Class"
|
||||
>Handler</a
|
||||
>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="../modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="../modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="current tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
<ul>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#client" class="tsd-kind-icon">client</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#commands" class="tsd-kind-icon">commands</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#prefix" class="tsd-kind-icon">prefix</a>
|
||||
</li>
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#privateServers" class="tsd-kind-icon">private<wbr />Servers</a>
|
||||
</li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface">
|
||||
<a href="Sern.Wrapper.html#init" class="tsd-kind-icon">init</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Legend</h2>
|
||||
<div class="tsd-legend-group">
|
||||
<ul class="tsd-legend">
|
||||
<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
|
||||
<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,115 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>SernHandler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="assets/style.css" />
|
||||
<link rel="stylesheet" href="assets/highlight.css" />
|
||||
<script async src="assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base=".">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="index.html" class="title">SernHandler - Develop faster. Grow more.</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container"><h1>sern-handler</h1></div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Namespaces</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html" class="tsd-kind-icon">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html" class="tsd-kind-icon">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html" class="tsd-kind-icon">Utils</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class="current"><a href="modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="modules/Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky"><ul></ul></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,155 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Sern | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Sern.html">Sern</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Sern</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Enumerations</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Classes</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Interfaces</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-enum tsd-parent-kind-namespace">
|
||||
<a href="../enums/Sern.CommandType.html" class="tsd-kind-icon">Command<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-class tsd-parent-kind-namespace">
|
||||
<a href="../classes/Sern.Handler.html" class="tsd-kind-icon">Handler</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-kind-icon">Module</a>
|
||||
</li>
|
||||
<li class="tsd-kind-interface tsd-parent-kind-namespace">
|
||||
<a href="../interfaces/Sern.Wrapper.html" class="tsd-kind-icon">Wrapper</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,533 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Types | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Types.html">Types</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Types</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Type aliases</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Arg" class="tsd-kind-icon">Arg</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Context" class="tsd-kind-icon">Context</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#Nullable" class="tsd-kind-icon">Nullable</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#ParseType" class="tsd-kind-icon">Parse<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#SlashOptions" class="tsd-kind-icon">Slash<wbr />Options</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Visibility" class="tsd-kind-icon">Visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#possibleOutput" class="tsd-kind-icon">possible<wbr />Output</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Type aliases</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Arg" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Arg<a href="#Arg" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Arg<span class="tsd-signature-symbol">:</span>
|
||||
<a href="Types.html#ParseType" class="tsd-signature-type" data-tsd-kind="Type alias">ParseType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-symbol">{ </span>slash<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><a href="Types.html#SlashOptions" class="tsd-signature-type" data-tsd-kind="Type alias">SlashOptions</a
|
||||
><span class="tsd-signature-symbol">; </span>text<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L30"
|
||||
>types/handler.ts:30</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Context" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Context<a href="#Context" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Context<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{ </span>interaction<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteraction</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol">; </span>message<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">Message</span><span class="tsd-signature-symbol">></span
|
||||
><span class="tsd-signature-symbol"> }</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L25"
|
||||
>types/handler.ts:25</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-type-declaration">
|
||||
<h4>Type declaration</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
interaction<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">Option</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteraction</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
message<span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">Option</span
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">Message</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="Nullable" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Nullable<a href="#Nullable" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Nullable<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">null</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L17"
|
||||
>types/handler.ts:17</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="ParseType" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Parse<wbr />Type<a href="#ParseType" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Parse<wbr />Type<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[ </span
|
||||
><span class="tsd-signature-type">K</span><span class="tsd-signature-symbol"> in </span
|
||||
><span class="tsd-signature-symbol">keyof </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">K</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol"> extends </span
|
||||
><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol"> ? </span
|
||||
><span class="tsd-signature-symbol">[</span>k<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">K</span><span class="tsd-signature-symbol">, </span>args<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">[</span><span class="tsd-signature-type">K</span
|
||||
><span class="tsd-signature-symbol">]</span><span class="tsd-signature-symbol">]</span
|
||||
><span class="tsd-signature-symbol"> : </span><span class="tsd-signature-type">never</span>
|
||||
<span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">[</span
|
||||
><span class="tsd-signature-symbol">keyof </span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L20"
|
||||
>types/handler.ts:20</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="SlashOptions" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Slash<wbr />Options<a href="#SlashOptions" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Slash<wbr />Options<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">Omit</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type">CommandInteractionOptionResolver</span
|
||||
><span class="tsd-signature-symbol">, </span
|
||||
><span class="tsd-signature-type">"getMessage"</span
|
||||
><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">"getFocused"</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L33"
|
||||
>types/handler.ts:33</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="Visibility" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Visibility<a href="#Visibility" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Visibility<span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">"private"</span><span class="tsd-signature-symbol"> | </span
|
||||
><span class="tsd-signature-type">"public"</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L13"
|
||||
>types/handler.ts:13</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a id="execute" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
execute<a href="#execute" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
execute<span class="tsd-signature-symbol">:</span>
|
||||
<a href="../interfaces/Sern.Module.html" class="tsd-signature-type" data-tsd-kind="Interface">Module</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">unknown</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">[</span
|
||||
><a href="../interfaces/Sern.Module.html#execute"
|
||||
><span class="tsd-signature-type">"execute"</span></a
|
||||
><span class="tsd-signature-symbol">]</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L18"
|
||||
>types/handler.ts:18</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="possibleOutput" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
possible<wbr />Output<a href="#possibleOutput" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
possible<wbr />Output<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">(</span
|
||||
><span class="tsd-signature-type">MessagePayload</span><span class="tsd-signature-symbol"> & </span
|
||||
><span class="tsd-signature-type">MessageOptions</span><span class="tsd-signature-symbol">)</span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a href="https://github.com/sern-handler/Sern/blob/29d92ca/src/types/handler.ts#L16"
|
||||
>types/handler.ts:16</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li>
|
||||
<h4>T = <span class="tsd-signature-type">string</span></h4>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Arg" class="tsd-kind-icon">Arg</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Context" class="tsd-kind-icon">Context</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#Nullable" class="tsd-kind-icon">Nullable</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#ParseType" class="tsd-kind-icon">Parse<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#SlashOptions" class="tsd-kind-icon">Slash<wbr />Options</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#Visibility" class="tsd-kind-icon">Visibility</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace">
|
||||
<a href="Types.html#execute" class="tsd-kind-icon">execute</a>
|
||||
</li>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Types.html#possibleOutput" class="tsd-kind-icon">possible<wbr />Output</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,659 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="default">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge" />
|
||||
<title>Utils | sern-handler</title>
|
||||
<meta name="description" content="Documentation for sern-handler" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="../assets/style.css" />
|
||||
<link rel="stylesheet" href="../assets/highlight.css" />
|
||||
<script async src="../assets/search.js" id="search-script"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
document.body.classList.add(localStorage.getItem('tsd-theme') || 'os');
|
||||
</script>
|
||||
<header>
|
||||
<div class="tsd-page-toolbar">
|
||||
<div class="container">
|
||||
<div class="table-wrap">
|
||||
<div class="table-cell" id="tsd-search" data-base="..">
|
||||
<div class="field">
|
||||
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label
|
||||
><input type="text" id="tsd-search-field" />
|
||||
</div>
|
||||
<ul class="results">
|
||||
<li class="state loading">Preparing search index...</li>
|
||||
<li class="state failure">The search index is not available</li>
|
||||
</ul>
|
||||
<a href="../index.html" class="title">sern-handler</a>
|
||||
</div>
|
||||
<div class="table-cell" id="tsd-widgets">
|
||||
<div id="tsd-filter">
|
||||
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
|
||||
<div class="tsd-filter-group">
|
||||
<div class="tsd-select" id="tsd-filter-visibility">
|
||||
<span class="tsd-select-label">All</span>
|
||||
<ul class="tsd-select-list">
|
||||
<li data-value="public">Public</li>
|
||||
<li data-value="protected">Public/Protected</li>
|
||||
<li data-value="private" class="selected">All</li>
|
||||
</ul>
|
||||
</div>
|
||||
<input type="checkbox" id="tsd-filter-inherited" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-inherited"
|
||||
>Inherited</label
|
||||
><input type="checkbox" id="tsd-filter-externals" checked /><label
|
||||
class="tsd-widget"
|
||||
for="tsd-filter-externals"
|
||||
>Externals</label
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tsd-page-title">
|
||||
<div class="container">
|
||||
<ul class="tsd-breadcrumb">
|
||||
<li><a href="../modules.html">sern-handler</a></li>
|
||||
<li><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
<h1>Namespace Utils</h1>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<div class="container container-main">
|
||||
<div class="row">
|
||||
<div class="col-8 col-content">
|
||||
<section class="tsd-panel-group tsd-index-group">
|
||||
<h2>Index</h2>
|
||||
<section class="tsd-panel tsd-index-panel">
|
||||
<div class="tsd-index-content">
|
||||
<section class="tsd-index-section">
|
||||
<h3>Type aliases</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Utils.html#ArgType" class="tsd-kind-icon">Arg<wbr />Type</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-index-section">
|
||||
<h3>Functions</h3>
|
||||
<ul class="tsd-index-list">
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseBool" class="tsd-kind-icon">parse<wbr />Bool</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseInt" class="tsd-kind-icon">parse<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toArr" class="tsd-kind-icon">to<wbr />Arr</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toNegativeInt" class="tsd-kind-icon">to<wbr />Negative<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toPositiveInt" class="tsd-kind-icon">to<wbr />Positive<wbr />Int</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Type aliases</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a id="ArgType" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
Arg<wbr />Type<a href="#ArgType" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<div class="tsd-signature tsd-kind-icon">
|
||||
Arg<wbr />Type<span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">:</span>
|
||||
<span class="tsd-signature-type">Result</span><span class="tsd-signature-symbol"><</span
|
||||
><span class="tsd-signature-type" data-tsd-kind="Type parameter">T</span
|
||||
><span class="tsd-signature-symbol">, </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</div>
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L8"
|
||||
>handler/utilities/preprocessors/args.ts:8</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>
|
||||
Wrapper type taking <code>Ok(T)</code> or <code>Err(possibleOutput)</code> e.g
|
||||
<code>Result<T, possibleOutput</code>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<h4 class="tsd-type-parameters-title">Type parameters</h4>
|
||||
<ul class="tsd-type-parameters">
|
||||
<li><h4>T</h4></li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section class="tsd-panel-group tsd-member-group">
|
||||
<h2>Functions</h2>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="parseBool" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
parse<wbr />Bool<a href="#parseBool" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<wbr />Bool<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">?: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>, regexes<span class="tsd-signature-symbol">?: </span
|
||||
><span class="tsd-signature-symbol">{ </span>noRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span
|
||||
><span class="tsd-signature-symbol">; </span>yesRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L31"
|
||||
>handler/utilities/preprocessors/args.ts:31</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol"> = ...</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>If cannot parse <code>arg</code> into boolean.</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
regexes: <span class="tsd-signature-symbol">{ </span>noRegex<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">RegExp</span
|
||||
><span class="tsd-signature-symbol">; </span>yesRegex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span><span class="tsd-signature-symbol"> }</span
|
||||
><span class="tsd-signature-symbol"> = ...</span>
|
||||
</h5>
|
||||
<ul class="tsd-parameters">
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
no<wbr />Regex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span>
|
||||
</h5>
|
||||
</li>
|
||||
<li class="tsd-parameter">
|
||||
<h5>
|
||||
yes<wbr />Regex<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">RegExp</span>
|
||||
</h5>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">boolean</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div>
|
||||
<p>attemps to parse <code>args</code> as a boolean</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="parseInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
parse<wbr />Int<a href="#parseInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
parse<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L17"
|
||||
>handler/utilities/preprocessors/args.ts:17</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>if <code>Number.parseInt</code> returns NaN</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div>
|
||||
<p>Attempts to use <code>Number.parseInt()</code> on <code>arg</code></p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toArr" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Arr<a href="#toArr" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Arr<span class="tsd-signature-symbol">(</span>arg<span class="tsd-signature-symbol">: </span
|
||||
><span class="tsd-signature-type">string</span>, sep<span class="tsd-signature-symbol">?: </span
|
||||
><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L55"
|
||||
>handler/utilities/preprocessors/args.ts:55</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
sep: <span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol"> = ' '</span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>default separator = ' '</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toNegativeInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Negative<wbr />Int<a href="#toNegativeInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Negative<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L76"
|
||||
>handler/utilities/preprocessors/args.ts:76</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>delegates <code>parseInt</code></p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="tsd-panel tsd-member tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a id="toPositiveInt" class="tsd-anchor"></a>
|
||||
<h3 class="tsd-anchor-link">
|
||||
to<wbr />Positive<wbr />Int<a href="#toPositiveInt" aria-label="Permalink" class="tsd-anchor-icon"
|
||||
><svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="icon icon-tabler icon-tabler-link"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
|
||||
<path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path>
|
||||
<path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></svg
|
||||
></a>
|
||||
</h3>
|
||||
<ul class="tsd-signatures tsd-kind-function tsd-parent-kind-namespace">
|
||||
<li class="tsd-signature tsd-kind-icon">
|
||||
to<wbr />Positive<wbr />Int<span class="tsd-signature-symbol">(</span>arg<span
|
||||
class="tsd-signature-symbol"
|
||||
>: </span
|
||||
><span class="tsd-signature-type">string</span>, onFailure<span class="tsd-signature-symbol">: </span
|
||||
><a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span><span class="tsd-signature-symbol">)</span
|
||||
><span class="tsd-signature-symbol">: </span
|
||||
><a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tsd-descriptions">
|
||||
<li class="tsd-description">
|
||||
<aside class="tsd-sources">
|
||||
<ul>
|
||||
<li>
|
||||
Defined in
|
||||
<a
|
||||
href="https://github.com/sern-handler/Sern/blob/29d92ca/src/handler/utilities/preprocessors/args.ts#L66"
|
||||
>handler/utilities/preprocessors/args.ts:66</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</aside>
|
||||
<h4 class="tsd-parameters-title">Parameters</h4>
|
||||
<ul class="tsd-parameters">
|
||||
<li>
|
||||
<h5>arg: <span class="tsd-signature-type">string</span></h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>command arguments</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<h5>
|
||||
onFailure:
|
||||
<a href="Types.html#possibleOutput" class="tsd-signature-type" data-tsd-kind="Type alias"
|
||||
>possibleOutput</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">string</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h5>
|
||||
<div class="tsd-comment tsd-typography">
|
||||
<div class="lead">
|
||||
<p>delegates <code>Utils.parseInt</code></p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="tsd-returns-title">
|
||||
Returns
|
||||
<a href="Utils.html#ArgType" class="tsd-signature-type" data-tsd-kind="Type alias">ArgType</a
|
||||
><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">number</span
|
||||
><span class="tsd-signature-symbol">></span>
|
||||
</h4>
|
||||
<div></div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
</div>
|
||||
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
|
||||
<nav class="tsd-navigation primary">
|
||||
<ul>
|
||||
<li class=""><a href="../modules.html">Exports</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Sern.html">Sern</a></li>
|
||||
<li class="tsd-kind-namespace"><a href="Types.html">Types</a></li>
|
||||
<li class="current tsd-kind-namespace"><a href="Utils.html">Utils</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
<nav class="tsd-navigation secondary menu-sticky">
|
||||
<ul>
|
||||
<li class="tsd-kind-type-alias tsd-parent-kind-namespace tsd-has-type-parameter">
|
||||
<a href="Utils.html#ArgType" class="tsd-kind-icon">Arg<wbr />Type</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseBool" class="tsd-kind-icon">parse<wbr />Bool</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#parseInt" class="tsd-kind-icon">parse<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toArr" class="tsd-kind-icon">to<wbr />Arr</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toNegativeInt" class="tsd-kind-icon">to<wbr />Negative<wbr />Int</a>
|
||||
</li>
|
||||
<li class="tsd-kind-function tsd-parent-kind-namespace">
|
||||
<a href="Utils.html#toPositiveInt" class="tsd-kind-icon">to<wbr />Positive<wbr />Int</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="with-border-bottom">
|
||||
<div class="container">
|
||||
<h2>Settings</h2>
|
||||
<p>
|
||||
Theme
|
||||
<select id="theme">
|
||||
<option value="os">OS</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<div class="container tsd-generator">
|
||||
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
|
||||
</div>
|
||||
<div class="overlay"></div>
|
||||
<script src="../assets/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
194
jest.config.ts
194
jest.config.ts
@@ -1,194 +0,0 @@
|
||||
/*
|
||||
* For a detailed explanation regarding each configuration property and type check, visit:
|
||||
* https://jestjs.io/docs/configuration
|
||||
*/
|
||||
|
||||
export default {
|
||||
// All imported modules in your tests should be mocked automatically
|
||||
// automock: false,
|
||||
|
||||
// Stop running tests after `n` failures
|
||||
// bail: 0,
|
||||
|
||||
// The directory where Jest should store its cached dependency information
|
||||
// cacheDirectory: "C:\\Users\\jeyus\\AppData\\Local\\Temp\\jest",
|
||||
|
||||
// Automatically clear mock calls, instances and results before every test
|
||||
clearMocks: true,
|
||||
|
||||
// Indicates whether the coverage information should be collected while executing the test
|
||||
collectCoverage: true,
|
||||
|
||||
// An array of glob patterns indicating a set of files for which coverage information should be collected
|
||||
// collectCoverageFrom: undefined,
|
||||
|
||||
// The directory where Jest should output its coverage files
|
||||
coverageDirectory: 'coverage',
|
||||
|
||||
// An array of regexp pattern strings used to skip coverage collection
|
||||
// coveragePathIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\"
|
||||
// ],
|
||||
|
||||
// Indicates which provider should be used to instrument code for coverage
|
||||
coverageProvider: 'v8',
|
||||
|
||||
// A list of reporter names that Jest uses when writing coverage reports
|
||||
// coverageReporters: [
|
||||
// "json",
|
||||
// "text",
|
||||
// "lcov",
|
||||
// "clover"
|
||||
// ],
|
||||
|
||||
// An object that configures minimum threshold enforcement for coverage results
|
||||
// coverageThreshold: undefined,
|
||||
|
||||
// A path to a custom dependency extractor
|
||||
// dependencyExtractor: undefined,
|
||||
|
||||
// Make calling deprecated APIs throw helpful error messages
|
||||
// errorOnDeprecated: false,
|
||||
|
||||
// Force coverage collection from ignored files using an array of glob patterns
|
||||
// forceCoverageMatch: [],
|
||||
|
||||
// A path to a module which exports an async function that is triggered once before all test suites
|
||||
// globalSetup: undefined,
|
||||
|
||||
// A path to a module which exports an async function that is triggered once after all test suites
|
||||
// globalTeardown: undefined,
|
||||
|
||||
// A set of global variables that need to be available in all test environments
|
||||
// globals: {},
|
||||
|
||||
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
|
||||
// maxWorkers: "50%",
|
||||
|
||||
// An array of directory names to be searched recursively up from the requiring module's location
|
||||
// moduleDirectories: [
|
||||
// "node_modules"
|
||||
// ],
|
||||
|
||||
// An array of file extensions your modules use
|
||||
// moduleFileExtensions: [
|
||||
// "js",
|
||||
// "jsx",
|
||||
// "ts",
|
||||
// "tsx",
|
||||
// "json",
|
||||
// "node"
|
||||
// ],
|
||||
|
||||
// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
|
||||
// moduleNameMapper: {},
|
||||
|
||||
// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
|
||||
// modulePathIgnorePatterns: [],
|
||||
|
||||
// Activates notifications for test results
|
||||
// notify: false,
|
||||
|
||||
// An enum that specifies notification mode. Requires { notify: true }
|
||||
// notifyMode: "failure-change",
|
||||
|
||||
// A preset that is used as a base for Jest's configuration
|
||||
// preset: undefined,
|
||||
|
||||
// Run tests from one or more projects
|
||||
// projects: undefined,
|
||||
|
||||
// Use this configuration option to add custom reporters to Jest
|
||||
// reporters: undefined,
|
||||
|
||||
// Automatically reset mock state before every test
|
||||
// resetMocks: false,
|
||||
|
||||
// Reset the module registry before running each individual test
|
||||
// resetModules: false,
|
||||
|
||||
// A path to a custom resolver
|
||||
// resolver: undefined,
|
||||
|
||||
// Automatically restore mock state and implementation before every test
|
||||
// restoreMocks: false,
|
||||
|
||||
// The root directory that Jest should scan for tests and modules within
|
||||
// rootDir: undefined,
|
||||
|
||||
// A list of paths to directories that Jest should use to search for files in
|
||||
// roots: [
|
||||
// "<rootDir>"
|
||||
// ],
|
||||
|
||||
// Allows you to use a custom runner instead of Jest's default test runner
|
||||
// runner: "jest-runner",
|
||||
|
||||
// The paths to modules that run some code to configure or set up the testing environment before each test
|
||||
// setupFiles: [],
|
||||
|
||||
// A list of paths to modules that run some code to configure or set up the testing framework before each test
|
||||
// setupFilesAfterEnv: [],
|
||||
|
||||
// The number of seconds after which a test is considered as slow and reported as such in the results.
|
||||
// slowTestThreshold: 5,
|
||||
|
||||
// A list of paths to snapshot serializer modules Jest should use for snapshot testing
|
||||
// snapshotSerializers: [],
|
||||
|
||||
// The test environment that will be used for testing
|
||||
// testEnvironment: "jest-environment-node",
|
||||
|
||||
// Options that will be passed to the testEnvironment
|
||||
// testEnvironmentOptions: {},
|
||||
|
||||
// Adds a location field to test results
|
||||
// testLocationInResults: false,
|
||||
|
||||
// The glob patterns Jest uses to detect test files
|
||||
// testMatch: [
|
||||
// "**/__tests__/**/*.[jt]s?(x)",
|
||||
// "**/?(*.)+(spec|test).[tj]s?(x)"
|
||||
// ],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
|
||||
// testPathIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\"
|
||||
// ],
|
||||
|
||||
// The regexp pattern or array of patterns that Jest uses to detect test files
|
||||
// testRegex: [],
|
||||
|
||||
// This option allows the use of a custom results processor
|
||||
// testResultsProcessor: undefined,
|
||||
|
||||
// This option allows use of a custom test runner
|
||||
// testRunner: "jest-circus/runner",
|
||||
|
||||
// This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
|
||||
// testURL: "http://localhost",
|
||||
|
||||
// Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
|
||||
// timers: "real",
|
||||
|
||||
// A map from regular expressions to paths to transformers
|
||||
// transform: undefined,
|
||||
|
||||
// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
|
||||
// transformIgnorePatterns: [
|
||||
// "\\\\node_modules\\\\",
|
||||
// "\\.pnp\\.[^\\\\]+$"
|
||||
// ],
|
||||
|
||||
// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
|
||||
// unmockedModulePathPatterns: undefined,
|
||||
|
||||
// Indicates whether each individual test should be reported during the run
|
||||
// verbose: undefined,
|
||||
|
||||
// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
|
||||
// watchPathIgnorePatterns: [],
|
||||
|
||||
// Whether to use watchman for file crawling
|
||||
// watchman: true,
|
||||
};
|
||||
18311
package-lock.json
generated
18311
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
106
package.json
106
package.json
@@ -1,53 +1,57 @@
|
||||
{
|
||||
"name": "@sern/handler",
|
||||
"version": "1.0.1-beta",
|
||||
"description": "A customizable, batteries-included, powerful discord.js framework to automate and streamline bot development.",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"compile": "tsc",
|
||||
"watch": "tsc -w",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"format": "eslint src/**/*.ts --fix",
|
||||
"release": "standard-version && git push --follow-tags",
|
||||
"test": "jest --coverage --verbose",
|
||||
"commit": "cz"
|
||||
},
|
||||
"keywords": [
|
||||
"sern-handler",
|
||||
"sern",
|
||||
"handler",
|
||||
"sern handler",
|
||||
"wrapper",
|
||||
"discord.js",
|
||||
"framework"
|
||||
],
|
||||
"author": "SernDevs",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"discord.js": "^14.0.0-dev.1647259751.2297c2b",
|
||||
"rxjs": "^7.5.5",
|
||||
"ts-pattern": "^4.0.2",
|
||||
"ts-results": "^3.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.8.0",
|
||||
"@typescript-eslint/parser": "^5.10.2",
|
||||
"@typescript-eslint/eslint-plugin": "^5.10.2",
|
||||
"@babel/core": "^7.17.2",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@babel/preset-typescript": "^7.16.7",
|
||||
"@types/jest": "^27.4.0",
|
||||
"babel-jest": "^27.5.1",
|
||||
"cz-conventional-changelog": "3.0.1",
|
||||
"jest": "^27.5.1",
|
||||
"prettier": "2.6.2",
|
||||
"standard-version": "^9.3.2",
|
||||
"typedoc": "^0.22.11",
|
||||
"typescript": "^4.5.5"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "cz-conventional-changelog"
|
||||
}
|
||||
}
|
||||
"name": "@sern/handler",
|
||||
"packageManager": "pnpm@7.18.2",
|
||||
"version": "2.0.0",
|
||||
"description": "A customizable, batteries-included, powerful discord.js framework to automate and streamline bot development.",
|
||||
"main": "dist/cjs/index.cjs",
|
||||
"module": "dist/esm/index.mjs",
|
||||
"types": "dist/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist/esm/index.mjs",
|
||||
"require": "./dist/cjs/index.cjs"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"watch": "tsup --watch --dts",
|
||||
"clean-modules": "rimraf node_modules/ && npm install",
|
||||
"lint": "eslint src/**/*.ts",
|
||||
"format": "eslint src/**/*.ts --fix",
|
||||
"build": "tsup && node scripts/mkjson.mjs dist/cjs dist/esm && tsup --dts-only --outDir dist",
|
||||
"publish": "npm run build && npm publish",
|
||||
"pretty": "prettier --write ."
|
||||
},
|
||||
"keywords": [
|
||||
"sern-handler",
|
||||
"sern",
|
||||
"handler",
|
||||
"sern handler",
|
||||
"wrapper",
|
||||
"discord.js",
|
||||
"framework"
|
||||
],
|
||||
"author": "SernDevs",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"iti": "^0.5.0",
|
||||
"rxjs": "^7.5.6",
|
||||
"ts-pattern": "^4.0.2",
|
||||
"ts-results-es": "^3.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@typescript-eslint/eslint-plugin": "5.44.0",
|
||||
"@typescript-eslint/parser": "5.44.0",
|
||||
"eslint": "8.25.0",
|
||||
"prettier": "2.7.1",
|
||||
"tsup": "^6.1.3",
|
||||
"typescript": "4.9.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"discord.js": ">= ^14.7.x"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/sern-handler/handler.git"
|
||||
},
|
||||
"homepage": "https://sern.dev"
|
||||
}
|
||||
|
||||
1738
pnpm-lock.yaml
generated
Normal file
1738
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
14
renovate.json
Normal file
14
renovate.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"major": {
|
||||
"dependencyDashboardApproval": true,
|
||||
"reviewers": ["EvolutionX-10", "jacoobes", "Murtatrxx"]
|
||||
},
|
||||
"minor": {
|
||||
"reviewers": ["jacoobes", "Murtatrxx"]
|
||||
},
|
||||
"schedule": ["every weekend"],
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true,
|
||||
"automerge": false
|
||||
}
|
||||
}
|
||||
13
scripts/mkjson.mjs
Normal file
13
scripts/mkjson.mjs
Normal file
@@ -0,0 +1,13 @@
|
||||
import { writeFile } from 'fs/promises';
|
||||
import { join } from 'path';
|
||||
// A quick script to regenerate package.jsons for each cjs and esm after tsup cleans distributions
|
||||
const locations = process.argv;
|
||||
locations.shift();
|
||||
locations.shift();
|
||||
for (const loc of locations) {
|
||||
if (loc.endsWith('cjs')) {
|
||||
await writeFile(join(loc, 'package.json'), JSON.stringify({ type: 'commonjs' }));
|
||||
} else {
|
||||
await writeFile(join(loc, 'package.json'), JSON.stringify({ type: 'module' }));
|
||||
}
|
||||
}
|
||||
49
src/handler/contracts/errorHandling.ts
Normal file
49
src/handler/contracts/errorHandling.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import type { Observable } from 'rxjs';
|
||||
import type { Logging } from './logging';
|
||||
import { useContainerRaw } from '../dependencies/provider';
|
||||
import util from 'util';
|
||||
export interface ErrorHandling {
|
||||
/**
|
||||
* Number of times the process should throw an error until crashing and exiting
|
||||
*/
|
||||
keepAlive : number
|
||||
|
||||
/**
|
||||
* Utility function to crash
|
||||
* @param error
|
||||
*/
|
||||
crash(error : Error) : never
|
||||
|
||||
/**
|
||||
* A function that is called on every crash. Updates keepAlive
|
||||
* @param error
|
||||
*/
|
||||
updateAlive(error: Error): void
|
||||
}
|
||||
|
||||
export class DefaultErrorHandling implements ErrorHandling {
|
||||
keepAlive = 5;
|
||||
crash(error: Error): never {
|
||||
throw error;
|
||||
}
|
||||
updateAlive(e: Error) {
|
||||
this.keepAlive--;
|
||||
}
|
||||
}
|
||||
|
||||
export function handleError<C>(crashHandler: ErrorHandling, logging?: Logging) {
|
||||
return (pload: unknown, caught: Observable<C>) => {
|
||||
// This is done to fit the ErrorHandling contract
|
||||
const err = pload instanceof Error ? pload : Error(util.format(pload));
|
||||
if(crashHandler.keepAlive == 0) {
|
||||
useContainerRaw()?.disposeAll().then(() => {
|
||||
logging?.info({ message: 'Cleaning container and crashing' });
|
||||
});
|
||||
crashHandler.crash(err);
|
||||
}
|
||||
//formatted payload
|
||||
logging?.error({ message: util.format(pload) });
|
||||
crashHandler.updateAlive(err);
|
||||
return caught;
|
||||
};
|
||||
}
|
||||
3
src/handler/contracts/index.ts
Normal file
3
src/handler/contracts/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export { ErrorHandling, DefaultErrorHandling } from './errorHandling';
|
||||
export { Logging, DefaultLogging } from './logging';
|
||||
export { ModuleManager, DefaultModuleManager } from './moduleManager';
|
||||
28
src/handler/contracts/logging.ts
Normal file
28
src/handler/contracts/logging.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import type { LogPayload } from '../../types/handler';
|
||||
|
||||
export interface Logging<T = unknown> {
|
||||
error(payload : LogPayload<T>) : void;
|
||||
warning(payload : LogPayload<T>) : void;
|
||||
info(payload : LogPayload<T>) : void
|
||||
debug(payload : LogPayload<T>) : void
|
||||
}
|
||||
|
||||
export class DefaultLogging implements Logging {
|
||||
private date = () => new Date();
|
||||
debug(payload: LogPayload): void {
|
||||
console.debug(`DEBUG: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
error(payload: LogPayload): void {
|
||||
console.error(`ERROR: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
info(payload: LogPayload): void {
|
||||
console.info(`INFO: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
warning(payload: LogPayload): void {
|
||||
console.warn(`WARN: ${this.date().toISOString()} -> ${payload.message}`);
|
||||
}
|
||||
|
||||
}
|
||||
20
src/handler/contracts/moduleManager.ts
Normal file
20
src/handler/contracts/moduleManager.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import type { CommandModuleDefs } from '../../types/module';
|
||||
import type { CommandType } from '../structures/enums';
|
||||
import type { ModuleStore } from '../structures/moduleStore';
|
||||
|
||||
|
||||
export interface ModuleManager {
|
||||
get<T extends CommandType>(strat : (ms: ModuleStore) => CommandModuleDefs[T] | undefined) : CommandModuleDefs[T] | undefined
|
||||
set(strat: (ms: ModuleStore) => void) : void
|
||||
}
|
||||
|
||||
export class DefaultModuleManager implements ModuleManager {
|
||||
constructor(private moduleStore: ModuleStore) {}
|
||||
get<T extends CommandType>(strat: (ms: ModuleStore) => CommandModuleDefs[T] | undefined) {
|
||||
return strat(this.moduleStore);
|
||||
}
|
||||
|
||||
set(strat: (ms: ModuleStore) => void): void {
|
||||
strat(this.moduleStore);
|
||||
}
|
||||
}
|
||||
3
src/handler/dependencies/index.ts
Normal file
3
src/handler/dependencies/index.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export {
|
||||
useContainer
|
||||
} from './provider';
|
||||
83
src/handler/dependencies/provider.ts
Normal file
83
src/handler/dependencies/provider.ts
Normal file
@@ -0,0 +1,83 @@
|
||||
import type { Container } from 'iti';
|
||||
import { SernError } from '../structures/errors';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import * as assert from 'assert';
|
||||
import type { Dependencies, MapDeps } from '../../types/handler';
|
||||
import SernEmitter from '../sernEmitter';
|
||||
import { _const, ok } from '../utilities/functions';
|
||||
import { DefaultErrorHandling, DefaultModuleManager, Logging } from '../contracts';
|
||||
import { ModuleStore } from '../structures/moduleStore';
|
||||
import { Ok, Result } from 'ts-results-es';
|
||||
import { DefaultLogging } from '../contracts';
|
||||
|
||||
export const containerSubject = new BehaviorSubject<Container<Dependencies, Partial<Dependencies>> | null>(null);
|
||||
export function composeRoot<T extends Dependencies>(root: Container<Partial<T>, Partial<Dependencies>>, exclusion: Set<keyof Dependencies>) {
|
||||
const client = root.get('@sern/client');
|
||||
assert.ok(client !== undefined, SernError.MissingRequired);
|
||||
//A utility function checking if a dependency has been declared excluded
|
||||
const excluded = (key: keyof Dependencies) => exclusion.has(key);
|
||||
//Wraps a fetch to the container in a Result, deferring the action
|
||||
const get = <T>(key : keyof Dependencies) => Result.wrap(() => root.get(key) as T);
|
||||
const getOr = (key: keyof Dependencies, elseAction: () => unknown) => {
|
||||
//Gets dependency but if an Err, map to a function that upserts.
|
||||
const dep = get(key).mapErr(() => elseAction);
|
||||
if(dep.err) {
|
||||
//Defers upsert until final check here
|
||||
return dep.val();
|
||||
}
|
||||
};
|
||||
const xGetOr = (key: keyof Dependencies, action: () => unknown) => {
|
||||
if(excluded(key)) {
|
||||
get(key) //if dev created a dependency but excluded, deletes on root composition
|
||||
.andThen(() => Ok(root.delete(key)))
|
||||
.unwrapOr(ok());
|
||||
} else {
|
||||
getOr(key, action);
|
||||
}
|
||||
|
||||
};
|
||||
xGetOr('@sern/emitter', () => root.upsert({
|
||||
'@sern/emitter' : _const(new SernEmitter())
|
||||
})
|
||||
);
|
||||
//An "optional" dependency
|
||||
xGetOr('@sern/logger', () => {
|
||||
root.upsert({
|
||||
'@sern/logger' : _const(new DefaultLogging())
|
||||
});
|
||||
}
|
||||
);
|
||||
xGetOr('@sern/store', () => root.upsert({
|
||||
'@sern/store' : _const(new ModuleStore())
|
||||
})
|
||||
);
|
||||
xGetOr('@sern/modules', () => root.upsert((ctx) => ({
|
||||
'@sern/modules' : _const(new DefaultModuleManager(ctx['@sern/store'] as ModuleStore))
|
||||
}))
|
||||
);
|
||||
xGetOr('@sern/errors', () => root.upsert({
|
||||
'@sern/errors': _const(new DefaultErrorHandling())
|
||||
})
|
||||
);
|
||||
//If logger exists, log info, else do nothing.
|
||||
get<Logging>('@sern/logger')
|
||||
.map((logger => logger.info({ message: 'All dependencies loaded successfully' })))
|
||||
.unwrapOr(ok());
|
||||
}
|
||||
|
||||
|
||||
export function useContainer<T extends Dependencies>() {
|
||||
const container = containerSubject.getValue()! as unknown as Container<T, {}>;
|
||||
assert.ok(container !== null, 'useContainer was called before Sern#init');
|
||||
//weird edge case, why can i not use _const here?
|
||||
return <V extends (keyof T)[]>(...keys: [...V]) =>
|
||||
keys.map(key => Result.wrap(() => container.get(key)).unwrapOr(undefined)) as MapDeps<T, V>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the underlying data structure holding all dependencies.
|
||||
* Exposes some methods from iti
|
||||
*/
|
||||
export function useContainerRaw() {
|
||||
return containerSubject.getValue();
|
||||
}
|
||||
170
src/handler/events/dispatchers.ts
Normal file
170
src/handler/events/dispatchers.ts
Normal file
@@ -0,0 +1,170 @@
|
||||
import Context from '../structures/context';
|
||||
import type { Payload, SlashOptions } from '../../types/handler';
|
||||
import { arrAsync } from '../utilities/arrAsync';
|
||||
import { controller } from '../sern';
|
||||
import type {
|
||||
ButtonInteraction,
|
||||
ModalSubmitInteraction,
|
||||
AutocompleteInteraction,
|
||||
ChatInputCommandInteraction,
|
||||
Interaction,
|
||||
UserContextMenuCommandInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import { SernError } from '../structures/errors';
|
||||
import treeSearch from '../utilities/treeSearch';
|
||||
import type {
|
||||
BothCommand,
|
||||
ButtonCommand, ContextMenuMsg,
|
||||
ContextMenuUser,
|
||||
ModalSubmitCommand,
|
||||
StringSelectCommand,
|
||||
SlashCommand, UserSelectCommand, ChannelSelectCommand, MentionableSelectCommand, RoleSelectCommand,
|
||||
} from '../../types/module';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
import { EventEmitter } from 'events';
|
||||
import type { DiscordEventCommand, ExternalEventCommand, SernEventCommand } from '../structures/events';
|
||||
import * as assert from 'assert';
|
||||
import { reducePlugins } from '../utilities/functions';
|
||||
import { concatMap, from, fromEvent, map, of } from 'rxjs';
|
||||
import type { MessageComponentInteraction } from 'discord.js';
|
||||
|
||||
export function applicationCommandDispatcher(interaction: Interaction) {
|
||||
if (interaction.isAutocomplete()) {
|
||||
return dispatchAutocomplete(interaction);
|
||||
} else {
|
||||
const ctx = Context.wrap(interaction as ChatInputCommandInteraction);
|
||||
const args: ['slash', SlashOptions] = ['slash', ctx.interaction.options];
|
||||
return (mod: BothCommand | SlashCommand) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(ctx, args),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([ctx, args], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function dispatchAutocomplete(interaction: AutocompleteInteraction) {
|
||||
return (mod: BothCommand | SlashCommand) => {
|
||||
const selectedOption = treeSearch(interaction, mod.options);
|
||||
if (selectedOption !== undefined) {
|
||||
return {
|
||||
mod,
|
||||
execute: () => selectedOption.command.execute(interaction),
|
||||
eventPluginRes: arrAsync(
|
||||
selectedOption.command.onEvent.map(e => e.execute(interaction, controller)),
|
||||
),
|
||||
};
|
||||
}
|
||||
throw Error(
|
||||
SernError.NotSupportedInteraction + ` There is no autocomplete tag for this option`,
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
export function modalCommandDispatcher(interaction: ModalSubmitInteraction) {
|
||||
return (mod: ModalSubmitCommand) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(interaction),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([interaction], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export function buttonCommandDispatcher(interaction: ButtonInteraction) {
|
||||
return (mod: ButtonCommand) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(interaction),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([interaction], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export function selectMenuCommandDispatcher(interaction: MessageComponentInteraction) {
|
||||
//safe casts because command type runtime check
|
||||
return (mod: StringSelectCommand | UserSelectCommand | ChannelSelectCommand | MentionableSelectCommand | RoleSelectCommand) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(interaction as never),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([interaction as never], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export function ctxMenuUserDispatcher(interaction: UserContextMenuCommandInteraction) {
|
||||
return (mod: ContextMenuUser) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(interaction),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([interaction], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export function ctxMenuMsgDispatcher(interaction: MessageContextMenuCommandInteraction) {
|
||||
return (mod: ContextMenuMsg) => ({
|
||||
mod,
|
||||
execute: () => mod.execute(interaction),
|
||||
eventPluginRes: arrAsync(
|
||||
mod.onEvent.map(plugs => plugs.execute([interaction], controller)),
|
||||
),
|
||||
});
|
||||
}
|
||||
|
||||
export function sernEmitterDispatcher(e: SernEmitter) {
|
||||
return(cmd: SernEventCommand & { name: string }) => ({
|
||||
source: e,
|
||||
cmd,
|
||||
execute: fromEvent(e, cmd.name)
|
||||
.pipe( map( event => ({
|
||||
event,
|
||||
executeEvent: of(event).pipe(concatMap(event =>
|
||||
reducePlugins(from(
|
||||
arrAsync(
|
||||
cmd.onEvent.map(plug => plug.execute([event as Payload], controller))
|
||||
))
|
||||
)))
|
||||
})))
|
||||
});
|
||||
}
|
||||
|
||||
export function discordEventDispatcher(e: EventEmitter) {
|
||||
return (cmd: DiscordEventCommand & { name: string }) => ({
|
||||
source: e,
|
||||
cmd,
|
||||
execute: fromEvent(e, cmd.name)
|
||||
.pipe( map( event => ({
|
||||
event,
|
||||
executeEvent: of(event).pipe(concatMap( event =>
|
||||
reducePlugins(from(
|
||||
arrAsync(
|
||||
// god forbid I use any!!!
|
||||
cmd.onEvent.map(plug => plug.execute([event as any], controller))
|
||||
))
|
||||
)))
|
||||
})))
|
||||
});
|
||||
}
|
||||
|
||||
export function externalEventDispatcher(e: (e:ExternalEventCommand) => unknown) {
|
||||
return (cmd: ExternalEventCommand & { name: string}) => {
|
||||
const external = e(cmd);
|
||||
assert.ok(external instanceof EventEmitter, `${e} is not an EventEmitter`);
|
||||
return {
|
||||
source: external,
|
||||
cmd,
|
||||
execute: fromEvent(external, cmd.name)
|
||||
.pipe(map(event => ({
|
||||
event,
|
||||
executeEvent : of(event).pipe(concatMap(event =>
|
||||
reducePlugins(from(arrAsync(
|
||||
cmd.onEvent.map(plug => plug.execute([event], controller))
|
||||
)))
|
||||
)),
|
||||
})))
|
||||
};
|
||||
};
|
||||
}
|
||||
31
src/handler/events/eventsHandler.ts
Normal file
31
src/handler/events/eventsHandler.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { Subject, type Observable } from 'rxjs';
|
||||
import type { EventEmitter } from 'events';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
import type { ErrorHandling, Logging, ModuleManager } from '../contracts';
|
||||
|
||||
export abstract class EventsHandler<T> {
|
||||
protected payloadSubject = new Subject<T>();
|
||||
protected abstract discordEvent: Observable<unknown>;
|
||||
protected client: EventEmitter;
|
||||
protected emitter: SernEmitter;
|
||||
protected crashHandler: ErrorHandling;
|
||||
protected logger?: Logging;
|
||||
protected modules: ModuleManager;
|
||||
protected constructor({ containerConfig }: Wrapper) {
|
||||
const [
|
||||
client,
|
||||
emitter,
|
||||
crash,
|
||||
modules,
|
||||
logger,
|
||||
] = containerConfig.get('@sern/client', '@sern/emitter', '@sern/errors', '@sern/modules', '@sern/logger');
|
||||
this.logger = logger as Logging|undefined;
|
||||
this.modules = modules as ModuleManager;
|
||||
this.client = client as EventEmitter;
|
||||
this.emitter = emitter as SernEmitter;
|
||||
this.crashHandler = crash as ErrorHandling;
|
||||
}
|
||||
protected abstract init(): void;
|
||||
protected abstract setState(state: T): void;
|
||||
}
|
||||
@@ -1,232 +0,0 @@
|
||||
import type {
|
||||
CommandInteraction,
|
||||
Interaction,
|
||||
MessageComponentInteraction,
|
||||
ModalSubmitInteraction,
|
||||
SelectMenuInteraction,
|
||||
} from 'discord.js';
|
||||
import { concatMap, fromEvent, map, Observable, of, throwError } from 'rxjs';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import { match } from 'ts-pattern';
|
||||
import { SernError } from '../structures/errors';
|
||||
import Context from '../structures/context';
|
||||
import { controller } from '../sern';
|
||||
import type { Module } from '../structures/module';
|
||||
import {
|
||||
isButton,
|
||||
isChatInputCommand,
|
||||
isMessageCtxMenuCmd,
|
||||
isPromise,
|
||||
isSelectMenu,
|
||||
isUserContextMenuCmd,
|
||||
} from '../utilities/predicates';
|
||||
import { filterCorrectModule } from './observableHandling';
|
||||
import { CommandType } from '../structures/enums';
|
||||
import type { Result } from 'ts-results';
|
||||
import type { AutocompleteInteraction } from 'discord.js';
|
||||
|
||||
function applicationCommandHandler(mod: Module | undefined, interaction: CommandInteraction) {
|
||||
const mod$ = <T extends CommandType>(cmdTy: T) => of(mod).pipe(filterCorrectModule(cmdTy));
|
||||
return (
|
||||
match(interaction)
|
||||
.when(isChatInputCommand, i => {
|
||||
const ctx = Context.wrap(i);
|
||||
return mod$(CommandType.Slash).pipe(
|
||||
concatMap(m => {
|
||||
return of(
|
||||
m.onEvent.map(e => e.execute([ctx, ['slash', i.options]], controller)),
|
||||
).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx, ['slash', i.options]);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
//Todo: refactor so that we dont have to have two separate branches. They're near identical!!
|
||||
//Only thing that differs is type of interaction
|
||||
.when(isMessageCtxMenuCmd, ctx => {
|
||||
return mod$(CommandType.MenuMsg).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.when(isUserContextMenuCmd, ctx => {
|
||||
return mod$(CommandType.MenuUser).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.run()
|
||||
);
|
||||
}
|
||||
|
||||
function messageComponentInteractionHandler(
|
||||
mod: Module | undefined,
|
||||
interaction: MessageComponentInteraction,
|
||||
) {
|
||||
const mod$ = <T extends CommandType>(ty: T) => of(mod).pipe(filterCorrectModule(ty));
|
||||
//Todo: refactor so that we dont have to have two separate branches. They're near identical!!
|
||||
//Only thing that differs is type of interaction
|
||||
return match(interaction)
|
||||
.when(isButton, ctx => {
|
||||
return mod$(CommandType.Button).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.when(isSelectMenu, (ctx: SelectMenuInteraction) => {
|
||||
return mod$(CommandType.MenuSelect).pipe(
|
||||
concatMap(m => {
|
||||
return of(m.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return m.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
})
|
||||
.otherwise(() => throwError(() => SernError.NotSupportedInteraction));
|
||||
}
|
||||
|
||||
function modalHandler(modul: Module | undefined, ctx: ModalSubmitInteraction) {
|
||||
return of(modul).pipe(
|
||||
filterCorrectModule(CommandType.Modal),
|
||||
concatMap(mod => {
|
||||
return of(mod.onEvent.map(e => e.execute([ctx], controller))).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return mod.execute(ctx);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
function autoCmpHandler(mod: Module | undefined, interaction: AutocompleteInteraction) {
|
||||
return of(mod).pipe(
|
||||
filterCorrectModule(CommandType.Slash),
|
||||
concatMap(mod => {
|
||||
const choice = interaction.options.getFocused(true);
|
||||
const selectedOption = mod.options?.find(o => o.autocomplete && o.name === choice.name);
|
||||
if (selectedOption !== undefined && selectedOption.autocomplete) {
|
||||
return of(
|
||||
selectedOption.command.onEvent.map(e => e.execute([interaction], controller)),
|
||||
).pipe(
|
||||
map(res => ({
|
||||
mod,
|
||||
res,
|
||||
execute() {
|
||||
return selectedOption.command.execute(interaction);
|
||||
},
|
||||
})),
|
||||
);
|
||||
}
|
||||
return throwError(
|
||||
() =>
|
||||
SernError.NotSupportedInteraction +
|
||||
` There is probably no autocomplete tag for this option`,
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function onInteractionCreate(wrapper: Wrapper) {
|
||||
const { client } = wrapper;
|
||||
|
||||
const interactionEvent$ = <Observable<Interaction>>fromEvent(client, 'interactionCreate');
|
||||
|
||||
interactionEvent$
|
||||
.pipe(
|
||||
/*processing plugins*/
|
||||
concatMap(interaction => {
|
||||
if (interaction.isCommand()) {
|
||||
const modul =
|
||||
Files.ApplicationCommands[interaction.commandType].get(
|
||||
interaction.commandName,
|
||||
) ?? Files.BothCommands.get(interaction.commandName);
|
||||
return applicationCommandHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isMessageComponent()) {
|
||||
const modul = Files.MessageCompCommands[interaction.componentType].get(
|
||||
interaction.customId,
|
||||
);
|
||||
return messageComponentInteractionHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isModalSubmit()) {
|
||||
const modul = Files.ModalSubmitCommands.get(interaction.customId);
|
||||
return modalHandler(modul, interaction);
|
||||
}
|
||||
if (interaction.isAutocomplete()) {
|
||||
const modul =
|
||||
Files.ApplicationCommands['1'].get(interaction.commandName) ??
|
||||
Files.BothCommands.get(interaction.commandName);
|
||||
return autoCmpHandler(modul, interaction);
|
||||
}
|
||||
return throwError(() => SernError.NotSupportedInteraction);
|
||||
}),
|
||||
)
|
||||
.subscribe({
|
||||
async next({ mod, res: eventPluginRes, execute }) {
|
||||
const ePlugArr: Result<void, void>[] = [];
|
||||
for await (const res of eventPluginRes) {
|
||||
if (isPromise(res)) {
|
||||
ePlugArr.push(res);
|
||||
}
|
||||
ePlugArr.push(res as Awaited<Result<void, void>>);
|
||||
}
|
||||
if (ePlugArr.every(e => e.ok)) {
|
||||
await execute();
|
||||
wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! });
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.activate', {
|
||||
success: false,
|
||||
module: mod!,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
},
|
||||
error(err) {
|
||||
wrapper.sernEmitter?.emit('error', err);
|
||||
},
|
||||
});
|
||||
}
|
||||
119
src/handler/events/interactionHandler.ts
Normal file
119
src/handler/events/interactionHandler.ts
Normal file
@@ -0,0 +1,119 @@
|
||||
import type { Interaction } from 'discord.js';
|
||||
import { catchError, concatMap, from, fromEvent, map, Observable } from 'rxjs';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { EventsHandler } from './eventsHandler';
|
||||
import { SernError } from '../structures/errors';
|
||||
import { CommandType, PayloadType } from '../structures/enums';
|
||||
import { match, P } from 'ts-pattern';
|
||||
import {
|
||||
applicationCommandDispatcher,
|
||||
buttonCommandDispatcher,
|
||||
ctxMenuMsgDispatcher,
|
||||
ctxMenuUserDispatcher,
|
||||
modalCommandDispatcher,
|
||||
selectMenuCommandDispatcher,
|
||||
} from './dispatchers';
|
||||
import type {
|
||||
ButtonInteraction,
|
||||
ModalSubmitInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import { executeModule } from './observableHandling';
|
||||
import type { CommandModule } from '../../types/module';
|
||||
import { handleError } from '../contracts/errorHandling';
|
||||
import type { ModuleStore } from '../structures/moduleStore';
|
||||
import type { MessageComponentInteraction } from 'discord.js';
|
||||
|
||||
export default class InteractionHandler extends EventsHandler<{
|
||||
event: Interaction;
|
||||
mod: CommandModule;
|
||||
}> {
|
||||
protected override discordEvent: Observable<Interaction>;
|
||||
constructor(wrapper: Wrapper) {
|
||||
super(wrapper);
|
||||
this.discordEvent = <Observable<Interaction>>fromEvent(this.client, 'interactionCreate');
|
||||
this.init();
|
||||
|
||||
this.payloadSubject
|
||||
.pipe(
|
||||
map(this.processModules),
|
||||
concatMap(({ mod, execute, eventPluginRes }) =>
|
||||
from(eventPluginRes).pipe(map(res => ({ mod, res, execute }))) //resolve all the Results from event plugins
|
||||
),
|
||||
concatMap(payload => executeModule(wrapper, payload)),
|
||||
catchError(handleError(this.crashHandler, this.logger)),
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
override init() {
|
||||
const get = (cb: (ms: ModuleStore) => CommandModule|undefined) => {
|
||||
return this.modules.get(cb);
|
||||
};
|
||||
this.discordEvent.subscribe({
|
||||
next: event => {
|
||||
if (event.isMessageComponent()) {
|
||||
const mod = get(ms =>
|
||||
ms.InteractionHandlers[event.componentType].get(event.customId));
|
||||
this.setState({ event, mod });
|
||||
} else if (event.isCommand() || event.isAutocomplete()) {
|
||||
const mod = get(ms =>
|
||||
ms.ApplicationCommands[event.commandType].get(event.commandName) ??
|
||||
ms.BothCommands.get(event.commandName)
|
||||
);
|
||||
this.setState({ event, mod });
|
||||
} else if (event.isModalSubmit()) {
|
||||
const mod = get((ms) => ms.InteractionHandlers[5].get(event.customId));
|
||||
this.setState({ event, mod });
|
||||
} else {
|
||||
throw Error('This interaction is not supported yet');
|
||||
}
|
||||
},
|
||||
error: reason => {
|
||||
this.emitter.emit('error', { type: PayloadType.Failure, reason });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
protected setState(state: { event: Interaction; mod: CommandModule | undefined }): void {
|
||||
if (state.mod === undefined) {
|
||||
this.emitter.emit('warning',{ type: PayloadType.Warning, reason: 'Found no module for this interaction' });
|
||||
} else {
|
||||
//if statement above checks already, safe cast
|
||||
this.payloadSubject.next(state as { event: Interaction; mod: CommandModule });
|
||||
}
|
||||
}
|
||||
|
||||
protected processModules({ mod, event }: { event: Interaction; mod: CommandModule }) {
|
||||
return match(mod)
|
||||
.with(
|
||||
{ type: P.union(CommandType.Slash, CommandType.Both) },
|
||||
applicationCommandDispatcher(event),
|
||||
)
|
||||
.with(
|
||||
{ type: CommandType.Modal },
|
||||
modalCommandDispatcher(event as ModalSubmitInteraction),
|
||||
)
|
||||
.with({ type: CommandType.Button }, buttonCommandDispatcher(event as ButtonInteraction))
|
||||
.with(
|
||||
{ type: P.union(
|
||||
CommandType.RoleSelect,
|
||||
CommandType.StringSelect,
|
||||
CommandType.UserSelect,
|
||||
CommandType.MentionableSelect,
|
||||
CommandType.ChannelSelect
|
||||
) },
|
||||
selectMenuCommandDispatcher(event as MessageComponentInteraction),
|
||||
)
|
||||
.with(
|
||||
{ type: CommandType.CtxUser },
|
||||
ctxMenuUserDispatcher(event as UserContextMenuCommandInteraction),
|
||||
)
|
||||
.with(
|
||||
{ type: CommandType.CtxMsg },
|
||||
ctxMenuMsgDispatcher(event as MessageContextMenuCommandInteraction),
|
||||
)
|
||||
.otherwise(() => this.crashHandler.crash(Error(SernError.MismatchModule)));
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
import type { Message } from 'discord.js';
|
||||
import { concatMap, from, fromEvent, map, Observable, of } from 'rxjs';
|
||||
import type { Args } from '../..';
|
||||
import { controller } from '../sern';
|
||||
import Context from '../structures/context';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { fmt } from '../utilities/messageHelpers';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import { filterCorrectModule, ignoreNonBot } from './observableHandling';
|
||||
import { CommandType } from '../structures/enums';
|
||||
import { SernError } from '../structures/errors';
|
||||
|
||||
export const onMessageCreate = (wrapper: Wrapper) => {
|
||||
const { client, defaultPrefix } = wrapper;
|
||||
if (defaultPrefix === undefined) return;
|
||||
|
||||
const messageEvent$ = <Observable<Message>>fromEvent(client, 'messageCreate');
|
||||
|
||||
const processMessage$ = messageEvent$.pipe(
|
||||
ignoreNonBot(defaultPrefix),
|
||||
map(message => {
|
||||
const [prefix, ...rest] = fmt(message, defaultPrefix);
|
||||
return {
|
||||
ctx: Context.wrap(message),
|
||||
args: <Args>['text', rest],
|
||||
mod:
|
||||
Files.TextCommands.text.get(prefix) ??
|
||||
Files.BothCommands.get(prefix) ??
|
||||
Files.TextCommands.aliases.get(prefix),
|
||||
};
|
||||
}),
|
||||
);
|
||||
const ensureModuleType$ = processMessage$.pipe(
|
||||
concatMap(payload =>
|
||||
of(payload.mod).pipe(
|
||||
filterCorrectModule(CommandType.Text),
|
||||
map(mod => ({ ...payload, mod })),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
const processEventPlugins$ = ensureModuleType$.pipe(
|
||||
concatMap(({ ctx, args, mod }) => {
|
||||
const res = Promise.all(
|
||||
mod.onEvent.map(ePlug => {
|
||||
return ePlug.execute([ctx, args], controller);
|
||||
}),
|
||||
);
|
||||
return from(res).pipe(map(res => ({ mod, ctx, args, res })));
|
||||
}),
|
||||
);
|
||||
|
||||
processEventPlugins$.subscribe({
|
||||
next({ mod, ctx, args, res }) {
|
||||
if (res.every(pl => pl.ok)) {
|
||||
Promise.resolve(mod.execute(ctx, args)).then(() => {
|
||||
wrapper.sernEmitter?.emit('module.activate', { success: true, module: mod! });
|
||||
});
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.activate', {
|
||||
success: false,
|
||||
module: mod!,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
},
|
||||
error(e) {
|
||||
wrapper.sernEmitter?.emit('error', e);
|
||||
},
|
||||
});
|
||||
};
|
||||
78
src/handler/events/messageHandler.ts
Normal file
78
src/handler/events/messageHandler.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { EventsHandler } from './eventsHandler';
|
||||
import { catchError, concatMap, from, fromEvent, map, Observable, of, switchMap } from 'rxjs';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import type { Message } from 'discord.js';
|
||||
import { executeModule, ignoreNonBot, isOneOfCorrectModules } from './observableHandling';
|
||||
import { fmt } from '../utilities/messageHelpers';
|
||||
import Context from '../structures/context';
|
||||
import { CommandType, PayloadType } from '../structures/enums';
|
||||
import { arrAsync } from '../utilities/arrAsync';
|
||||
import { controller } from '../sern';
|
||||
import type { CommandModule, TextCommand } from '../../types/module';
|
||||
import { handleError } from '../contracts/errorHandling';
|
||||
import type { ModuleStore } from '../structures/moduleStore';
|
||||
|
||||
export default class MessageHandler extends EventsHandler<{
|
||||
ctx: Context;
|
||||
args: ['text', string[]];
|
||||
mod: TextCommand;
|
||||
}> {
|
||||
protected discordEvent: Observable<Message>;
|
||||
public constructor(protected wrapper: Wrapper) {
|
||||
super(wrapper);
|
||||
this.discordEvent = <Observable<Message>>fromEvent(this.client, 'messageCreate');
|
||||
this.init();
|
||||
this.payloadSubject
|
||||
.pipe(
|
||||
switchMap(({ mod, ctx, args }) => {
|
||||
const res = arrAsync(
|
||||
mod.onEvent.map(ep => ep.execute([ctx, args], controller)),
|
||||
);
|
||||
const execute = () => mod.execute(ctx, args);
|
||||
//resolves the promise and re-emits it back into source
|
||||
return from(res).pipe(map(res => ({ mod, execute, res })));
|
||||
}),
|
||||
concatMap(payload => executeModule(wrapper, payload)),
|
||||
catchError(handleError(this.crashHandler, this.logger)),
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
protected init(): void {
|
||||
if (this.wrapper.defaultPrefix === undefined) return; //for now, just ignore if prefix doesn't exist
|
||||
const { defaultPrefix } = this.wrapper;
|
||||
const get = (cb: (ms: ModuleStore) => CommandModule | undefined) => {
|
||||
return this.modules.get(cb);
|
||||
};
|
||||
this.discordEvent
|
||||
.pipe(
|
||||
ignoreNonBot(this.wrapper.defaultPrefix),
|
||||
map(message => {
|
||||
const [prefix, ...rest] = fmt(message, defaultPrefix);
|
||||
return {
|
||||
ctx: Context.wrap(message),
|
||||
args: <['text', string[]]>['text', rest],
|
||||
mod: get(ms =>
|
||||
ms.TextCommands.get(prefix) ??
|
||||
ms.BothCommands.get(prefix)
|
||||
),
|
||||
};
|
||||
}),
|
||||
concatMap(element =>
|
||||
of(element.mod).pipe(
|
||||
isOneOfCorrectModules(CommandType.Text),
|
||||
map(mod => ({ ...element, mod })),
|
||||
),
|
||||
),
|
||||
)
|
||||
.subscribe({
|
||||
next: value => this.setState(value),
|
||||
error: reason =>
|
||||
this.emitter.emit('error', { type: PayloadType.Failure, reason }),
|
||||
});
|
||||
}
|
||||
|
||||
protected setState(state: { ctx: Context; args: ['text', string[]]; mod: TextCommand }) {
|
||||
this.payloadSubject.next(state);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,16 @@
|
||||
import type { Message } from 'discord.js';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { concatMap, from, map, Observable, of, switchMap, tap, throwError, toArray } from 'rxjs';
|
||||
import { SernError } from '../structures/errors';
|
||||
import type { Module, ModuleDefs } from '../structures/module';
|
||||
import { correctModuleType } from '../utilities/predicates';
|
||||
export function filterCorrectModule<T extends keyof ModuleDefs>(cmdType: T) {
|
||||
return (src: Observable<Module | undefined>) =>
|
||||
new Observable<ModuleDefs[T]>(subscriber => {
|
||||
return src.subscribe({
|
||||
next(mod) {
|
||||
if (mod === undefined) {
|
||||
return throwError(() => SernError.UndefinedModule);
|
||||
}
|
||||
if (correctModuleType(mod, cmdType)) {
|
||||
subscriber.next(mod!);
|
||||
} else {
|
||||
return throwError(() => SernError.MismatchModule);
|
||||
}
|
||||
},
|
||||
error: e => subscriber.error(e),
|
||||
complete: () => subscriber.complete(),
|
||||
});
|
||||
});
|
||||
}
|
||||
import { Result } from 'ts-results-es';
|
||||
import type { CommandType } from '../structures/enums';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { PayloadType, PluginType } from '../structures/enums';
|
||||
import type { CommandModule, CommandModuleDefs, AnyModule } from '../../types/module';
|
||||
import { _const } from '../utilities/functions';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
import type { DefinedCommandModule, DefinedEventModule } from '../../types/handler';
|
||||
import type { Awaitable } from 'discord.js';
|
||||
import { processCommandPlugins } from './userDefinedEventsHandling';
|
||||
|
||||
export function ignoreNonBot(prefix: string) {
|
||||
return (src: Observable<Message>) =>
|
||||
@@ -42,3 +31,113 @@ export function ignoreNonBot(prefix: string) {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* If the current value in Result stream is an error, calls callback.
|
||||
* @param cb
|
||||
*/
|
||||
export function errTap<T extends AnyModule>(cb: (err: SernError) => void) {
|
||||
return (src: Observable<Result<{ mod: T; absPath: string }, SernError>>) =>
|
||||
new Observable<{ mod: T; absPath: string }>(subscriber => {
|
||||
return src.subscribe({
|
||||
next(value) {
|
||||
if (value.err) {
|
||||
cb(value.val);
|
||||
} else {
|
||||
subscriber.next(value.val);
|
||||
}
|
||||
},
|
||||
error: e => subscriber.error(e),
|
||||
complete: () => subscriber.complete(),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//POG
|
||||
export function isOneOfCorrectModules<T extends readonly CommandType[]>(...inputs: [...T]) {
|
||||
return (src: Observable<CommandModule | undefined>) => {
|
||||
return new Observable<CommandModuleDefs[T[number]]>(subscriber => {
|
||||
return src.subscribe({
|
||||
next(mod) {
|
||||
if (mod === undefined) {
|
||||
return throwError(_const(SernError.UndefinedModule));
|
||||
}
|
||||
if (inputs.some(type => (mod.type & type) !== 0)) {
|
||||
subscriber.next(mod as CommandModuleDefs[T[number]]);
|
||||
} else {
|
||||
return throwError(_const(SernError.MismatchModule));
|
||||
}
|
||||
},
|
||||
error: e => subscriber.error(e),
|
||||
complete: () => subscriber.complete(),
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export function executeModule(
|
||||
wrapper: Wrapper,
|
||||
payload: {
|
||||
mod: CommandModule;
|
||||
execute: () => unknown;
|
||||
res: Result<void, void>[];
|
||||
},
|
||||
) {
|
||||
const emitter = wrapper.containerConfig.get('@sern/emitter')[0] as SernEmitter;
|
||||
if (payload.res.every(el => el.ok)) {
|
||||
const executeFn = Result.wrapAsync<unknown, Error | string>(() => Promise.resolve(payload.execute()));
|
||||
return from(executeFn).pipe(
|
||||
concatMap(res => {
|
||||
if (res.err) {
|
||||
return throwError(() => ({
|
||||
type: PayloadType.Failure,
|
||||
reason: res.val,
|
||||
module: payload.mod,
|
||||
}));
|
||||
}
|
||||
return of(res.val).pipe(
|
||||
tap(() =>
|
||||
emitter.emit('module.activate', {
|
||||
type: PayloadType.Success,
|
||||
module: payload.mod,
|
||||
}),
|
||||
),
|
||||
);
|
||||
}),
|
||||
);
|
||||
} else {
|
||||
emitter.emit('module.activate', {
|
||||
type: PayloadType.Failure,
|
||||
module: payload.mod,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
return of(undefined);
|
||||
}
|
||||
}
|
||||
|
||||
export function resolvePlugins({ mod, cmdPluginRes }: {
|
||||
mod: DefinedCommandModule | DefinedEventModule;
|
||||
cmdPluginRes: {
|
||||
execute: Awaitable<Result<void, void>>;
|
||||
type: PluginType.Command;
|
||||
}[];
|
||||
}) {
|
||||
if (mod.plugins.length === 0) {
|
||||
return of({ mod, pluginRes: [] });
|
||||
}
|
||||
// modules with no event plugins are ignored in the previous
|
||||
return from(cmdPluginRes).pipe(
|
||||
switchMap(pl =>
|
||||
from(pl.execute).pipe(
|
||||
map(execute => ({ ...pl, execute })),
|
||||
toArray(),
|
||||
),
|
||||
),
|
||||
map(pluginRes => ({ mod, pluginRes })),
|
||||
);
|
||||
}
|
||||
|
||||
export function processPlugins(payload: { mod: DefinedCommandModule | DefinedEventModule; absPath: string }) {
|
||||
const cmdPluginRes = processCommandPlugins(payload);
|
||||
return of({ mod: payload.mod, cmdPluginRes });
|
||||
}
|
||||
@@ -1,140 +0,0 @@
|
||||
import {
|
||||
concat,
|
||||
concatMap,
|
||||
from,
|
||||
fromEvent,
|
||||
map,
|
||||
Observable,
|
||||
of,
|
||||
skip,
|
||||
take,
|
||||
throwError,
|
||||
} from 'rxjs';
|
||||
import { basename } from 'path';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { controller } from '../sern';
|
||||
import type { Result } from 'ts-results';
|
||||
import { Err, Ok } from 'ts-results';
|
||||
import type { Awaitable } from 'discord.js';
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
import type { Module } from '../structures/module';
|
||||
import { match } from 'ts-pattern';
|
||||
import { SernError } from '../structures/errors';
|
||||
import type { DefinitelyDefined } from '../../types/handler';
|
||||
import { CommandType, PluginType } from '../structures/enums';
|
||||
|
||||
export const onReady = (wrapper: Wrapper) => {
|
||||
const { client, commands } = wrapper;
|
||||
const ready$ = fromEvent(client, 'ready').pipe(take(1), skip(1));
|
||||
const processCommandFiles$ = Files.buildData(commands).pipe(
|
||||
map(({ mod, absPath }) => {
|
||||
if (mod?.name === undefined) {
|
||||
const name = Files.fmtFileName(basename(absPath));
|
||||
return { name, ...mod };
|
||||
}
|
||||
return mod;
|
||||
}),
|
||||
);
|
||||
const processPlugins$ = processCommandFiles$.pipe(
|
||||
concatMap(mod => {
|
||||
if (mod.type === CommandType.Autocomplete) {
|
||||
return throwError(
|
||||
() =>
|
||||
SernError.NonValidModuleType +
|
||||
`. You cannot use command plugins and Autocomplete.`,
|
||||
);
|
||||
}
|
||||
const cmdPluginsRes =
|
||||
mod.plugins?.map(plug => {
|
||||
return {
|
||||
...plug,
|
||||
name: plug?.name ?? 'Unnamed Plugin',
|
||||
execute: plug.execute(client, mod, controller),
|
||||
};
|
||||
}) ?? [];
|
||||
return of({ mod, cmdPluginsRes });
|
||||
}),
|
||||
);
|
||||
|
||||
(
|
||||
concat(ready$, processPlugins$) as Observable<{
|
||||
mod: DefinitelyDefined<Module, { name: string }>;
|
||||
cmdPluginsRes: {
|
||||
execute: Awaitable<Result<void, void>>;
|
||||
type: PluginType.Command;
|
||||
name: string;
|
||||
description: string;
|
||||
}[];
|
||||
}>
|
||||
)
|
||||
.pipe(
|
||||
concatMap(pl =>
|
||||
from(
|
||||
Promise.all(
|
||||
pl.cmdPluginsRes.map(async e => ({ ...e, execute: await e.execute })),
|
||||
),
|
||||
).pipe(map(res => ({ ...pl, cmdPluginsRes: res }))),
|
||||
),
|
||||
)
|
||||
.subscribe(({ mod, cmdPluginsRes }) => {
|
||||
const loadedPluginsCorrectly = cmdPluginsRes.every(res => res.execute.ok);
|
||||
if (loadedPluginsCorrectly) {
|
||||
const res = registerModule(mod);
|
||||
if (res.err) {
|
||||
throw Error(
|
||||
SernError.NonValidModuleType +
|
||||
', or loading modules was handled incorrectly. ' +
|
||||
'Check commands path and command files!',
|
||||
);
|
||||
}
|
||||
wrapper.sernEmitter?.emit('module.register', { success: true, module: mod });
|
||||
} else {
|
||||
wrapper.sernEmitter?.emit('module.register', {
|
||||
success: false,
|
||||
module: mod,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function registerModule(mod: DefinitelyDefined<Module, { name: string }>): Result<void, void> {
|
||||
const name = mod.name;
|
||||
return match<Module>(mod)
|
||||
.with({ type: CommandType.Text }, mod => {
|
||||
mod.alias?.forEach(a => Files.TextCommands.aliases.set(a, mod));
|
||||
Files.TextCommands.text.set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Slash }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.ChatInput].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Both }, mod => {
|
||||
Files.BothCommands.set(name, mod);
|
||||
mod.alias?.forEach(a => Files.TextCommands.aliases.set(a, mod));
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuUser }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.User].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuMsg }, mod => {
|
||||
Files.ApplicationCommands[ApplicationCommandType.Message].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Button }, mod => {
|
||||
Files.ApplicationCommands[ComponentType.Button].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.MenuSelect }, mod => {
|
||||
Files.MessageCompCommands[ComponentType.SelectMenu].set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.with({ type: CommandType.Modal }, mod => {
|
||||
Files.ModalSubmitCommands.set(name, mod);
|
||||
return Ok.EMPTY;
|
||||
})
|
||||
.otherwise(() => Err.EMPTY);
|
||||
}
|
||||
134
src/handler/events/readyHandler.ts
Normal file
134
src/handler/events/readyHandler.ts
Normal file
@@ -0,0 +1,134 @@
|
||||
import { EventsHandler } from './eventsHandler';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { concatMap, fromEvent, Observable, map, take } from 'rxjs';
|
||||
import * as Files from '../utilities/readFile';
|
||||
import { errTap, processPlugins, resolvePlugins } from './observableHandling';
|
||||
import { CommandType, PayloadType } from '../structures/enums';
|
||||
import { SernError } from '../structures/errors';
|
||||
import { match } from 'ts-pattern';
|
||||
import { Result } from 'ts-results-es';
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
import type { CommandModule } from '../../types/module';
|
||||
import type { DefinedCommandModule, DefinedEventModule } from '../../types/handler';
|
||||
import type { ModuleManager } from '../contracts';
|
||||
import type { ModuleStore } from '../structures/moduleStore';
|
||||
import { _const, err, nameOrFilename, ok } from '../utilities/functions';
|
||||
|
||||
export default class ReadyHandler extends EventsHandler<{
|
||||
mod: DefinedCommandModule;
|
||||
absPath: string;
|
||||
}> {
|
||||
protected discordEvent!: Observable<{ mod: CommandModule; absPath: string }>;
|
||||
constructor(wrapper: Wrapper) {
|
||||
super(wrapper);
|
||||
const ready$ = fromEvent(this.client, 'ready').pipe(take(1));
|
||||
this.discordEvent = ready$.pipe(
|
||||
concatMap(() =>
|
||||
Files.buildData<CommandModule>(wrapper.commands).pipe(
|
||||
errTap(reason =>
|
||||
this.emitter.emit('module.register', {
|
||||
type: PayloadType.Failure,
|
||||
module: undefined,
|
||||
reason,
|
||||
}),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
this.init();
|
||||
this.payloadSubject
|
||||
.pipe(
|
||||
concatMap(processPlugins),
|
||||
concatMap(resolvePlugins),
|
||||
).subscribe(payload => {
|
||||
const allPluginsSuccessful = payload.pluginRes.every(({ execute }) => execute.ok);
|
||||
if (allPluginsSuccessful) {
|
||||
const res = registerModule(this.modules, payload.mod);
|
||||
if (res.err) {
|
||||
this.crashHandler.crash(Error(SernError.InvalidModuleType));
|
||||
}
|
||||
this.emitter.emit('module.register', {
|
||||
type: PayloadType.Success,
|
||||
module: payload.mod,
|
||||
});
|
||||
} else {
|
||||
this.emitter.emit('module.register', {
|
||||
type: PayloadType.Failure,
|
||||
module: payload.mod,
|
||||
reason: SernError.PluginFailure,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
private static intoDefinedModule({ absPath, mod }: { absPath: string; mod: CommandModule }): {
|
||||
absPath: string;
|
||||
mod: DefinedCommandModule;
|
||||
} {
|
||||
return {
|
||||
absPath,
|
||||
mod: {
|
||||
name: nameOrFilename(mod.name, absPath),
|
||||
description: mod?.description ?? '...',
|
||||
...mod,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
protected init() {
|
||||
this.discordEvent.pipe(map(ReadyHandler.intoDefinedModule)).subscribe({
|
||||
next: value => this.setState(value),
|
||||
complete: () => this.payloadSubject.unsubscribe(),
|
||||
});
|
||||
}
|
||||
protected setState(state: { absPath: string; mod: DefinedCommandModule }): void {
|
||||
this.payloadSubject.next(state);
|
||||
}
|
||||
}
|
||||
|
||||
function registerModule(manager: ModuleManager, mod: DefinedCommandModule | DefinedEventModule): Result<void, void> {
|
||||
const name = mod.name;
|
||||
const insert = (cb: (ms: ModuleStore) => void) => {
|
||||
const set = Result.wrap(_const(manager.set(cb)));
|
||||
return set.ok ? ok() : err();
|
||||
};
|
||||
return match<DefinedCommandModule | DefinedEventModule>(mod)
|
||||
.with({ type: CommandType.Text }, mod => {
|
||||
mod.alias?.forEach(a => insert(ms => ms.TextCommands.set(a, mod)));
|
||||
return insert(ms => ms.TextCommands.set(name, mod));
|
||||
})
|
||||
.with({ type: CommandType.Slash }, mod =>
|
||||
insert(ms => ms.ApplicationCommands[ApplicationCommandType.ChatInput].set(name, mod))
|
||||
)
|
||||
.with({ type: CommandType.Both }, mod => {
|
||||
mod.alias?.forEach(a => insert(ms => ms.TextCommands.set(a, mod)));
|
||||
return insert( ms => ms.BothCommands.set(name, mod));
|
||||
})
|
||||
.with({ type: CommandType.CtxUser }, mod =>
|
||||
insert(ms => ms.ApplicationCommands[ApplicationCommandType.User].set(name, mod))
|
||||
)
|
||||
.with({ type: CommandType.CtxMsg }, mod =>
|
||||
insert(ms => ms.ApplicationCommands[ApplicationCommandType.Message].set(name, mod))
|
||||
)
|
||||
.with({ type: CommandType.Button }, mod =>
|
||||
insert(ms => ms.InteractionHandlers[ComponentType.Button].set(name, mod))
|
||||
)
|
||||
.with({ type: CommandType.StringSelect }, mod =>
|
||||
insert(ms => ms.InteractionHandlers[ComponentType.StringSelect].set(name, mod))
|
||||
)
|
||||
.with( { type: CommandType.MentionableSelect }, mod =>
|
||||
insert (ms => ms.InteractionHandlers[ComponentType.MentionableSelect].set(name, mod))
|
||||
)
|
||||
.with( { type: CommandType.ChannelSelect }, mod =>
|
||||
insert ( ms => ms.InteractionHandlers[ComponentType.ChannelSelect].set(name, mod))
|
||||
)
|
||||
.with( { type: CommandType.UserSelect }, mod =>
|
||||
insert ( ms => ms.InteractionHandlers[ComponentType.UserSelect].set(name, mod))
|
||||
)
|
||||
.with( { type: CommandType.RoleSelect}, mod =>
|
||||
insert ( ms => ms.InteractionHandlers[ComponentType.RoleSelect].set(name, mod))
|
||||
)
|
||||
.with({ type: CommandType.Modal }, mod =>
|
||||
insert(ms => ms.ModalSubmit.set(name, mod))
|
||||
)
|
||||
.otherwise(err);
|
||||
}
|
||||
108
src/handler/events/userDefinedEventsHandling.ts
Normal file
108
src/handler/events/userDefinedEventsHandling.ts
Normal file
@@ -0,0 +1,108 @@
|
||||
import { catchError, concatMap, filter, from, iif, map, of, tap, toArray } from 'rxjs';
|
||||
import { buildData } from '../utilities/readFile';
|
||||
import { controller } from '../sern';
|
||||
import type { DefinedCommandModule, DefinedEventModule, Dependencies } from '../../types/handler';
|
||||
import { PayloadType, PluginType } from '../structures/enums';
|
||||
import type Wrapper from '../structures/wrapper';
|
||||
import { isDiscordEvent, isExternalEvent, isSernEvent } from '../utilities/predicates';
|
||||
import { errTap, processPlugins, resolvePlugins } from './observableHandling';
|
||||
import type { AnyModule, EventModule } from '../../types/module';
|
||||
import type { EventEmitter } from 'events';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
import { nameOrFilename, reducePlugins } from '../utilities/functions';
|
||||
import { match } from 'ts-pattern';
|
||||
import { discordEventDispatcher, externalEventDispatcher, sernEmitterDispatcher } from './dispatchers';
|
||||
import type { ErrorHandling, Logging } from '../contracts';
|
||||
import { SernError } from '../structures/errors';
|
||||
import { handleError } from '../contracts/errorHandling';
|
||||
import type { Awaitable } from 'discord.js';
|
||||
import type { Result } from 'ts-results-es';
|
||||
|
||||
/**
|
||||
* Utility function to process command plugins for all Modules
|
||||
* @param payload
|
||||
*/
|
||||
export function processCommandPlugins<T extends DefinedCommandModule | DefinedEventModule>(
|
||||
payload: { mod: T; absPath: string },
|
||||
): {type: PluginType.Command, execute: Awaitable<Result<void,void>>}[] {
|
||||
return payload.mod.plugins.map(plug => ({
|
||||
type: plug.type,
|
||||
execute: plug.execute(payload as any, controller),
|
||||
}));
|
||||
}
|
||||
|
||||
export function processEvents({ containerConfig, events }: Wrapper) {
|
||||
const [
|
||||
client,
|
||||
error,
|
||||
sernEmitter,
|
||||
logging
|
||||
] = containerConfig.get('@sern/client', '@sern/errors', '@sern/emitter', '@sern/logger') as [EventEmitter, ErrorHandling, SernEmitter, Logging?];
|
||||
const lazy = (k: string) => containerConfig.get(k as keyof Dependencies)[0];
|
||||
const eventStream$ = eventObservable$(events!, sernEmitter);
|
||||
const emitSuccess$ = (mod: AnyModule) =>
|
||||
of({ type: PayloadType.Failure, module: mod, reason: SernError.PluginFailure })
|
||||
.pipe(tap( it => sernEmitter.emit('module.register', it)));
|
||||
const emitFailure$ = (mod: AnyModule) =>
|
||||
of({ type: PayloadType.Success, module: mod, } as const)
|
||||
.pipe(tap(it => sernEmitter.emit('module.register', it)));
|
||||
const eventCreation$ = eventStream$.pipe(
|
||||
map(({ mod, absPath }) => ({
|
||||
mod : {
|
||||
name: nameOrFilename(mod.name, absPath),
|
||||
...mod,
|
||||
} as DefinedEventModule,
|
||||
absPath
|
||||
})),
|
||||
concatMap(processPlugins),
|
||||
concatMap(resolvePlugins),
|
||||
//Reduces pluginRes (generated from above) into a single boolean
|
||||
concatMap(({pluginRes, mod}) => from(pluginRes)
|
||||
.pipe(
|
||||
map(pl => pl.execute),
|
||||
toArray(),
|
||||
reducePlugins,
|
||||
map(success => ({ success, mod }))
|
||||
)),
|
||||
concatMap(({ success, mod }) =>
|
||||
iif(() => success,
|
||||
emitFailure$(mod),
|
||||
emitSuccess$(mod)
|
||||
).pipe(
|
||||
filter(res => res.type === PayloadType.Success),
|
||||
map(() => mod)
|
||||
)
|
||||
),
|
||||
);
|
||||
eventCreation$.subscribe(e => {
|
||||
const payload = match(e)
|
||||
.when(isSernEvent, sernEmitterDispatcher(sernEmitter))
|
||||
.when(isDiscordEvent, discordEventDispatcher(client))
|
||||
.when(isExternalEvent, externalEventDispatcher(e => lazy(e.emitter)))
|
||||
.otherwise(() => error.crash(Error(SernError.InvalidModuleType)));
|
||||
payload
|
||||
.execute
|
||||
.pipe(
|
||||
concatMap(({event, executeEvent}) =>
|
||||
executeEvent
|
||||
.pipe( tap(success => {
|
||||
if(success)
|
||||
payload.cmd.execute(event as never);
|
||||
}), catchError(handleError(error, logging)))
|
||||
),
|
||||
).subscribe();
|
||||
});
|
||||
}
|
||||
|
||||
function eventObservable$(events: string, emitter: SernEmitter) {
|
||||
return buildData<EventModule>(events)
|
||||
.pipe(
|
||||
errTap(reason =>
|
||||
emitter.emit('module.register', {
|
||||
type: PayloadType.Failure,
|
||||
module: undefined,
|
||||
reason,
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1,108 +1,147 @@
|
||||
//
|
||||
// Plugins can be inserted on all commands and are emitted
|
||||
//
|
||||
// 1. on ready event, where all commands are loaded.
|
||||
// 2. on corresponding observable (command triggers)
|
||||
//
|
||||
// The goal of plugins is to organize commands and
|
||||
// provide extensions to repetitive patterns
|
||||
// examples include refreshing modules,
|
||||
// categorizing commands, cooldowns, permissions, etc.
|
||||
// Plugins are reminiscent of middleware in express.
|
||||
//
|
||||
/*
|
||||
* Plugins can be inserted on all commands and are emitted
|
||||
*
|
||||
* 1. On ready event, where all commands are loaded.
|
||||
* 2. On corresponding observable (when command triggers)
|
||||
*
|
||||
* The goal of plugins is to organize commands and
|
||||
* provide extensions to repetitive patterns
|
||||
* examples include refreshing modules,
|
||||
* categorizing commands, cool-downs, permissions, etc.
|
||||
* Plugins are reminiscent of middleware in express.
|
||||
*/
|
||||
|
||||
import type { Awaitable, Client } from 'discord.js';
|
||||
import type { Err, Ok, Result } from 'ts-results';
|
||||
import type { Module, Override } from '../..';
|
||||
import { CommandType } from '../..';
|
||||
import type { AutocompleteCommand, BaseModule, ModuleDefs } from '../structures/module';
|
||||
import { PluginType } from '../structures/enums';
|
||||
import type { AutocompleteInteraction, Awaitable, ClientEvents } from 'discord.js';
|
||||
import type { Result, Ok, Err } from 'ts-results-es';
|
||||
import type { CommandType, SernEventsMapping } from '../../index';
|
||||
import { EventType, PluginType } from '../../index';
|
||||
import type { CommandModuleDefs, EventModuleDefs } from '../../types/module';
|
||||
import type {
|
||||
DiscordEventCommand,
|
||||
ExternalEventCommand,
|
||||
SernEventCommand,
|
||||
} from '../structures/events';
|
||||
|
||||
export interface Controller {
|
||||
next: () => Ok<void>;
|
||||
stop: () => Err<void>;
|
||||
}
|
||||
export interface Plugin {
|
||||
/** @deprecated will be removed in the next update */
|
||||
name?: string;
|
||||
/** @deprecated will be removed in the next update */
|
||||
description?: string;
|
||||
type: PluginType
|
||||
}
|
||||
|
||||
type BasePlugin = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: PluginType;
|
||||
}
|
||||
>;
|
||||
export interface CommandPlugin<T extends keyof CommandModuleDefs = keyof CommandModuleDefs> extends Plugin {
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
payload: {
|
||||
mod: CommandModuleDefs[T] & { name : string; description : string };
|
||||
absPath: string;
|
||||
},
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
export interface DiscordEmitterPlugin extends Plugin {
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
payload: { mod: DiscordEventCommand & { name: string }; absPath: string },
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
export type CommandPlugin<T extends keyof ModuleDefs = keyof ModuleDefs> = {
|
||||
[K in T]: Override<
|
||||
BasePlugin,
|
||||
{
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
wrapper: Client,
|
||||
module: ModuleDefs[T],
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
>;
|
||||
}[T];
|
||||
export type EventPlugin<T extends keyof ModuleDefs = keyof ModuleDefs> = {
|
||||
[K in T]: Override<
|
||||
BasePlugin,
|
||||
{
|
||||
type: PluginType.Event;
|
||||
execute: (
|
||||
event: Parameters<ModuleDefs[K]['execute']>,
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
>;
|
||||
}[T];
|
||||
export interface ExternalEmitterPlugin extends Plugin {
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
payload: { mod: ExternalEventCommand & { name : string }; absPath: string } ,
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
//Syntactic sugar on hold
|
||||
// export function plugins<T extends keyof ModuleDefs>(
|
||||
// ...plug: (EventPlugin<T> | CommandPlugin<T>)[]
|
||||
// ) {
|
||||
// return plug;
|
||||
// }
|
||||
export interface SernEmitterPlugin extends Plugin {
|
||||
type: PluginType.Command;
|
||||
execute: (
|
||||
payload: { mod : SernEventCommand & { name : string }; absPath: string },
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
type ModuleNoPlugins = {
|
||||
[T in keyof ModuleDefs]: Omit<ModuleDefs[T], 'plugins' | 'onEvent'>;
|
||||
export interface AutocompletePlugin extends Plugin {
|
||||
type: PluginType.Event;
|
||||
execute: (
|
||||
autocmp: AutocompleteInteraction,
|
||||
controlller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
|
||||
export interface EventPlugin<K extends keyof CommandModuleDefs = keyof CommandModuleDefs> extends Plugin {
|
||||
type: PluginType.Event;
|
||||
execute: (
|
||||
event: Parameters<CommandModuleDefs[K]['execute']>,
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
export interface SernEventPlugin<T extends keyof SernEventsMapping = keyof SernEventsMapping> extends Plugin {
|
||||
name?: T;
|
||||
type: PluginType.Event;
|
||||
execute: (
|
||||
args: SernEventsMapping[T],
|
||||
controller: Controller,
|
||||
) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
export interface ExternalEventPlugin extends Plugin {
|
||||
type: PluginType.Event;
|
||||
execute: (args: unknown[], controller: Controller) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
export interface DiscordEventPlugin<T extends keyof ClientEvents = keyof ClientEvents> extends Plugin {
|
||||
name?: T;
|
||||
type: PluginType.Event;
|
||||
execute: (args: ClientEvents[T], controller: Controller) => Awaitable<Result<void, void>>;
|
||||
}
|
||||
|
||||
export type CommandModuleNoPlugins = {
|
||||
[T in CommandType]: Omit<CommandModuleDefs[T], 'plugins' | 'onEvent'>;
|
||||
};
|
||||
export type EventModulesNoPlugins = {
|
||||
[T in EventType]: Omit<EventModuleDefs[T], 'plugins' | 'onEvent'>;
|
||||
};
|
||||
/**
|
||||
* Event Module Event Plugins
|
||||
*/
|
||||
export type EventModuleEventPluginDefs = {
|
||||
[EventType.Discord]: DiscordEventPlugin;
|
||||
[EventType.Sern]: SernEventPlugin;
|
||||
[EventType.External]: ExternalEventPlugin;
|
||||
};
|
||||
|
||||
function isEventPlugin<T extends CommandType>(
|
||||
e: CommandPlugin<T> | EventPlugin<T>,
|
||||
): e is EventPlugin<T> {
|
||||
return e.type === PluginType.Event;
|
||||
}
|
||||
function isCommandPlugin<T extends CommandType>(
|
||||
e: CommandPlugin<T> | EventPlugin<T>,
|
||||
): e is CommandPlugin<T> {
|
||||
return !isEventPlugin(e);
|
||||
}
|
||||
//TODO: I WANT BETTER TYPINGS AHHHHHHHHHHHHHHH
|
||||
export function sernModule<T extends CommandType>(
|
||||
plugin: (CommandPlugin<T> | EventPlugin<T>)[],
|
||||
mod: ModuleNoPlugins[T],
|
||||
): Module {
|
||||
const onEvent = plugin.filter(isEventPlugin);
|
||||
const plugins = plugin.filter(isCommandPlugin);
|
||||
if (mod.type === CommandType.Autocomplete) {
|
||||
throw new Error(
|
||||
'You cannot use this function declaration for Autocomplete Interactions! use the raw object for options or' +
|
||||
'sernAutoComplete function',
|
||||
);
|
||||
} else
|
||||
return {
|
||||
onEvent,
|
||||
plugins,
|
||||
...mod,
|
||||
} as Module;
|
||||
}
|
||||
/**
|
||||
* Event Module Command Plugins
|
||||
*/
|
||||
export type EventModuleCommandPluginDefs = {
|
||||
[EventType.Discord]: DiscordEmitterPlugin;
|
||||
[EventType.Sern]: SernEmitterPlugin;
|
||||
[EventType.External]: ExternalEmitterPlugin;
|
||||
};
|
||||
|
||||
export function sernAutocomplete(
|
||||
onEvent: EventPlugin<CommandType.Autocomplete>[],
|
||||
mod: Omit<AutocompleteCommand, 'type' | 'name' | 'description' | 'onEvent'>,
|
||||
): Omit<AutocompleteCommand, 'type' | 'name' | 'description'> {
|
||||
return {
|
||||
onEvent,
|
||||
...mod,
|
||||
};
|
||||
}
|
||||
export type EventModulePlugin<T extends EventType> =
|
||||
| EventModuleEventPluginDefs[T]
|
||||
| EventModuleCommandPluginDefs[T];
|
||||
|
||||
export type CommandModulePlugin<T extends CommandType> = EventPlugin<T> | CommandPlugin<T>;
|
||||
|
||||
/**
|
||||
* User inputs this type. Sern processes behind the scenes for better usage
|
||||
*/
|
||||
export type InputCommandModule = {
|
||||
[T in CommandType]: CommandModuleNoPlugins[T] & { plugins?: CommandModulePlugin<T>[] };
|
||||
}[CommandType];
|
||||
|
||||
export type InputEventModule = {
|
||||
[T in EventType]: EventModulesNoPlugins[T] & { plugins?: EventModulePlugin<T>[] };
|
||||
}[EventType];
|
||||
|
||||
@@ -1,35 +1,109 @@
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../types/handler';
|
||||
|
||||
import type Wrapper from './structures/wrapper';
|
||||
import { fromEvent } from 'rxjs';
|
||||
import { onReady } from './events/readyEvent';
|
||||
import { onMessageCreate } from './events/messageEvent';
|
||||
import { onInteractionCreate } from './events/interactionCreate';
|
||||
import { Err, Ok } from 'ts-results';
|
||||
import { isDiscordEvent } from './utilities/predicates';
|
||||
import type { Client } from 'discord.js';
|
||||
|
||||
import { processEvents } from './events/userDefinedEventsHandling';
|
||||
import { CommandType, EventType, PluginType } from './structures/enums';
|
||||
import type {
|
||||
Plugin,
|
||||
CommandPlugin,
|
||||
EventModuleCommandPluginDefs,
|
||||
EventModuleEventPluginDefs,
|
||||
EventPlugin,
|
||||
InputCommandModule,
|
||||
InputEventModule,
|
||||
} from './plugins/plugin';
|
||||
import InteractionHandler from './events/interactionHandler';
|
||||
import ReadyHandler from './events/readyHandler';
|
||||
import MessageHandler from './events/messageHandler';
|
||||
import type { CommandModule, CommandModuleDefs, EventModule, EventModuleDefs } from '../types/module';
|
||||
import { Container, createContainer } from 'iti';
|
||||
import type { Dependencies, OptionalDependencies } from '../types/handler';
|
||||
import { composeRoot, containerSubject, useContainer } from './dependencies/provider';
|
||||
import type { Logging } from './contracts';
|
||||
import { err, ok, partition } from './utilities/functions';
|
||||
/**
|
||||
*
|
||||
* @param wrapper Options to pass into sern.
|
||||
* Function to start the handler up
|
||||
* @example
|
||||
* ```ts title="src/index.ts"
|
||||
* Sern.init({
|
||||
* defaultPrefix: '!',
|
||||
* commands: 'dist/commands',
|
||||
* events: 'dist/events',
|
||||
* containerConfig : {
|
||||
* get: useContainer
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
export function init(wrapper: Wrapper) {
|
||||
const { events, client } = wrapper;
|
||||
const logger = wrapper.containerConfig.get('@sern/logger')[0] as Logging | undefined;
|
||||
const startTime = performance.now();
|
||||
const { events } = wrapper;
|
||||
if (events !== undefined) {
|
||||
eventObserver(client, events);
|
||||
processEvents(wrapper);
|
||||
}
|
||||
onReady(wrapper);
|
||||
onMessageCreate(wrapper);
|
||||
onInteractionCreate(wrapper);
|
||||
}
|
||||
|
||||
function eventObserver(client: Client, events: (DiscordEvent | EventEmitterRegister)[]) {
|
||||
events.forEach(event => {
|
||||
if (isDiscordEvent(event)) {
|
||||
fromEvent(client, event[0], event[1]).subscribe();
|
||||
} else {
|
||||
fromEvent(event[0], event[1], event[2]).subscribe();
|
||||
}
|
||||
});
|
||||
new ReadyHandler(wrapper);
|
||||
new MessageHandler(wrapper);
|
||||
new InteractionHandler(wrapper);
|
||||
const endTime = performance.now();
|
||||
logger?.info({ message: `sern : ${(endTime-startTime).toFixed(2)} ms` });
|
||||
}
|
||||
|
||||
/**
|
||||
* The object passed into every plugin to control a command's behavior
|
||||
*/
|
||||
export const controller = {
|
||||
next: () => Ok.EMPTY,
|
||||
stop: () => Err.EMPTY,
|
||||
next: ok,
|
||||
stop: err,
|
||||
};
|
||||
|
||||
/**
|
||||
* The wrapper function to define command modules for sern
|
||||
* @param mod
|
||||
*/
|
||||
export function commandModule(mod: InputCommandModule): CommandModule {
|
||||
const [onEvent, plugins] = partition(mod.plugins ?? [], el => (el as Plugin).type === PluginType.Event);
|
||||
return {
|
||||
...mod,
|
||||
onEvent,
|
||||
plugins,
|
||||
} as CommandModule;
|
||||
}
|
||||
/**
|
||||
* The wrapper function to define event modules for sern
|
||||
* @param mod
|
||||
*/
|
||||
export function eventModule(mod: InputEventModule): EventModule {
|
||||
const [onEvent, plugins] = partition(mod.plugins ?? [], el => (el as Plugin).type === PluginType.Event);
|
||||
return {
|
||||
...mod,
|
||||
onEvent,
|
||||
plugins,
|
||||
} as EventModule;
|
||||
}
|
||||
/**
|
||||
* @param conf a configuration for creating your project dependencies
|
||||
*/
|
||||
export function makeDependencies<T extends Dependencies>(conf: {
|
||||
exclude?: Set<OptionalDependencies>,
|
||||
build: (root: Container<Record<string,any>, {}>) => Container<Partial<T>, T>,
|
||||
}) {
|
||||
const container = conf.build(createContainer());
|
||||
composeRoot(container, conf.exclude ?? new Set());
|
||||
containerSubject.next(container as unknown as Container<Dependencies, {}>);
|
||||
return useContainer<T>();
|
||||
}
|
||||
|
||||
export abstract class CommandExecutable<Type extends CommandType> {
|
||||
abstract type: Type;
|
||||
plugins: CommandPlugin<Type>[] = [];
|
||||
onEvent: EventPlugin<Type>[] = [];
|
||||
abstract execute: CommandModuleDefs[Type]['execute'];
|
||||
}
|
||||
|
||||
export abstract class EventExecutable<Type extends EventType> {
|
||||
abstract type: Type;
|
||||
plugins: EventModuleCommandPluginDefs[Type][] = [];
|
||||
onEvent: EventModuleEventPluginDefs[Type][] = [];
|
||||
abstract execute: EventModuleDefs[Type]['execute'];
|
||||
}
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
import { EventEmitter } from 'events';
|
||||
import type { Module } from './structures/module';
|
||||
import type { SernEventsMapping } from '../types/handler';
|
||||
|
||||
type Payload =
|
||||
| { success: true; module: Module }
|
||||
| { success: false; module: Module | undefined; reason: string | Error };
|
||||
|
||||
type SernEventsMapping = {
|
||||
['module.register']: [Payload];
|
||||
['module.activate']: [Payload];
|
||||
['error']: [Error | string];
|
||||
};
|
||||
|
||||
export default class SernEmitter extends EventEmitter {
|
||||
class SernEmitter extends EventEmitter {
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
@@ -37,7 +27,7 @@ export default class SernEmitter extends EventEmitter {
|
||||
/**
|
||||
* Listening to sern events with on. This event stays on until a crash or a normal exit
|
||||
* @param eventName
|
||||
* @param args the arguments for emitting the { eventName }
|
||||
* @param args the arguments for emitting the eventName
|
||||
*/
|
||||
public override emit<T extends keyof SernEventsMapping>(
|
||||
eventName: T,
|
||||
@@ -46,3 +36,5 @@ export default class SernEmitter extends EventEmitter {
|
||||
return super.emit(eventName, ...args);
|
||||
}
|
||||
}
|
||||
|
||||
export default SernEmitter;
|
||||
|
||||
@@ -1,157 +1,132 @@
|
||||
import type { APIGuildMember } from 'discord-api-types/v9';
|
||||
import type {
|
||||
ChatInputCommandInteraction,
|
||||
Client,
|
||||
Guild,
|
||||
GuildMember,
|
||||
InteractionReplyOptions,
|
||||
Message,
|
||||
ReplyMessageOptions,
|
||||
Snowflake,
|
||||
TextBasedChannel,
|
||||
MessageReplyOptions,
|
||||
User,
|
||||
} from 'discord.js';
|
||||
import { None, Option, Some } from 'ts-results';
|
||||
import type { Nullish } from '../../types/handler';
|
||||
import { ExternallyUsed } from '../utilities/externallyUsed';
|
||||
import { Result as Either, Ok as Left, Err as Right } from 'ts-results-es';
|
||||
import type { ReplyOptions } from '../../types/handler';
|
||||
import { SernError } from './errors';
|
||||
|
||||
function firstSome<T>(...args: Option<T>[]): Nullish<T> {
|
||||
for (const op of args) {
|
||||
if (op.some) return op.val;
|
||||
}
|
||||
return null;
|
||||
|
||||
function safeUnwrap<T>(res: Either<T, T>) {
|
||||
return res.val;
|
||||
}
|
||||
|
||||
//Could I refactor with Either monad?
|
||||
/**
|
||||
* Provides values shared between
|
||||
* Message and ChatInputCommandInteraction
|
||||
*/
|
||||
export default class Context {
|
||||
private constructor(
|
||||
private oMsg: Option<Message> = None,
|
||||
private oInterac: Option<ChatInputCommandInteraction> = None,
|
||||
) {
|
||||
this.oMsg = oMsg;
|
||||
this.oInterac = oInterac;
|
||||
}
|
||||
private ctx: Either<Message, ChatInputCommandInteraction>,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Getting the Message object. Crashes if module type is
|
||||
* CommandType.Slash or the event fired in a Both command was
|
||||
* ChatInputCommandInteraction
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get message() {
|
||||
return this.oMsg.unwrap();
|
||||
public get message() {
|
||||
return this.ctx.expect(SernError.MismatchEvent);
|
||||
}
|
||||
/**
|
||||
* Getting the ChatInputCommandInteraction object. Crashes if module type is
|
||||
* CommandType.Text or the event fired in a Both command was
|
||||
* Message
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get interaction() {
|
||||
return this.oInterac.unwrap();
|
||||
return this.ctx.expectErr(SernError.MismatchEvent);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get id(): Snowflake {
|
||||
return firstSome(
|
||||
this.oInterac.map(i => i.id),
|
||||
this.oMsg.map(m => m.id),
|
||||
)!;
|
||||
return safeUnwrap(
|
||||
this.ctx
|
||||
.map(m => m.id)
|
||||
.mapErr(i => i.id));
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get channel(): Nullish<TextBasedChannel> {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.channel),
|
||||
this.oInterac.map(i => i.channel),
|
||||
public get channel() {
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.channel)
|
||||
.mapErr(i => i.channel));
|
||||
}
|
||||
/**
|
||||
* If context is holding a message, message.author
|
||||
* else, interaction.user
|
||||
*/
|
||||
public get user(): User {
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.author)
|
||||
.mapErr(i => i.user)
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get user(): User {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.author),
|
||||
this.oInterac.map(i => i.user),
|
||||
)!;
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get createdTimestamp(): number {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.createdTimestamp),
|
||||
this.oInterac.map(i => i.createdTimestamp),
|
||||
)!;
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.createdTimestamp)
|
||||
.mapErr(i => i.createdTimestamp)
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get guild(): Guild {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.guild),
|
||||
this.oInterac.map(i => i.guild),
|
||||
)!;
|
||||
public get guild() {
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.guild)
|
||||
.mapErr(i => i.guild)
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get guildId(): Snowflake {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.guildId),
|
||||
this.oInterac.map(i => i.guildId),
|
||||
)!;
|
||||
public get guildId() {
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.guildId)
|
||||
.mapErr(i => i.guildId)
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* interactions can return APIGuildMember if the guild it is emitted from is not cached
|
||||
*/
|
||||
@ExternallyUsed
|
||||
public get member(): Nullish<GuildMember | APIGuildMember> {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.member),
|
||||
this.oInterac.map(i => i.member),
|
||||
public get member() {
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.member)
|
||||
.mapErr(i => i.member)
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get client(): Client {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.client),
|
||||
this.oInterac.map(i => i.client),
|
||||
)!;
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m => m.client)
|
||||
.mapErr(i => i.client)
|
||||
);
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public get inGuild(): boolean {
|
||||
return firstSome(
|
||||
this.oMsg.map(m => m.inGuild()),
|
||||
this.oInterac.map(i => i.inGuild()),
|
||||
)!;
|
||||
return safeUnwrap(this.ctx
|
||||
.map(m=>m.inGuild())
|
||||
.mapErr(i => i.inGuild())
|
||||
);
|
||||
}
|
||||
public isMessage() {
|
||||
return this.ctx.map(() => true).unwrapOr(false);
|
||||
}
|
||||
|
||||
public isSlash() {
|
||||
return !this.isMessage();
|
||||
}
|
||||
|
||||
static wrap(wrappable: ChatInputCommandInteraction | Message): Context {
|
||||
if ('token' in wrappable) {
|
||||
return new Context(None, Some(wrappable));
|
||||
return new Context(Right(wrappable));
|
||||
}
|
||||
return new Context(Some(wrappable), None);
|
||||
return new Context(Left(wrappable));
|
||||
}
|
||||
|
||||
@ExternallyUsed
|
||||
public isEmpty() {
|
||||
return this.oMsg.none && this.oInterac.none;
|
||||
}
|
||||
|
||||
//TODO: make this queueable
|
||||
@ExternallyUsed
|
||||
public reply(content: Omit<InteractionReplyOptions, 'fetchReply'> | ReplyMessageOptions) {
|
||||
return firstSome(
|
||||
this.oInterac.map(i => {
|
||||
return i.reply(content as InteractionReplyOptions).then(() => i.fetchReply());
|
||||
}),
|
||||
this.oMsg.map(m => {
|
||||
return m.reply(content as ReplyMessageOptions);
|
||||
}),
|
||||
)!;
|
||||
public reply(content: ReplyOptions) {
|
||||
return safeUnwrap(this.ctx
|
||||
.map( m => m.reply(content as string | MessageReplyOptions))
|
||||
.mapErr(i => i.reply(content as string | InteractionReplyOptions).then(() => i.fetchReply()))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,129 @@
|
||||
/**
|
||||
* @enum { number };
|
||||
* A bitfield that discriminates command modules
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default commandModule({
|
||||
* // highlight-next-line
|
||||
* type : CommandType.Text,
|
||||
* name : 'a text command'
|
||||
* execute(message) {
|
||||
* console.log(message.content)
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
enum CommandType {
|
||||
Text = 0b00000001,
|
||||
Slash = 0b00000010,
|
||||
MenuUser = 0b00000100,
|
||||
MenuMsg = 0b00001000,
|
||||
Button = 0b00010000,
|
||||
MenuSelect = 0b00100000,
|
||||
Modal = 0b01000000,
|
||||
Autocomplete = 0b10000000,
|
||||
Both = 0b0000011,
|
||||
export enum CommandType {
|
||||
/**
|
||||
* The CommandType for text commands
|
||||
*/
|
||||
Text = 1,
|
||||
/**
|
||||
* The CommandType for slash commands
|
||||
*/
|
||||
Slash = 2,
|
||||
/**
|
||||
* The CommandType for hybrid commands, text and slash
|
||||
*/
|
||||
Both = 3,
|
||||
/**
|
||||
* The CommandType for UserContextMenuInteraction commands
|
||||
*/
|
||||
CtxUser = 4,
|
||||
/**
|
||||
* The CommandType for MessageContextMenuInteraction commands
|
||||
*/
|
||||
CtxMsg = 8,
|
||||
/**
|
||||
* The CommandType for ButtonInteraction commands
|
||||
*/
|
||||
Button = 16,
|
||||
/**
|
||||
* The CommandType for StringSelectMenuInteraction commands
|
||||
*/
|
||||
StringSelect = 32,
|
||||
/**
|
||||
* The CommandType for ModalSubmitInteraction commands
|
||||
*/
|
||||
Modal = 64,
|
||||
/**
|
||||
* The CommandType for the other SelectMenuInteractions
|
||||
*/
|
||||
ChannelSelect = 256,
|
||||
MentionableSelect = 512,
|
||||
RoleSelect= 1024,
|
||||
UserSelect= 2048
|
||||
}
|
||||
|
||||
enum PluginType {
|
||||
Command = 0b01,
|
||||
Event = 0b10,
|
||||
/**
|
||||
* A bitfield that discriminates event modules
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default eventModule({
|
||||
* //highlight-next-line
|
||||
* type : EventType.Discord,
|
||||
* name : 'guildMemberAdd'
|
||||
* execute(member : GuildMember) {
|
||||
* console.log(member)
|
||||
* }
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
export enum EventType {
|
||||
/**
|
||||
* The EventType for handling discord events
|
||||
*/
|
||||
Discord = 1,
|
||||
/**
|
||||
* The EventType for handling sern events
|
||||
*/
|
||||
Sern = 2,
|
||||
/**
|
||||
* The EventType for handling external events.
|
||||
* Could be for example, `process` events, database events
|
||||
*/
|
||||
External = 3,
|
||||
}
|
||||
|
||||
export { CommandType, PluginType };
|
||||
/**
|
||||
* A bitfield that discriminates plugins
|
||||
* @enum { number }
|
||||
* @example
|
||||
* ```ts
|
||||
* export default function myPlugin() : EventPlugin<CommandType.Text> {
|
||||
* //highlight-next-line
|
||||
* type : PluginType.Event,
|
||||
* execute([ctx, args], controller) {
|
||||
* return controller.next();
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
export enum PluginType {
|
||||
/**
|
||||
* The PluginType for CommandPlugins
|
||||
*/
|
||||
Command = 1,
|
||||
/**
|
||||
* The PluginType for EventPlugins
|
||||
*/
|
||||
Event = 2,
|
||||
}
|
||||
/**
|
||||
* @enum { string }
|
||||
*/
|
||||
export enum PayloadType {
|
||||
/**
|
||||
* The PayloadType for a SernEmitter success event
|
||||
*/
|
||||
Success = 'success',
|
||||
/**
|
||||
* The PayloadType for a SernEmitter failure event
|
||||
*/
|
||||
Failure = 'failure',
|
||||
/**
|
||||
* The PayloadType for a SernEmitter warning event
|
||||
*/
|
||||
Warning = 'warning',
|
||||
}
|
||||
|
||||
@@ -1,7 +1,38 @@
|
||||
/**
|
||||
* @enum { string }
|
||||
*/
|
||||
export enum SernError {
|
||||
NonValidModuleType = 'Detected an unknown module type',
|
||||
UndefinedModule = `A module could not be detected at`,
|
||||
/**
|
||||
* Throws when registering an invalid module.
|
||||
* This means it is undefined or an invalid command type was provided
|
||||
*/
|
||||
InvalidModuleType = 'Detected an unknown module type',
|
||||
/**
|
||||
* Attempted to lookup module in command module store. Nothing was found!
|
||||
*/
|
||||
UndefinedModule = `A module could not be detected`,
|
||||
/**
|
||||
* Attempted to lookup module in command module store. Nothing was found!
|
||||
*/
|
||||
MismatchModule = `A module type mismatched with event emitted!`,
|
||||
/**
|
||||
* Unsupported interaction at this moment.
|
||||
*/
|
||||
NotSupportedInteraction = `This interaction is not supported.`,
|
||||
/**
|
||||
* One plugin called `controller.stop()` (end command execution / loading)
|
||||
*/
|
||||
PluginFailure = `A plugin failed to call controller.next()`,
|
||||
/**
|
||||
* A crash that occurs when accessing an invalid property of Context
|
||||
*/
|
||||
MismatchEvent = `You cannot use message when an interaction fired or vice versa`,
|
||||
/**
|
||||
* Unsupported feature attempted to access at this time
|
||||
*/
|
||||
NotSupportedYet = `This feature is not supported yet`,
|
||||
/**
|
||||
* Required Dependency not found
|
||||
*/
|
||||
MissingRequired = `@sern/client is required but was not found`
|
||||
}
|
||||
|
||||
38
src/handler/structures/events.ts
Normal file
38
src/handler/structures/events.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import type { SernEventsMapping } from '../../types/handler';
|
||||
import type {
|
||||
DiscordEmitterPlugin,
|
||||
DiscordEventPlugin,
|
||||
ExternalEmitterPlugin,
|
||||
ExternalEventPlugin,
|
||||
SernEmitterPlugin,
|
||||
SernEventPlugin,
|
||||
} from '../plugins/plugin';
|
||||
import type { Awaitable, ClientEvents } from 'discord.js';
|
||||
import type { EventType } from './enums';
|
||||
import type { Module } from '../../types/module';
|
||||
|
||||
|
||||
export interface SernEventCommand<T extends keyof SernEventsMapping = keyof SernEventsMapping> extends Module {
|
||||
name?: T;
|
||||
type: EventType.Sern;
|
||||
onEvent: SernEventPlugin[];
|
||||
plugins: SernEmitterPlugin[];
|
||||
execute(...args: SernEventsMapping[T]): Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface DiscordEventCommand<T extends keyof ClientEvents = keyof ClientEvents> extends Module {
|
||||
name?: T;
|
||||
type: EventType.Discord;
|
||||
onEvent: DiscordEventPlugin[];
|
||||
plugins: DiscordEmitterPlugin[];
|
||||
execute(...args: ClientEvents[T]): Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ExternalEventCommand extends Module {
|
||||
name?: string
|
||||
emitter: string;
|
||||
type: EventType.External;
|
||||
onEvent: ExternalEventPlugin[];
|
||||
plugins: ExternalEmitterPlugin[];
|
||||
execute(...args: unknown[]): Awaitable<unknown>;
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
import type {
|
||||
ApplicationCommandAttachmentOption,
|
||||
ApplicationCommandChannelOptionData,
|
||||
ApplicationCommandChoicesData,
|
||||
ApplicationCommandNonOptionsData,
|
||||
ApplicationCommandNumericOptionData,
|
||||
ApplicationCommandOptionData,
|
||||
ApplicationCommandSubCommandData,
|
||||
ApplicationCommandSubGroupData,
|
||||
Awaitable,
|
||||
BaseApplicationCommandOptionsData,
|
||||
ButtonInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalSubmitInteraction,
|
||||
SelectMenuInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import type { Args, Override } from '../../types/handler';
|
||||
import type { CommandPlugin, EventPlugin } from '../plugins/plugin';
|
||||
import type Context from './context';
|
||||
import { CommandType, PluginType } from './enums';
|
||||
import type { AutocompleteInteraction } from 'discord.js';
|
||||
import type { ApplicationCommandOptionType } from 'discord.js';
|
||||
|
||||
export interface BaseModule {
|
||||
type: CommandType | PluginType;
|
||||
name?: string;
|
||||
description: string;
|
||||
execute: (ctx: Context, args: Args) => Awaitable<void>;
|
||||
}
|
||||
|
||||
//possible refactoring types into interfaces and not types
|
||||
export type TextCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Text;
|
||||
onEvent: EventPlugin<CommandType.Text>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SlashCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Slash;
|
||||
onEvent: EventPlugin<CommandType.Slash>[];
|
||||
plugins: CommandPlugin[];
|
||||
options?: SernOptionsData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type BothCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Both;
|
||||
onEvent: EventPlugin<CommandType.Both>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
options?: SernOptionsData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type ContextMenuUser = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuUser;
|
||||
onEvent: EventPlugin<CommandType.MenuUser>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserContextMenuCommandInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ContextMenuMsg = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuMsg;
|
||||
onEvent: EventPlugin<CommandType.MenuMsg>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MessageContextMenuCommandInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ButtonCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Button;
|
||||
onEvent: EventPlugin<CommandType.Button>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ButtonInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type SelectMenuCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.MenuSelect;
|
||||
onEvent: EventPlugin<CommandType.MenuSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: SelectMenuInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type ModalSubmitCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Modal;
|
||||
onEvent: EventPlugin<CommandType.Modal>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ModalSubmitInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
// Autocomplete commands are a little different
|
||||
// They can't have command plugins as they are
|
||||
// in conjunction with chat input commands
|
||||
// TODO: possibly in future, allow Autocmp commands in separate files?
|
||||
export type AutocompleteCommand = Override<
|
||||
BaseModule,
|
||||
{
|
||||
type: CommandType.Autocomplete;
|
||||
name: string;
|
||||
onEvent: EventPlugin<CommandType.Autocomplete>[];
|
||||
execute: (ctx: AutocompleteInteraction) => Awaitable<void>;
|
||||
}
|
||||
>;
|
||||
|
||||
export type Module =
|
||||
| TextCommand
|
||||
| SlashCommand
|
||||
| BothCommand
|
||||
| ContextMenuUser
|
||||
| ContextMenuMsg
|
||||
| ButtonCommand
|
||||
| SelectMenuCommand
|
||||
| ModalSubmitCommand
|
||||
| AutocompleteCommand;
|
||||
|
||||
//https://stackoverflow.com/questions/64092736/alternative-to-switch-statement-for-typescript-discriminated-union
|
||||
// Explicit Module Definitions for mapping
|
||||
export type ModuleDefs = {
|
||||
[CommandType.Text]: TextCommand;
|
||||
[CommandType.Slash]: SlashCommand;
|
||||
[CommandType.Both]: BothCommand;
|
||||
[CommandType.MenuMsg]: ContextMenuMsg;
|
||||
[CommandType.MenuUser]: ContextMenuUser;
|
||||
[CommandType.Button]: ButtonCommand;
|
||||
[CommandType.MenuSelect]: SelectMenuCommand;
|
||||
[CommandType.Modal]: ModalSubmitCommand;
|
||||
[CommandType.Autocomplete]: AutocompleteCommand;
|
||||
};
|
||||
|
||||
//TODO: support deeply nested Autocomplete
|
||||
// objective: construct union of ApplicationCommandOptionData change any Autocomplete data
|
||||
// into Sern autocomplete data.
|
||||
|
||||
export type SernAutocompleteData = Override<
|
||||
BaseApplicationCommandOptionsData,
|
||||
{
|
||||
autocomplete: true;
|
||||
type:
|
||||
| ApplicationCommandOptionType.String
|
||||
| ApplicationCommandOptionType.Number
|
||||
| ApplicationCommandOptionType.Integer;
|
||||
command: Omit<AutocompleteCommand, 'type' | 'name' | 'description'>;
|
||||
}
|
||||
>;
|
||||
|
||||
/**
|
||||
* Type that just uses SernAutocompleteData and not regular autocomplete
|
||||
*/
|
||||
export type BaseOptions =
|
||||
| ApplicationCommandChoicesData
|
||||
| ApplicationCommandNonOptionsData
|
||||
| ApplicationCommandChannelOptionData
|
||||
| ApplicationCommandNumericOptionData
|
||||
| ApplicationCommandAttachmentOption
|
||||
| SernAutocompleteData;
|
||||
|
||||
export type SernSubCommandData = Override<
|
||||
Omit<BaseApplicationCommandOptionsData, 'required'>,
|
||||
{
|
||||
type: ApplicationCommandOptionType.Subcommand;
|
||||
options?: BaseOptions[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SernSubCommandGroupData = Override<
|
||||
Omit<BaseApplicationCommandOptionsData, 'required'>,
|
||||
{
|
||||
type: ApplicationCommandOptionType.SubcommandGroup;
|
||||
options?: SernSubCommandData[];
|
||||
}
|
||||
>;
|
||||
|
||||
export type SernOptionsData<U extends ApplicationCommandOptionData = ApplicationCommandOptionData> =
|
||||
U extends ApplicationCommandSubCommandData
|
||||
? SernSubCommandData
|
||||
: U extends ApplicationCommandSubGroupData
|
||||
? SernSubCommandGroupData
|
||||
: BaseOptions;
|
||||
26
src/handler/structures/moduleStore.ts
Normal file
26
src/handler/structures/moduleStore.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import type { CommandModule } from '../../types/module';
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
|
||||
/**
|
||||
* Storing all command modules
|
||||
* This dependency is usually injected into ModuleManager
|
||||
*/
|
||||
export class ModuleStore {
|
||||
readonly BothCommands = new Map<string, CommandModule>();
|
||||
readonly ApplicationCommands = {
|
||||
[ApplicationCommandType.User]: new Map<string, CommandModule>(),
|
||||
[ApplicationCommandType.Message]: new Map<string, CommandModule>(),
|
||||
[ApplicationCommandType.ChatInput]: new Map<string, CommandModule>(),
|
||||
};
|
||||
readonly ModalSubmit = new Map<string, CommandModule>();
|
||||
readonly TextCommands = new Map<string, CommandModule>();
|
||||
readonly InteractionHandlers = {
|
||||
[ComponentType.Button]: new Map<string, CommandModule>(),
|
||||
[ComponentType.StringSelect]: new Map<string, CommandModule>(),
|
||||
[ComponentType.ChannelSelect] : new Map<string, CommandModule>(),
|
||||
[ComponentType.MentionableSelect] : new Map<string, CommandModule>(),
|
||||
[ComponentType.RoleSelect] : new Map<string, CommandModule>(),
|
||||
[ComponentType.UserSelect] : new Map<string, CommandModule>(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,28 +1,10 @@
|
||||
import Context from './context';
|
||||
import type {
|
||||
BothCommand,
|
||||
Module,
|
||||
SlashCommand,
|
||||
TextCommand,
|
||||
SernOptionsData,
|
||||
BaseOptions,
|
||||
SernAutocompleteData,
|
||||
SernSubCommandData,
|
||||
SernSubCommandGroupData,
|
||||
} from './module';
|
||||
import type Wrapper from './wrapper';
|
||||
import { ModuleStore } from './moduleStore';
|
||||
|
||||
export * from './enums';
|
||||
export {
|
||||
Context,
|
||||
SlashCommand,
|
||||
TextCommand,
|
||||
BothCommand,
|
||||
Module,
|
||||
Wrapper,
|
||||
SernOptionsData,
|
||||
BaseOptions,
|
||||
SernAutocompleteData,
|
||||
SernSubCommandData,
|
||||
SernSubCommandGroupData,
|
||||
ModuleStore
|
||||
};
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
import type { Client } from 'discord.js';
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../../types/handler';
|
||||
import type SernEmitter from '../sernEmitter';
|
||||
import type { Dependencies } from '../../types/handler';
|
||||
|
||||
/**
|
||||
* An object to be passed into Sern.Handler constructor.
|
||||
* An object to be passed into Sern#init() function.
|
||||
* @typedef {object} Wrapper
|
||||
* @property {readonly Client} client
|
||||
* @property {readonly string} defaultPrefix
|
||||
* @property {readonly string} commands
|
||||
* @prop { readonly DiscordEvent[] } events
|
||||
*/
|
||||
interface Wrapper {
|
||||
readonly client: Client;
|
||||
readonly sernEmitter?: SernEmitter;
|
||||
readonly defaultPrefix?: string;
|
||||
readonly commands: string;
|
||||
readonly events?: (DiscordEvent | EventEmitterRegister)[];
|
||||
readonly events?: string;
|
||||
readonly containerConfig : {
|
||||
get: (...keys: (keyof Dependencies)[]) => unknown[];
|
||||
}
|
||||
}
|
||||
|
||||
export default Wrapper;
|
||||
|
||||
9
src/handler/utilities/arrAsync.ts
Normal file
9
src/handler/utilities/arrAsync.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { Awaitable } from 'discord.js';
|
||||
|
||||
export async function arrAsync<T>(promiseLike: Awaitable<T>[]): Promise<T[]> {
|
||||
const arr: T[] = [];
|
||||
for await (const el of promiseLike) {
|
||||
arr.push(el);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
/**
|
||||
* This function denotes usage of decorated method is external
|
||||
* Also, makes method appear 'used' in IDEs
|
||||
* @param _target
|
||||
* @param _propertyKey
|
||||
* @param _descriptor
|
||||
* @constructor
|
||||
*/
|
||||
export function ExternallyUsed(
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_target: unknown,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_propertyKey: string,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_descriptor: PropertyDescriptor,
|
||||
) {
|
||||
return void 0;
|
||||
}
|
||||
42
src/handler/utilities/functions.ts
Normal file
42
src/handler/utilities/functions.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import * as Files from './readFile';
|
||||
import { basename } from 'path';
|
||||
import { Err, Ok, Result } from 'ts-results-es';
|
||||
import { Observable, of, switchMap } from 'rxjs';
|
||||
/**
|
||||
* A function that returns whatever value is provided.
|
||||
* Used for singleton in iti
|
||||
* @param value
|
||||
*/
|
||||
export const _const = <T>(value: T) => () => value;
|
||||
/**
|
||||
* A function that returns another function
|
||||
* Used for transient in iti
|
||||
* @param value
|
||||
*/
|
||||
export const transient = <T>( value : T) => () => _const(value);
|
||||
|
||||
export function nameOrFilename(modName: string | undefined, absPath: string) {
|
||||
return modName ?? Files.fmtFileName(basename(absPath));
|
||||
}
|
||||
|
||||
//function wrappers for empty ok / err
|
||||
export const ok = _const(Ok.EMPTY);
|
||||
export const err = _const(Err.EMPTY);
|
||||
|
||||
|
||||
export function partition<T, V>(arr: (T & V)[], condition: (e: (T & V)) => boolean) : [T[], V[]] {
|
||||
const t : T[] = [];
|
||||
const v : V[] = [];
|
||||
for(const el of arr) {
|
||||
if(condition(el)) {
|
||||
t.push(el as T);
|
||||
} else {
|
||||
v.push(el as V);
|
||||
}
|
||||
}
|
||||
return [ t, v ];
|
||||
}
|
||||
|
||||
export function reducePlugins(src: Observable<Result<void, void>[]>) : Observable<boolean> {
|
||||
return src.pipe(switchMap(s => of(s.every((a) => a.ok))));
|
||||
}
|
||||
@@ -1,28 +1,5 @@
|
||||
import type { Message } from 'discord.js';
|
||||
|
||||
/**
|
||||
* Checks if the author of message is a bot or not
|
||||
* @param message The message to check
|
||||
* @returns `true` if the author of the message is a bot, `false` otherwise
|
||||
* @example
|
||||
* isBot(message) ? 'yes it is a bot' : 'no it is not a bot';
|
||||
*/
|
||||
export function isNotFromBot(message: Message) {
|
||||
return !message.author.bot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the message **starts** with the prefix
|
||||
* @param message The message to check
|
||||
* @param prefix The prefix to check for
|
||||
* @returns `true` if the message starts with the prefix, `false` otherwise
|
||||
* @example
|
||||
* hasPrefix(message, '!') ? 'yes it does' : 'no it does not';
|
||||
*/
|
||||
export function hasPrefix(message: Message, prefix?: string) {
|
||||
return message.content.startsWith(prefix!);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the first character(s) _[depending on prefix length]_ of the message
|
||||
* @param msg
|
||||
|
||||
@@ -1,54 +1,23 @@
|
||||
import type { Module, ModuleDefs } from '../structures/module';
|
||||
import type {
|
||||
Awaitable,
|
||||
ButtonInteraction,
|
||||
ChatInputCommandInteraction,
|
||||
CommandInteraction,
|
||||
MessageComponentInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
SelectMenuInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
} from 'discord.js';
|
||||
import type { DiscordEvent, EventEmitterRegister } from '../..';
|
||||
import type { DiscordEventCommand, ExternalEventCommand, SernEventCommand } from '../structures/events';
|
||||
import { CommandModule, EventType } from '../..';
|
||||
import type { AnyModule, CommandModuleDefs, EventModule } from '../../types/module';
|
||||
|
||||
export function correctModuleType<T extends keyof ModuleDefs>(
|
||||
plug: Module | undefined,
|
||||
export function correctModuleType<T extends keyof CommandModuleDefs>(
|
||||
plug: AnyModule | undefined,
|
||||
type: T,
|
||||
): plug is ModuleDefs[T] {
|
||||
): plug is CommandModuleDefs[T] {
|
||||
// Another way to check if type is equivalent,
|
||||
// It will check based on flag system instead
|
||||
return plug !== undefined && (plug.type & type) !== 0;
|
||||
}
|
||||
|
||||
export function isChatInputCommand(i: CommandInteraction): i is ChatInputCommandInteraction {
|
||||
return i.isChatInputCommand();
|
||||
}
|
||||
|
||||
export function isButton(i: MessageComponentInteraction): i is ButtonInteraction {
|
||||
return i.isButton();
|
||||
export function isDiscordEvent(el: EventModule | CommandModule): el is DiscordEventCommand {
|
||||
return el.type === EventType.Discord;
|
||||
}
|
||||
|
||||
export function isSelectMenu(i: MessageComponentInteraction): i is SelectMenuInteraction {
|
||||
return i.isSelectMenu();
|
||||
export function isSernEvent(el: EventModule | CommandModule): el is SernEventCommand {
|
||||
return el.type === EventType.Sern;
|
||||
}
|
||||
|
||||
export function isMessageCtxMenuCmd(
|
||||
i: CommandInteraction,
|
||||
): i is MessageContextMenuCommandInteraction {
|
||||
return i.isMessageContextMenuCommand();
|
||||
}
|
||||
|
||||
export function isUserContextMenuCmd(
|
||||
i: CommandInteraction,
|
||||
): i is UserContextMenuCommandInteraction {
|
||||
return i.isUserContextMenuCommand();
|
||||
}
|
||||
|
||||
export function isPromise<T>(promiseLike: Awaitable<T>): promiseLike is Promise<T> {
|
||||
const keys = new Set(Object.keys(promiseLike));
|
||||
return keys.has('then') && keys.has('catch');
|
||||
}
|
||||
|
||||
export function isDiscordEvent(el: DiscordEvent | EventEmitterRegister): el is DiscordEvent {
|
||||
return el.length === 2;
|
||||
export function isExternalEvent(el: EventModule | CommandModule): el is ExternalEventCommand {
|
||||
return el.type === EventType.External && 'emitter' in el;
|
||||
}
|
||||
|
||||
@@ -1,27 +1,10 @@
|
||||
import { ApplicationCommandType, ComponentType } from 'discord.js';
|
||||
import { readdirSync, statSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { from, Observable } from 'rxjs';
|
||||
import type { Module } from '../structures/module';
|
||||
import { type Observable, from, concatAll } from 'rxjs';
|
||||
import { SernError } from '../structures/errors';
|
||||
import { type Result, Err, Ok } from 'ts-results-es';
|
||||
|
||||
//Maybe move this? this probably doesnt belong in utlities/
|
||||
export const BothCommands = new Map<string, Module>();
|
||||
export const ApplicationCommands = {
|
||||
[ApplicationCommandType.User]: new Map<string, Module>(),
|
||||
[ApplicationCommandType.Message]: new Map<string, Module>(),
|
||||
[ApplicationCommandType.ChatInput]: new Map<string, Module>(),
|
||||
} as { [K in ApplicationCommandType]: Map<string, Module> };
|
||||
|
||||
export const MessageCompCommands = {
|
||||
[ComponentType.Button]: new Map<string, Module>(),
|
||||
[ComponentType.SelectMenu]: new Map<string, Module>(),
|
||||
[ComponentType.TextInput]: new Map<string, Module>(),
|
||||
};
|
||||
export const TextCommands = {
|
||||
text: new Map<string, Module>(),
|
||||
aliases: new Map<string, Module>(),
|
||||
};
|
||||
export const ModalSubmitCommands = new Map<string, Module>();
|
||||
// Courtesy @Townsy45
|
||||
function readPath(dir: string, arrayOfFiles: string[] = []): string[] {
|
||||
try {
|
||||
@@ -45,17 +28,36 @@ export const fmtFileName = (n: string) => n.substring(0, n.length - 3);
|
||||
* @param commandDir
|
||||
*/
|
||||
|
||||
export function buildData(commandDir: string): Observable<{
|
||||
mod: Module;
|
||||
absPath: string;
|
||||
}> {
|
||||
export function buildData<T>(commandDir: string): Observable<
|
||||
Result<
|
||||
{
|
||||
mod: T;
|
||||
absPath: string;
|
||||
},
|
||||
SernError
|
||||
>
|
||||
> {
|
||||
const commands = getCommands(commandDir);
|
||||
return from(
|
||||
getCommands(commandDir).map(absPath => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
const mod = <Module>require(absPath).default;
|
||||
return { mod, absPath };
|
||||
}),
|
||||
);
|
||||
Promise.all(
|
||||
commands.map(async absPath => {
|
||||
let mod: T | undefined;
|
||||
try {
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
mod = require(absPath).default;
|
||||
} catch {
|
||||
mod = (await import(`file:///` + absPath)).default;
|
||||
}
|
||||
if (mod === undefined) {
|
||||
return Err(SernError.UndefinedModule);
|
||||
}
|
||||
try {
|
||||
mod = new (mod as unknown as new () => T)();
|
||||
} catch {}
|
||||
return Ok({ mod, absPath });
|
||||
}),
|
||||
),
|
||||
).pipe(concatAll());
|
||||
}
|
||||
|
||||
export function getCommands(dir: string): string[] {
|
||||
|
||||
42
src/handler/utilities/treeSearch.ts
Normal file
42
src/handler/utilities/treeSearch.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
||||
import type { SernAutocompleteData, SernOptionsData } from '../../types/module';
|
||||
|
||||
export default function treeSearch(
|
||||
iAutocomplete: AutocompleteInteraction,
|
||||
options: SernOptionsData[] | undefined,
|
||||
): SernAutocompleteData | undefined {
|
||||
if (options === undefined) return undefined;
|
||||
const _options = options.slice(); // required to prevent direct mutation of options
|
||||
let autocompleteData: SernAutocompleteData | undefined;
|
||||
|
||||
while (_options.length > 0) {
|
||||
const cur = _options.pop()!;
|
||||
switch (cur.type) {
|
||||
case ApplicationCommandOptionType.Subcommand:
|
||||
{
|
||||
for (const option of cur.options ?? []) {
|
||||
_options.push(option);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ApplicationCommandOptionType.SubcommandGroup:
|
||||
{
|
||||
for (const command of cur.options ?? []) {
|
||||
_options.push(command);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
if (cur.autocomplete) {
|
||||
const choice = iAutocomplete.options.getFocused(true);
|
||||
if (cur.name === choice.name && cur.autocomplete) {
|
||||
autocompleteData = cur;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return autocompleteData;
|
||||
}
|
||||
@@ -1,4 +1,11 @@
|
||||
import SernEmitter from './handler/sernEmitter';
|
||||
export { eventModule, commandModule, EventExecutable, CommandExecutable } from './handler/sern';
|
||||
export * as Sern from './handler/sern';
|
||||
export * from './types/handler';
|
||||
export * from './types/module';
|
||||
export * from './handler/structures/structxports';
|
||||
export * from './handler/plugins/plugin';
|
||||
export * from './handler/contracts/index';
|
||||
export { SernEmitter };
|
||||
export { _const as single, transient as many } from './handler/utilities/functions';
|
||||
export { useContainerRaw } from './handler/dependencies/provider';
|
||||
@@ -1,7 +1,12 @@
|
||||
import type { Awaitable, ClientEvents, CommandInteractionOptionResolver } from 'discord.js';
|
||||
import type { CommandInteractionOptionResolver } from 'discord.js';
|
||||
import type { PayloadType } from '../handler/structures/enums';
|
||||
import type { InteractionReplyOptions, MessageReplyOptions } from 'discord.js';
|
||||
import type { EventEmitter } from 'events';
|
||||
export type Nullish<T> = T | undefined | null;
|
||||
|
||||
import type { CommandModule, EventModule, AnyModule } from './module';
|
||||
import type { UnpackFunction } from 'iti';
|
||||
import type { ErrorHandling, Logging, ModuleManager } from '../handler/contracts';
|
||||
import type { ModuleStore } from '../handler/structures/moduleStore';
|
||||
import type SernEmitter from '../handler/sernEmitter';
|
||||
// Thanks to @kelsny
|
||||
export type ParseType<T> = {
|
||||
[K in keyof T]: T[K] extends unknown ? [k: K, args: T[K]] : never;
|
||||
@@ -9,30 +14,44 @@ export type ParseType<T> = {
|
||||
|
||||
export type Args = ParseType<{ text: string[]; slash: SlashOptions }>;
|
||||
|
||||
export type DiscordEvent = ParseType<{
|
||||
[K in keyof ClientEvents]: (...args: ClientEvents[K]) => Awaitable<void>;
|
||||
}>;
|
||||
export type EventEmitterRegister = [
|
||||
emitter: EventEmitter,
|
||||
k: string,
|
||||
cb: (...args: unknown[]) => Awaitable<void>,
|
||||
];
|
||||
|
||||
export type SlashOptions = Omit<CommandInteractionOptionResolver, 'getMessage' | 'getFocused'>;
|
||||
|
||||
// Source: https://dev.to/vborodulin/ts-how-to-override-properties-with-type-intersection-554l
|
||||
export type Override<T1, T2> = Omit<T1, keyof T2> & T2;
|
||||
|
||||
export type DefinitelyDefined<T, K> = T & Override<T, K>;
|
||||
|
||||
type Reconstruct<T> = T extends Omit<infer O, infer _> ? O & Reconstruct<O> : T;
|
||||
|
||||
type IsOptional<T> = {
|
||||
[K in keyof T]-?: T[K] extends Required<T>[K] ? false : true;
|
||||
/**
|
||||
* After modules are transformed, name and description are given default values if none
|
||||
* are provided to Module. This type represents that transformation
|
||||
*/
|
||||
export type DefinedCommandModule = CommandModule & { name: string; description: string };
|
||||
export type DefinedEventModule = EventModule & { name: string };
|
||||
export type AnyDefinedModule = DefinedCommandModule | DefinedEventModule
|
||||
export type Payload =
|
||||
| { type: PayloadType.Success; module: AnyModule }
|
||||
| { type: PayloadType.Failure; module?: AnyModule; reason: string | Error }
|
||||
| { type: PayloadType.Warning; reason: string};
|
||||
export type SernEventsMapping = {
|
||||
'module.register': [Payload];
|
||||
'module.activate': [Payload];
|
||||
'error': [Payload];
|
||||
'warning': [Payload];
|
||||
};
|
||||
export type LogPayload<T = unknown> = { message: T }
|
||||
export type Singleton<T> = () => T
|
||||
export type Transient<T> = () => () => T;
|
||||
|
||||
export type UnionToIntersection<T> = (T extends unknown ? (x: T) => unknown : never) extends (
|
||||
x: infer R,
|
||||
) => unknown
|
||||
? R
|
||||
: never;
|
||||
export interface Dependencies {
|
||||
'@sern/client': Singleton<EventEmitter>;
|
||||
'@sern/logger'?: Singleton<Logging>;
|
||||
'@sern/emitter': Singleton<SernEmitter>;
|
||||
'@sern/store' : Singleton<ModuleStore>;
|
||||
'@sern/modules' : Singleton<ModuleManager>;
|
||||
'@sern/errors': Singleton<ErrorHandling>;
|
||||
}
|
||||
|
||||
export type ReplyOptions = string | Omit<InteractionReplyOptions, 'fetchReply'> | MessageReplyOptions;
|
||||
|
||||
export type MapDeps<
|
||||
Deps extends Dependencies,
|
||||
T extends readonly unknown[]
|
||||
> = T extends [infer First extends keyof Deps, ...infer Rest extends readonly unknown[]]
|
||||
? [ UnpackFunction<Deps[First]>, ...(MapDeps<Deps, Rest> extends [never] ? [] : MapDeps<Deps,Rest>)] : [never]
|
||||
//Basically, '@sern/client' | '@sern/store' | '@sern/modules' | '@sern/error' | '@sern/emitter' will be provided defaults, and you can exclude the rest
|
||||
export type OptionalDependencies = '@sern/logger';
|
||||
215
src/types/module.ts
Normal file
215
src/types/module.ts
Normal file
@@ -0,0 +1,215 @@
|
||||
import type {
|
||||
ApplicationCommandAttachmentOption,
|
||||
ApplicationCommandChannelOptionData,
|
||||
ApplicationCommandChoicesData,
|
||||
ApplicationCommandNonOptionsData,
|
||||
ApplicationCommandNumericOptionData,
|
||||
ApplicationCommandOptionData,
|
||||
ApplicationCommandOptionType,
|
||||
ApplicationCommandSubCommandData,
|
||||
ApplicationCommandSubGroupData,
|
||||
AutocompleteInteraction,
|
||||
Awaitable,
|
||||
BaseApplicationCommandOptionsData,
|
||||
ButtonInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalSubmitInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
ChannelSelectMenuInteraction,
|
||||
MentionableSelectMenuInteraction,
|
||||
RoleSelectMenuInteraction,
|
||||
StringSelectMenuInteraction
|
||||
} from 'discord.js';
|
||||
import type {
|
||||
DiscordEventCommand,
|
||||
ExternalEventCommand,
|
||||
SernEventCommand,
|
||||
} from '../handler/structures/events';
|
||||
import { CommandType } from '../handler/structures/enums';
|
||||
import type { Args, SlashOptions } from './handler';
|
||||
import type Context from '../handler/structures/context';
|
||||
import type { AutocompletePlugin, CommandPlugin, EventPlugin } from '../handler/plugins/plugin';
|
||||
import { EventType } from '../handler/structures/enums';
|
||||
import type { UserSelectMenuInteraction } from 'discord.js';
|
||||
|
||||
export interface Module {
|
||||
type?: CommandType | EventType;
|
||||
name?: string;
|
||||
description?: string;
|
||||
execute: (...args: any[]) => any
|
||||
}
|
||||
|
||||
export interface TextCommand extends Module {
|
||||
type: CommandType.Text;
|
||||
onEvent: EventPlugin<CommandType.Text>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
execute: (ctx: Context, args: ['text', string[]]) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface SlashCommand extends Module {
|
||||
type: CommandType.Slash;
|
||||
onEvent: EventPlugin<CommandType.Slash>[];
|
||||
plugins: CommandPlugin[];
|
||||
options?: SernOptionsData[];
|
||||
execute: (ctx: Context, args: ['slash', SlashOptions]) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface BothCommand extends Module {
|
||||
type: CommandType.Both;
|
||||
onEvent: EventPlugin<CommandType.Both>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
options?: SernOptionsData[];
|
||||
execute: (ctx: Context, args: Args) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ContextMenuUser extends Module {
|
||||
type: CommandType.CtxUser;
|
||||
onEvent: EventPlugin<CommandType.CtxUser>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserContextMenuCommandInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ContextMenuMsg extends Module {
|
||||
type: CommandType.CtxMsg;
|
||||
onEvent: EventPlugin<CommandType.CtxMsg>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MessageContextMenuCommandInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ButtonCommand extends Module {
|
||||
type: CommandType.Button;
|
||||
onEvent: EventPlugin<CommandType.Button>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ButtonInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface StringSelectCommand extends Module {
|
||||
type: CommandType.StringSelect;
|
||||
onEvent: EventPlugin<CommandType.StringSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: StringSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ChannelSelectCommand extends Module {
|
||||
type: CommandType.ChannelSelect;
|
||||
onEvent: EventPlugin<CommandType.ChannelSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ChannelSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface RoleSelectCommand extends Module {
|
||||
type: CommandType.RoleSelect;
|
||||
onEvent: EventPlugin<CommandType.RoleSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: RoleSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface MentionableSelectCommand extends Module {
|
||||
type: CommandType.MentionableSelect;
|
||||
onEvent: EventPlugin<CommandType.MentionableSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MentionableSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface UserSelectCommand extends Module {
|
||||
type: CommandType.UserSelect;
|
||||
onEvent: EventPlugin<CommandType.UserSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ModalSubmitCommand extends Module {
|
||||
type: CommandType.Modal;
|
||||
onEvent: EventPlugin<CommandType.Modal>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ModalSubmitInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface AutocompleteCommand extends Module {
|
||||
name?: never;
|
||||
description?: never;
|
||||
type?: never;
|
||||
onEvent: AutocompletePlugin[];
|
||||
execute: (ctx: AutocompleteInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export type EventModule = DiscordEventCommand | SernEventCommand | ExternalEventCommand;
|
||||
export type CommandModule =
|
||||
| TextCommand
|
||||
| SlashCommand
|
||||
| BothCommand
|
||||
| ContextMenuUser
|
||||
| ContextMenuMsg
|
||||
| ButtonCommand
|
||||
| StringSelectCommand
|
||||
| MentionableSelectCommand
|
||||
| UserSelectCommand
|
||||
| ChannelSelectCommand
|
||||
| RoleSelectCommand
|
||||
| ModalSubmitCommand;
|
||||
|
||||
export type AnyModule = CommandModule | EventModule;
|
||||
|
||||
//https://stackoverflow.com/questions/64092736/alternative-to-switch-statement-for-typescript-discriminated-union
|
||||
// Explicit Module Definitions for mapping
|
||||
export type CommandModuleDefs = {
|
||||
[CommandType.Text]: TextCommand;
|
||||
[CommandType.Slash]: SlashCommand;
|
||||
[CommandType.Both]: BothCommand;
|
||||
[CommandType.CtxMsg]: ContextMenuMsg;
|
||||
[CommandType.CtxUser]: ContextMenuUser;
|
||||
[CommandType.Button]: ButtonCommand;
|
||||
[CommandType.StringSelect]: StringSelectCommand;
|
||||
[CommandType.RoleSelect] : RoleSelectCommand;
|
||||
[CommandType.ChannelSelect] : ChannelSelectCommand;
|
||||
[CommandType.MentionableSelect] : MentionableSelectCommand;
|
||||
[CommandType.UserSelect] : UserSelectCommand;
|
||||
[CommandType.Modal]: ModalSubmitCommand;
|
||||
};
|
||||
|
||||
export type EventModuleDefs = {
|
||||
[EventType.Sern]: SernEventCommand;
|
||||
[EventType.Discord]: DiscordEventCommand;
|
||||
[EventType.External]: ExternalEventCommand;
|
||||
};
|
||||
|
||||
export interface SernAutocompleteData extends Omit<BaseApplicationCommandOptionsData, 'autocomplete'> {
|
||||
autocomplete: true;
|
||||
type:
|
||||
| ApplicationCommandOptionType.String
|
||||
| ApplicationCommandOptionType.Number
|
||||
| ApplicationCommandOptionType.Integer;
|
||||
command: AutocompleteCommand;
|
||||
}
|
||||
|
||||
/**
|
||||
* Type that replaces autocomplete with {@link SernAutocompleteData}
|
||||
*/
|
||||
export type BaseOptions =
|
||||
| ApplicationCommandChoicesData
|
||||
| ApplicationCommandNonOptionsData
|
||||
| ApplicationCommandChannelOptionData
|
||||
| ApplicationCommandNumericOptionData
|
||||
| ApplicationCommandAttachmentOption
|
||||
| SernAutocompleteData;
|
||||
|
||||
export interface SernSubCommandData extends BaseApplicationCommandOptionsData {
|
||||
type: ApplicationCommandOptionType.Subcommand;
|
||||
required?: never;
|
||||
options?: BaseOptions[];
|
||||
}
|
||||
|
||||
export interface SernSubCommandGroupData extends BaseApplicationCommandOptionsData {
|
||||
type: ApplicationCommandOptionType.SubcommandGroup;
|
||||
required?: never;
|
||||
options?: SernSubCommandData[];
|
||||
}
|
||||
|
||||
export type SernOptionsData<U extends ApplicationCommandOptionData = ApplicationCommandOptionData> =
|
||||
U extends ApplicationCommandSubCommandData
|
||||
? SernSubCommandData
|
||||
: U extends ApplicationCommandSubGroupData
|
||||
? SernSubCommandGroupData
|
||||
: BaseOptions;
|
||||
0
test/cjs/src/index.ts
Normal file
0
test/cjs/src/index.ts
Normal file
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"experimentalDecorators": true,
|
||||
"resolveJsonModule": true,
|
||||
"target": "esnext",
|
||||
"module": "commonjs",
|
||||
"outDir": "dist",
|
||||
@@ -11,11 +9,12 @@
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"importsNotUsedAsValues": "error",
|
||||
"baseUrl": ".",
|
||||
"resolveJsonModule": true,
|
||||
"moduleResolution": "node",
|
||||
"skipLibCheck": true,
|
||||
"declaration": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"exclude": ["node_modules", "tests", "dist"],
|
||||
"include": ["src"],
|
||||
}
|
||||
"include": ["src/secrets.json", "src"]
|
||||
}
|
||||
0
test/esm/src/index.ts
Normal file
0
test/esm/src/index.ts
Normal file
20
test/esm/tsconfig.json
Normal file
20
test/esm/tsconfig.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"outDir": "dist",
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"importsNotUsedAsValues": "error",
|
||||
"baseUrl": ".",
|
||||
"resolveJsonModule": true,
|
||||
"moduleResolution": "node",
|
||||
"skipLibCheck": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"include": ["src/secrets.json", "src"]
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import { fmt, hasPrefix, isNotFromBot } from '../src/handler/utilities/messageHelpers';
|
||||
|
||||
describe('FUNCTIONS', () => {
|
||||
test('If hasPrefix is a function', () => {
|
||||
expect(typeof hasPrefix).toBe('function');
|
||||
});
|
||||
test('if fmt is a function', () => {
|
||||
expect(typeof fmt).toBe('function');
|
||||
});
|
||||
test('if isBot is a function', () => {
|
||||
expect(typeof isNotFromBot).toBe('function');
|
||||
});
|
||||
});
|
||||
18
tsconfig-base.json
Normal file
18
tsconfig-base.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"noImplicitAny": true,
|
||||
"experimentalDecorators": true,
|
||||
"strictNullChecks": true,
|
||||
"importsNotUsedAsValues": "error",
|
||||
"moduleResolution": "node",
|
||||
"skipLibCheck": true,
|
||||
"declaration": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"exclude": ["node_modules", "dist"],
|
||||
"include": ["src"]
|
||||
}
|
||||
8
tsconfig-cjs.json
Normal file
8
tsconfig-cjs.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "./tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"outDir": "dist/cjs",
|
||||
"target": "esnext"
|
||||
}
|
||||
}
|
||||
8
tsconfig-esm.json
Normal file
8
tsconfig-esm.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "./tsconfig-base.json",
|
||||
"compilerOptions": {
|
||||
"module": "esnext",
|
||||
"outDir": "dist/esm",
|
||||
"target": "esnext"
|
||||
}
|
||||
}
|
||||
38
tsup.config.js
Normal file
38
tsup.config.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import { defineConfig } from 'tsup';
|
||||
const shared = {
|
||||
entry: ['src/index.ts'],
|
||||
external: ['discord.js'],
|
||||
platform: 'node',
|
||||
clean: true,
|
||||
sourcemap: false
|
||||
};
|
||||
export default defineConfig([
|
||||
{
|
||||
format: 'esm',
|
||||
target: 'node16',
|
||||
tsconfig: './tsconfig-esm.json',
|
||||
outDir: './dist/esm',
|
||||
external: ['discord.js'],
|
||||
treeshake: true,
|
||||
outExtension() {
|
||||
return {
|
||||
js: '.mjs',
|
||||
};
|
||||
},
|
||||
...shared
|
||||
},
|
||||
{
|
||||
format: 'cjs',
|
||||
splitting: false,
|
||||
external: ['discord.js'],
|
||||
target: 'node16',
|
||||
tsconfig: './tsconfig-cjs.json',
|
||||
outDir: './dist/cjs',
|
||||
outExtension() {
|
||||
return {
|
||||
js: '.cjs',
|
||||
};
|
||||
},
|
||||
...shared
|
||||
},
|
||||
]);
|
||||
Reference in New Issue
Block a user