├── .commitlintrc.json ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github ├── CODE_OF_CONDUCT.md ├── COMMIT_CONVENTION.md ├── CONTRIBUTING.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── PULL_REQUEST_TEMPLATE.md ├── SUPPORT.md ├── labels.yml ├── tsc.json └── workflows │ ├── deploy.yml │ ├── labelsync.yml │ └── test.yml ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .lintstagedrc.json ├── .npmrc ├── .prettierrc.json ├── .versionrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── babel.config.js ├── docs ├── README.md └── index.yml ├── examples ├── README.md ├── UNLICENSE ├── basic │ ├── README.md │ ├── adapter.ts │ └── basic-example.ts ├── music-bot │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── auth.example.json │ ├── package.json │ ├── src │ │ ├── bot.ts │ │ └── music │ │ │ ├── subscription.ts │ │ │ └── track.ts │ ├── tsconfig.eslint.json │ └── tsconfig.json ├── radio-bot │ ├── .gitignore │ ├── README.md │ ├── config.example.json │ ├── index.js │ └── package.json └── recorder │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── auth.example.json │ ├── package.json │ ├── recordings │ └── .gitkeep │ ├── src │ ├── bot.ts │ ├── createListeningStream.ts │ ├── deploy.ts │ └── interactions.ts │ ├── tsconfig.eslint.json │ └── tsconfig.json ├── jest.config.js ├── package-lock.json ├── package.json ├── scripts ├── docs.mjs └── postbuild.mjs ├── src ├── DataStore.ts ├── VoiceConnection.ts ├── __mocks__ │ └── ws.js ├── __tests__ │ ├── DataStore.test.ts │ ├── VoiceConnection.test.ts │ └── joinVoiceChannel.test.ts ├── audio │ ├── AudioPlayer.ts │ ├── AudioPlayerError.ts │ ├── AudioResource.ts │ ├── PlayerSubscription.ts │ ├── TransformerGraph.ts │ ├── __tests__ │ │ ├── AudioPlayer.test.ts │ │ ├── AudioResource.test.ts │ │ └── TransformerGraph.test.ts │ └── index.ts ├── index.ts ├── joinVoiceChannel.ts ├── networking │ ├── Networking.ts │ ├── VoiceUDPSocket.ts │ ├── VoiceWebSocket.ts │ ├── __tests__ │ │ ├── VoiceUDPSocket.test.ts │ │ └── VoiceWebSocket.test.ts │ └── index.ts ├── receive │ ├── AudioReceiveStream.ts │ ├── SSRCMap.ts │ ├── SpeakingMap.ts │ ├── VoiceReceiver.ts │ ├── __tests__ │ │ ├── AudioReceiveStream.test.ts │ │ ├── SSRCMap.test.ts │ │ ├── SpeakingMap.test.ts │ │ ├── VoiceReceiver.test.ts │ │ └── fixtures │ │ │ └── rtp.ts │ └── index.ts └── util │ ├── Secretbox.ts │ ├── __tests__ │ ├── Secretbox.test.ts │ ├── abortAfter.test.ts │ ├── demuxProbe.test.ts │ └── entersState.test.ts │ ├── abortAfter.ts │ ├── adapter.ts │ ├── demuxProbe.ts │ ├── entersState.ts │ ├── generateDependencyReport.ts │ ├── index.ts │ └── util.ts ├── tsconfig.eslint.json ├── tsconfig.json └── tsup.config.ts /.commitlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@commitlint/config-angular"], 3 | "rules": { 4 | "scope-case": [2, "always", "pascal-case"], 5 | "type-enum": [ 6 | 2, 7 | "always", 8 | [ 9 | "chore", 10 | "build", 11 | "ci", 12 | "docs", 13 | "feat", 14 | "fix", 15 | "perf", 16 | "refactor", 17 | "revert", 18 | "style", 19 | "test", 20 | "types", 21 | "workflow", 22 | "wip" 23 | ] 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.d.ts 2 | examples 3 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": "marine/prettier/node", 4 | "parserOptions": { 5 | "project": "./tsconfig.eslint.json", 6 | "extraFileExtensions": [".mjs"] 7 | }, 8 | "rules": { 9 | "no-redeclare": 0, 10 | "@typescript-eslint/naming-convention": 0 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to make participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | - Using welcoming and inclusive language 18 | - Being respectful of differing viewpoints and experiences 19 | - Gracefully accepting constructive criticism 20 | - Focusing on what is best for the community 21 | - Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | - The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | - Trolling, insulting/derogatory comments, and personal or political attacks 28 | - Public or private harassment 29 | - Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | - Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies within all project spaces, and it also applies when 49 | an individual is representing the project or its community in public spaces. 50 | Examples of representing a project or community include using an official 51 | project e-mail address, posting via an official social media account, or acting 52 | as an appointed representative at an online or offline event. Representation of 53 | a project may be further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at https://discord.gg/djs. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /.github/COMMIT_CONVENTION.md: -------------------------------------------------------------------------------- 1 | ## Git Commit Message Convention 2 | 3 | > This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular). 4 | 5 | #### TL;DR: 6 | 7 | Messages must be matched by the following regex: 8 | 9 | ```js 10 | /^(revert: )?(feat|fix|docs|style|refactor|perf|test|workflow|build|ci|chore|types|wip)(\(.+\))?: .{1,72}/; 11 | ``` 12 | 13 | #### Examples 14 | 15 | Appears under "Features" header, `GuildMember` subheader: 16 | 17 | ``` 18 | feat(GuildMember): add 'tag' method 19 | ``` 20 | 21 | Appears under "Bug Fixes" header, `Guild` subheader, with a link to issue #28: 22 | 23 | ``` 24 | fix(Guild): handle events correctly 25 | 26 | close #28 27 | ``` 28 | 29 | Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation: 30 | 31 | ``` 32 | perf(core): improve patching by removing 'bar' option 33 | 34 | BREAKING CHANGE: The 'bar' option has been removed. 35 | ``` 36 | 37 | The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header. 38 | 39 | ``` 40 | revert: feat(Managers): add Managers 41 | 42 | This reverts commit 667ecc1654a317a13331b17617d973392f415f02. 43 | ``` 44 | 45 | ### Full Message Format 46 | 47 | A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**: 48 | 49 | ``` 50 | (): 51 | 52 | 53 | 54 |