The description currently says that fetching returns all users on the reaction. This is incorrect, as there is an API limit of 100 users per fetch. This PR changes the description to better match the actual behavior.
This commit adds support for the `afk_channel_id`, `afk_timeout`, and
`system_channel_id` parameters in the
[create guild](https://discord.com/developers/docs/resources/guild#create-guild-json-params)
endpoint by adding the `afkChannelID`, `afkTimeout`, and
`systemChannelID` options in `GuildManager#create`.
This commit also fixes a minor bug in `create` when specifying types for
the channels due to the channel types not being changed from `'text'`,
`'voice'` etc to the corresponding numbers, so Discord would return an
error.
The docs example was incorrect, as the parameter is called `updated` but was later referenced as `guild`. This PR fixes that by changing it to `updated` to match other examples, such as `setRegion()`
* feat(DataResolver): prefer streams over buffers
* feat(DataResolver): add `resolveFileAsBuffer`
Add `resolveFileAsBuffer` to use it in `resolveImage` which still requires Buffers to work.
* fix(DataResolver): make sure `resolveFile` always returns a Promise
* refactor(DataResolver): use for-await-of
* fix(DataResolver): use forked form-data which supports custom streams
* fix(APIRequest): use forked form-data in code too
Co-authored-by: - <5144598+-@users.noreply.github.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* docs(RoleManager) : fix jsdoc everyone role can't be null
It fixes the jsdoc of RoleManager ; the everyone role of a guild can't be null
* Everyone role can't be null
* fix(typings): mark RoleManager#everyone as non-null
Co-authored-by: Crawl <icrawltogo@gmail.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* docs(MessageMentionTypes): correct type
* docs(MessageMentionTypes): change role to roles
* docs(MessageMentionOptions): correct description to allow usage as an array
* remove unneeded part of description
Co-Authored-By: Ryan Munro <rsm999@uowmail.edu.au>
* docs: add DisableMentionType to remove literal string types
Co-authored-by: Ryan Munro <rsm999@uowmail.edu.au>
* feat(Allowed Mentions): Add support for new Allowed Mentions message options
* fix(docs): Update JSDoc for feature
* fix(apimessage): translate the propery into snake_case
* fix(typings): message mention options should be optional
* fix(docs): jsdoc typings for MessageMentionOptions
* fix(mentions): use Resolvables for MessageMentionOptions
* fix(docs): typedef for MessageMentionTypes
* Update typings/index.d.ts
Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com>
* fix(mentions): drop support for Resolvables
* fix(AllowedMentions): remove the whole resolve function
* fix(docs): revert change to Resolvables
Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
* (docs) Fixed phrasing of docs
Added permission needed to edit a member's voice state and adjusted docs to say **"Disconnect"** instead of **"Kicking"** the member.
* fixed line length on 156
* fix(GuildMemberRoleManager): type error should mention that Role or Snowflake are fine too
* fix(GuildMemberRoleManager): comma instead of 'or'
* style: break long line
* fix(MessageEmbed): Add skipValidation flag to MessageEmbed
* fix(MessageEmbed): Use skipValidation flag in Message
* fix(MessageEmbed): Restore static normalizeField(s) methods
* fix(MessageEmbed): Update typings for constructor
* fix(MessageEmbed): Remove private docstrings/typings
* fix(MessageEmbed): Use skipValidation without storing in instance
* fix(MessageEmbed): skipValidation without modifying normalizeFields
* fix(MessageEmbed): Revert indentation change in typings
* fix(MessageEmbed): Clone logic from normalizeFields (duplicated code ftw)
* revert(MessageEmbed): remove dead code / breaking change
- dead code
discord.js does not use those methods interally and won't in the future, as Discord
does not emit any partial embed updates and doing so in the future seems unlikely.
- a breaking change (an incompatible api change)
Although it's not recommended to do, users can modify
received embeds without cloning them, e.g.:
const embed = message.embeds[0].addField('some title', '');
(replace '' with some function call; this is just an example)
This would no longer throw a synchronous error (breaking change),
but at a later point when actually sending it. (poorer to debug)
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* refactor channel types
* really weird solution to make what the PR promises possible, I might revert this
* undo the dumb attempt
* Update index.d.ts
* fix GuildCreateChannelOptions#type
* fix(typings): remove initializers from the enum
* Update index.d.ts
Co-authored-by: Crawl <icrawltogo@gmail.com>
* User input sanitation: reimplement disableEveryone into disableMentions
* Change default value of ClientOptions#disableMentions to 'none'
* Update type declarations of disableMentions to include default
* update for compliance with ESLint
* Overlooked these files. Updated for complete compliance with ESLint
* feat: add options.withPresences to fetch()
feat: update presences if present on received data
typings: add user & withPresences to FetchMembersOptions
fix: checking for added options
ref: qol changes to return type
so that all members are fetched
oopsie
* fix: use Manager.cache
* fix(typings): tslint error
Co-authored-by: Crawl <icrawltogo@gmail.com>
* cleanup(StreamDispatcher): remove old 'end' event
* fix(StreamDispatcher): only listen to finish event once
* refactor(VoiceWebSocket): use `connection.client` in favour of `connection.voiceManager.client`
* fix(VoiceWebSocket): use `client.clearInterval` in favour of `clearInterval`
* refactor: destructure EventEmitter
* refactor: destructure EventEmitter from events
* refactor: use EventEmitter.off in favour of EventEmitter.removeListener
* style: order typings alphabetically
* oops
* fix indent
* style: alphabetically organize imports
* style: remove extra line
* Revert "style: remove extra line"
This reverts commit 96e182ed69.
* Revert "style: alphabetically organize imports"
This reverts commit 02aee9b06d.
* Revert "refactor: destructure EventEmitter from events"
This reverts commit 9953b4d267.
* Revert "refactor: destructure EventEmitter"
This reverts commit 930d7751ab.
* Revert "fix(StreamDispatcher): only listen to finish event once"
This reverts commit 485a6430a8.
* refactor: use .removeListener instead of .off
* add ClientOptions#disableMentions and MessageOptions#disableMentions
* provide tests
* don't sanitize controlled mentions
* add @here mentions to tests
* fix indents (6 spaces instead of 8)
* add Util#cleanContent tests
* add typings for removeMentions
* replace @ with @\u200b AFTER cleaning content as suggested instead of using removeMentions
* better explanation of this option
* no newline in Util.removeMentions
* fix long line
* remove double space
* remove comments (change has been reverted)
* Use Util.removeMentions to remove mentions
* use Util.removeMentions in Util.cleanContent
* Add GuildEmoji to GuildResolvable
* Add GuildEmoji to GuildResolvable
* Add Invite to GuildResolvable
* Add Invite to GuildResolvable
* oops
* oops x2
* Add Guild#fetchBan and an error for not resolving the ID
* typings
* Revert "Add Guild#fetchBan and an error for not resolving the ID"
This reverts commit a4d0ed16e7.
* Revert "typings"
This reverts commit 5a54e88785.
* fix jsdoc
* add trailing comma
* feat/fix(GuildAuditLogs): handle new event types
* fix(GuildAuditLogsEntry): coerce to numbers, simplify extra for deleted entities
* fix(GuildAuditLogsEntry): do not revert 'type' extra
* typings(MessageEmebd): fix typings for addFields
* fix: add missing semicolon
* docs(MessageEmbed): fix various types
* in accordance with the scope of the PR
* Update src/structures/MessageEmbed.js
Co-Authored-By: SpaceEEC <spaceeec@yahoo.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
- Change GuildEditData#systemChannelFlags to use SystemChannelFlagsResolvable
- Move SystemChannelFlagsResolvable outside of class definition to make the docs generator happy
* feat: splice multiple fields
* remove MessageEmbed#spliceField
* add MessageEmbed#spliceFields
* to behave more like Array#splice
* and allow multiple fields to be replaced/inserted
* update typings accordingly
* refactor: rename check to normalize
* check suggests boolean return type
* feat: allow spread args or array as field input
* rewrite: replace addField in favor of addFields
* typings: account for changes
* chore: bump min node to 11.0.0
* for Array#flat
* fix: bump min-node in package engines field
* remove addBlankField
* update message after fetching if it is partial
* suggested changes
Co-Authored-By: SpaceEEC <spaceeec@yahoo.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* docs: Clarify what zlib-sync does
* docs: Update docs site welcome
* src/docs: Remove `ws.compress` from docs
This is a deprecated parameter and you shouldn't use it unless you have zlib-sync installed, and even then, compression is automatically enabled
* docs: Apply suggestion
Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com>
Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
* BaseManager#valueOf should return cache
* Update Util#flatten to handle valueOf being a Collection
* Update Util.js - typo
Co-Authored-By: Amish Shah <amishshah.2k@gmail.com>
Co-authored-by: Amish Shah <amishshah.2k@gmail.com>
* Initial commit: add 5 initial managers
- Base manager
- GuildChannelManager
- MessageManager
- PresenceManager
- Reaction Manager
- Added LimitedCollection
* Add GuildEmojiManager, various fixes
* Modify some managers and add guildmembermanager
* Initial integration
* Delete old stores
* Integration part two, removed LRUCollection
- Most of the integration has been finished
- TODO typings
- Removed LRUCollection, needless sweeping
* Typings + stuff i somehow missed in ChannelManager
* LimitedCollection typings/ final changes
* Various jsdoc and syntactical fixes, Removed Util.mixin()
* tslint fix
* Grammatical and logical changes
* Delete temporary file placed by mistake
* Grammatical changes
* Add missing type
* Update jsdoc examples
* fix: ChannelManager#remove should call cache#delete not cache#remove
* fix recursive require
* Fix missed cache in util
* fix: more missed cache
* Remove accidental _fetchMany change from #3645
* fix: use .cache.delete() over .remove()
* fix: missing cache in ReactionCollector
* fix: missed cache in client
* fix: members is a collection not a manager
Co-Authored-By: Sugden <28943913+NotSugden@users.noreply.github.com>
* fix: various docs and cache fixes
* fix: missed cache
* fix: missing _roles
* Final testing and debugging
* LimitedCollection: return the Collection instead of undefined on .set
* Add cache to BaseManager in typings
* Commit fixes i forgot to stage yesterday
* Update invite events
* Account for new commit
* fix: MessageReactionRemoveAll should call .cache.clear()
* fix: add .cache at various places, correct return type
* docs: remove mentions of 'store'
* Add extra documented properties to typings
Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* src: Fix up WebSocketShard errors
* typings: Forgot to update
* src: Forgot debug variable
* src: Fix issue Bella found
If the WS was not connected when the HELLO timeout passes
(CONNECTING, etc), the shard would get stuck
due to never rejecting the WebSocketShard#connect
Promise with the DESTROYED event
* Add support for MessageReaction#remove and MESSAGE_REACTION_REMOVE_EMOJI
* Remove reaction from cache
Co-Authored-By: matthewfripp <50251454+matthewfripp@users.noreply.github.com>
* fix: message may be partial
* Clarify what the event entails
* Document client in MessageReaction
Co-Authored-By: SpaceEEC <spaceeec@yahoo.com>
* await the REST call
* Add MessageReaction#remove to typings
Co-authored-by: matthewfripp <50251454+matthewfripp@users.noreply.github.com>
Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
* Add support for new Invite events
* Merge typings for events
Co-Authored-By: Sugden <leoaustin675@gmail.com>
* Add warning about requiring permissions
* Null check channel and guild
* fix: .guilds not .channels
* docs(MessageMentions): channels are actually in order
* docs(MessageMentions): readd info about order for channels
* docs(MessageMentions): reword info to account for rtl locales
* feat(Presence): add support for multiple activites
* typings(Presence): fix spelling of 'activities'
Co-Authored-By: Amish Shah <amishshah.2k@gmail.com>
Co-authored-by: Amish Shah <amishshah.2k@gmail.com>
* src: Cleanup event listeners on WebSocket connections
Should prevent #3641 from happening, as well as double connections on a shard
* typings: Forgot to add the method
* types(VoiceBroadcast): add subscribers property
* types(VoiceBroadcast): change player property to private
Co-Authored-By: Amish Shah <amishshah.2k@gmail.com>
Co-authored-by: Amish Shah <amishshah.2k@gmail.com>
* fix(BitField): remove for..in in favor of Object.keys
* refactor: do not re-resolve bits
Co-Authored-By: bdistin <bdistin@gmail.com>
Co-authored-by: bdistin <bdistin@gmail.com>
* Create config.yml
Instead of making an entire new page with just text talking about the discord server (which they could ignore, as most people don't read), just link people directly to the discord server
* Delete question---general-support-request.md
* feat: Widen GuildResolvable to include GuildChannel and GuildMember
* docs: Documented the new overloads
Co-Authored-By: Gryffon Bellish <owenbellish@gmail.com>
Co-authored-by: Gryffon Bellish <owenbellish@gmail.com>
* src: Step 1 of who knows how many
* src: Remove accidentally committed test file
* src: Remove useless added property in package.json
* docs: Trailing spaces, come back >.>
* src: Buhbye uws, we will miss you..not!
* src: Move 'auto' shard selection from totalShardCount to shards
* src: tweak
* src: Filter out floats from shard IDs
You want half of a shard or what?
* src: Misc cleanup and bugfix for GUILD_BAN_ADD
* src: Rewrite checkReady
* src: Misse this while merging master into my branch
* typings: Bring these up to date
* typings: Forgot allReady event
* src: Don't checkReady if the shard isn't waiting for guilds
* src: Fix a possible bug for when the ws dies and the session becomes -1
* src: Hopefully fix last edge case that could case a shard to infinitely boot loop
* src: Rename totalShardCount to shardCount
* src: Small bugfix
* src: Correct error message for shardCount being imvalid
Co-Authored-By: bdistin <bdistin@gmail.com>
* src: Small tweaks
* src: If this doesn't fix the issues I'm gonna throw a brick at my PC
* src: I swear, STOP BREAKING
* src: *groans at a certain snake*
* src: Use undefined instead of null on destroy in close event
Setting it to null sets the close code to null, which causes a WebSocket error to be thrown. The error is thrown from WebSocket, although there is no connection alive. Fun times!
* src: @SpaceEEC's requested changes
* src: Remove zucc from discord.js
Discord is removing support for it, sooo... Bye bye
* src: Missed this
* src: Apply @kyranet's suggestions
Co-Authored-By: Antonio Román <kyradiscord@gmail.com>
* src: @kyranet's suggestions
* src: Remove pako, update debug messages
- Pako is officially gone from both enviroments
Install zlib-sync on node.js if you want it
- Improve a few debug messages some more
- Discover that internal sharding works in browsers but please don't do that
* Start/Stop speaking using incomming UDP packets
* Fix ESLint errors
* Updates for styling consistency
Co-Authored-By: Gryffon Bellish <owenbellish@gmail.com>
* Minor improvements
* Acutally use previousTimeout
* Use BaseClient setTimeout and refresh()
* Update README to match node version for refresh()
* Update comment to match startSpeaking
* Correctly report Priority bit
* Fix ESlint errors
* Added Store and NewsChannel to exports
Added the StoreChannel and NewsChannel structures to the module exports.
* keeping the list in alphabetical order
I moved the StoreChannel and NewsChannel exports that I added in the last commit in their right position to keep things alphabetized.
* adds more audit-log entries
this adds additional audit-log types from https://discordapp/discord-api-docs/pull/1191
* typings for new audit-log entries
* typings for new audit-log entries
* fix action numbers
* test
* test 2
* update
* update
* replaced double quotes
* Made message.guild and message.member nullable
* replaced double quotes again (oops)
* missing semicolons
* removed fetch from Omit
* Added Partialize generic type
* Created interfaces (prettier intellisense)
* joinedAt/joinedTimestamp are nullable and fixed conflict
* src: Update channel pattern
* src: Remove useless non-capture group
* src: it's as though we're starting fresh
* src: Bring this up to date for reals now
* src: typings and a bug fix
* src: Add crossposted channels to message mentions
* src: Requested changes and add typings
* src: Move Object.keys outside loop
* typings: Fix enum being exported when it shouldn't
* src: Consistency with roles and users
* docs: Correct docstring for MessageFlags#flags
* docs: Correct docstring for MessageMentions#crosspostedChannels
* docs: Suggestions
Co-authored-by: SpaceEEC
* src: Reset flags to 0 if no flags are received on MESSAGE_UPDATE
* Use external collection package
* Complete typings
* Document properly base collection class
* Add clone since sort is now in-place
* Update for latest changes to package
* Fix whitespace
* Update docs link
* Oops
* Update Collection.js
* Update index.d.ts
* add Util.parseVerification()
* Made the code much cleaner.
* Removed method and created constant.
* Lint!
* refactor(constants): capitalize VerficiationLevels and add a typedef
* Changed VerificationLevels typedef to singular.
Co-Authored-By: Will Nelson <will@wnelson.xyz>
* Add new method Permissions#any
* Update src/util/BitField.js
This is much better
Co-Authored-By: bdistin <bdistin@gmail.com>
* Remove unreachable code
* Gotta keep the linter happy
* Apply bdistin suggested change to both methods
* fix(typings): DataStore#resolve & DataStore#resolveID can also return null.
* fix(typings): DataStore#remove returns a boolean, not void.
Co-Authored-By: izexi <43889168+izexi@users.noreply.github.com>
* added DARK_MODE_INVISIBLE
added another constant color that makes embeds appear invisible on DARK mode.
* travis likes trailing commas
* fix: ref issue: #3414
* fix: removed a random color
* Small changes to parseEmoji regex
I just made a small change to the parseEmoji regex, this change will make an invalid emoji, like `<aname:id>` return as null, before this change it would return as an animated emoji because the name started with an `a` which would result in false positives, then the `?` I added to the end of `(\d{17,19})?` is used if someone provided an emoji as `:name:` or `a:name:` it will return the correct values but have an invalid id.
* Update Util.js
2nd Update: I changed the regex to output the results if you provide `<aemoji:123456789012345678>` and <:aemoji:123456789012345678>` which will output `{ animated: false, name: "aemoji", id: "123456789012345678" }` or `<:emojiname:>` which outputs `{ animated: false, name: "emojiname", id: null }` or `<a:emoji:>` which would output `{ animated: true, name: "emoji", id: null }`. Before this PR the method would return that the emoji was animated if you provided something like `<anemojiname:emoji_id>` because the name started with an `a`.
* Making Util.splitMessage always return an array
Util.splitMessage sometimes returns an array, but other times it returns a string. This should make it so that it always returns an array.
* jsdoc
Co-Authored-By: TNThacker2015 <37024464+TNThacker2015@users.noreply.github.com>
* docs(Util): remove superfluous space in docstring
* wip refactor
* add escapeMarkdown tests
* italics can be done with a single underscore too
* more refined
* fix test name
* unnecessary eslint ignores
* use jest
* make eslint less annoying in this test file
* more testing
* fix lib usage
* more tests and a small fix
* Implement idle feature
* Add typings
* Minimal fixes
* Make everything in Collector and not attached to ReactionCollector
* set this._idletimeout to null when collector ends
* also set this._timeout to null when collector ends
* basic teams support
* export Team & TeamMember
* use typedef
* typings and some fixes
* Update src/structures/TeamMember.js
Co-Authored-By: Vlad Frangu <kingdgrizzle@gmail.com>
* fix Team#iconURL()
* fix typings and a bug
* fix states start at 1
* team icon hash can be null
* fix owner typings
* Update TextChannel.js
Update `setRateLimitPerUser` description to specify the `number` is in seconds, per the Discord docs
* Update TextChannel.js
Add unit to the rateLimitPerUser property
* Update GuildChannel.js
* Update StreamDispatcher.js
Specify unit for `StreamDispatcher.pausedTime`
* Update TextChannel.js
Update `setRateLimitPerUser` description to specify the `number` is in seconds, per the Discord docs
* Update TextChannel.js
Add unit to the rateLimitPerUser property
* Update GuildChannel.js
* Disambiguate the description of <client>.channels
Although not explicitly said, the current wording makes it seem like all channels are cached and available at any time in this store. Hopefully this variation makes it a bit clearer.
* make more explicit (I think)
* remove trailing white spaces
* feat(voice): kick members from voice channels
* fix(VoiceState): improve stability in checking for client user
* feat(VoiceState): add setChannel for moving/kicking members
* update typings
* remove duplicated methods across GuildMember and VoiceState
member.setDeaf => member.voice.setDeaf
member.setMute => member.voice.setMute
member.setVoiceChannel => member.voice.setChannel
* src: Implement store and news channels!
* src: Remove code dupe
* src: Add missing guild properties
* docs: Add a small notice that the channel type may also change
* src: Remove re-creation of the MessageStore
* lint: Unused Import
* src: Requested changes for StoreChannels
* typings: Fix typings
* src: Moar guild updates
* src: Set maximumPresence to the data prop, the already existent one, or default to 5000
* typings: afkChannel is a VC
I keep confusing them, ffs
Co-Authored-By: vladfrangu <kingdgrizzle@gmail.com>
* docs: Document that maximumMembers and maximumPresences may be inaccurate before fetching
* src Appels requested changes
* add a public alternative to the private raw event
while retaining raw for use in debugging privately
* only emit dispatch packets
* requested changes
TIL, that's neat
* fix padding
* requested changes
* Update WebSocketManager.js
* Update welcome.md
Update node version requirement, npm install links, docs links, made a note that the guide is for stable and added a new link to the WIP update guide.
* docs(welcome.md): put notice for wip update guild on its own line
* docs(welcome.md): indent own line
* docs(README.md): apply the same changes here
* docs: document constructors of extendible structures
* docs(ClientPresence): document default value for data parameter
Co-Authored-By: SpaceEEC <spaceeec@yahoo.com>
* docs(Presence): document default value for data parameter
Co-Authored-By: SpaceEEC <spaceeec@yahoo.com>
* docs(DMChannel): capitalize DM in the constructor doc
* fix end method in VoiceBroadcast
this.client is a ClientVoiceManager and thus its this.client.broadcasts instead of this.client.voice.broascasts
* revert the voicebroadcast and pass this.client at clientvoice
* passed this.client
* docs: make voice public
* typings: Update typings to match the docs
* typings: ClientVoiceManager is nullable in Client
Co-Authored-By: vladfrangu <kingdgrizzle@gmail.com>
* typings: Mark client as readonly
Co-Authored-By: vladfrangu <kingdgrizzle@gmail.com>
* src: Make the client readonly
* src: Remove Client#voiceConnections getter in favor of ClientVoiceManager#connections
* src: WIP Internal Sharding refactor
* src: Refactor unavailable guild check
Co-Authored-By: kyranet <kyradiscord@gmail.com>
* src: More WIP Code
F in the chat to the old manager
* src: It should work but Discord says no.
Seriously why is this not working!
* fix: Inflator causing issues
* src: Finishing touches and typings
* misc: Proper debug message
* fix: Making things hidden needs writable: true as well
* fix: Sharding allowing multiple of the same shard, negative shards or strings
* fix: Again... edge cases
I love you guys .w.
* misc: Touchups
* misc: Better error?
* docs: Typo
* typings: Requested changes
* src: Requested changes
* src: Fix issues, validate provided shard options and more
* src: Forgot to remove the listener
* lint: eslint complaining
* fix: Setting shardCount to auto crashing the process
* misc: Requested changes
* typings: Correct typings for shardCount client option
* typings: Add invalidSession event to the shard and correct typings
* src: Minor docs adjustements, and code consistency between setHelloTimeout and setHeartbeatTimeout
* src: Don't block reconnect while creating shards
Might fix silent disconnects *again*
* src: Prevent reconnect from running if the Manager isn't READY
That way, if a shard dies while we're still spawning, it won't cause issues
* fix: Retry to reconnect if there's a network error going on.
The manager *should* keep reconnecting unless the token is invalid
* src: Enhance onClose handler for shards in the manager
- If the close code is between 1000 and 2000 (inclusive), you cannot resume
I tested this locally
- If there's a session ID still present, immediately try to resume
Faster resumes :papaBless:
Otherwise, the invalid session event will trigger and it'll handle accordingly
I swear if I see a SINGULAR Silent DC I'm yeeting
* src: Fix error check
* src: Make sure message exists on the error
* src: Used the wrong property for the shardQueue
* src: Make the hello timeout be made by the client
god help
* docs: Correct docs for WSEvents
* misc: Remove old events from the Events constant
* src: Throw the HTTP error if we don't get a 401
* typings: Can't forget about them
* src: Implement some more fail safes just in case
Seriously, better safe than sorry! Gotta failproof it completely
* edit shouldn't remove content
If undefined is passed to the api, content isn't removed in such a case where you are only editing the embed.
* fix a related doc string
* update typings
* requested changes
* Remove GroupDMChannels
they sparked no joy
* Start partials for message deletion
* MessageUpdate partials
* Add partials as an opt-in client option
* Add fetch() to Message
* Message.author should never be undefined
* Fix channels being the wrong type
* Allow fetching channels
* Refactor and add reaction add partials
* Reaction remove partials
* Check for emoji first
* fix message fetching
janky
* User partials in audit logs
* refactor overwrite code
* guild member partials
* partials as a whitelist
* document GuildMember#fetch
* fix: check whether a structure is a partial, not whether cache is true
* typings: Updated for latest commit (#3075)
* partials: fix messageUpdate behaviour (now "old" message can be partial)
* partials: add warnings and docs
* partials: add partials to index.yml
* partials: tighten "partial" definitions
* partials: fix embed-only messages counting as partials
* chore(deps): Updated all required, peer, and development dependencies
And engines.node to require 10
* chore(peerDeps): Updated uws to 11.149.1
Clarified my doubts with iCrawl
* fix: Sharding bugs, silent disconnects and cleanup code
* typings
* fix: Destroy connecting with close code different from 1000
Per `If a client does not receive a heartbeat ack between its attempts at sending heartbeats, it should immediately terminate the connection with a non-1000 close code, reconnect, and attempt to resume.`
* misc: Wait x ms before reconnecting
Per https://discordapp.com/developers/docs/topics/gateway#resuming
* docs
* nit: docs
* misc: Prevent multiple calls to WebSocketManager#destroy
* fix: Implement destroying if you reset the token
* misc: Clear the WS packet queue on WebSocketShard#destroy
You can't send those packets anywhere anymore, so no point in keeping them
* fix: Handle session limits when reconnecting a full shard, cleanup
* misc: No need to create a new shard instance
* fix: closeSequence being null, thus emitting null on Client#resumed
* misc: Remove GUILD_SYNC Gateway handler and add missing dot to string
* misc: Close WS with code 4000 if we didn't get a heartbeat in time
As said in the Discord API server
* fix: Handle ready emitting in onPacket
Doesn't allow broken packets
* misc: Close the connection if Discord asks for a reconnect
Prevents double triggers
* testing: Prevent multiple reconnect attempts on a shard
Should fix some issues some people have had.
* fix: Prevent multiple reconnect calls on the shard, re-use conn to identify, remove reconnect function
Note: Closing the WS with 1000 makes the session invalid
* misc: Forgot to remove 2 unneeded setters
* docs: Wrong param docstring for WebSocketShard#destroy
* misc: Set status to reconnecting after destroying
* misc: Close connection with code 1000 on session invalidated
Allows us to cleanup the shard and do a full reconnect
Also remove identify wait delay, not used anywhere
* fix: Fix zlib crash on node
And with that, the PR is done!
* misc: Implement a reconnect queue
And that is all there was to be done in this PR.
Shards now queue up for a reconnect
* nit: Debug the queue after destroying
* docs: Make the invalidated event clearer
* lint: I'm good at my job
* docs
* docs: Make description for isReconnectingShards accurate
*can I stop finding issues, this PR is meant to be done*
* misc: Remove shard from bind params
* misc: Code re-ordering and cleanup
Resumes do not need to be queued up, as they do not count to the identify limit, and after some testing, they don't have the 5 second delay required, like in identify
* fix: Issues with token regeneration and shards not properly handling them
We close the ws connection with code 1000 if we get an invalid session payload,
that way we can queue the reconnects and handle any issues
* misc: Remove useless delays on session invalidated
They get handled by the rest of the code already
* lint
* misc: reset the sequence on Shard#destroy
This especially is a problem if you need to re-identify, as the sequence doesn't get set to the current one,
causing the sequence to be wrong
* fix: GitHub rebase and minor tweak
* Implement a 15 second timeout if shards don't connect till then
Should prevent shards that never reconnect
* revert: Make WebSocketShard#send and WebSocketManager#broadcast public
* typings: Set type to void instead of undefined
* docs: Requested Changes
- Fixed a bug where `GuildMemberRoleStore#{add,remove}` would create a rejected promise inside a promise, instead of rejecting the first one.
- Fixed a bug where `GuildMember#edit` with a specified unknown channel would throw synchronously, instead of rejecting asynchronously.
* feat({Role,Channel}Store): fetch method
* docs: Add usage examples to the new methods
* misc: Add note of why we are fetching all roles even for a single one
This PR attempts to fix the reported resumed event count in the debug output (where it is always displayed only as 1 event replayed) and in the emitted `resumed` event, where it passed the current sequence instead of passing the actual replayed event count (which was an utopic high number for smaller bots on resume).
* fix(Util): throw an explicit error if a chunk exceeds the max length
* refactor(Util): consolidate both errors in splitMessage into one
* revert(Messages): do not unnecessarily change the error code
* revert(Messages): do not remove the word 'the'
* Add explicit error to setting invalid voice channel
* restrict to guild
Co-Authored-By: Darqam <anhim2@gmail.com>
* add a more explicit error and channel type check
* bad tab
* fix: Sharding causing constant heartbeat / identify spam
* misc: Remove wait param in connect
* misc: Wait 2.5 seconds before sending identify again if session is resumable
* misc: Remove useless destroy call
* nit: Capitalization
* fix: Identify on HELLO not connectionOpen
* misc: Add different intervals for identify after invalid session
- 2500 if we couldn't resume in time
- 5000 if we didn't have a session ID (per the docs on identify, that a client can only connect every 5 seconds)
- Otherwise, just identify again
* misc: Only clear heartbeat if shard is fully dead
Reconnect clears it otherwise
* fix: Accessing .length on a Collection
* internal sharding
* ready event
* the square deal
* the new deal
* the second new deal
* add actual documentation
* the new freedom
* the great society
* federal intervention
* some of requested changes
* i ran out of things to call these
* destroy this
* fix: Client#uptime went missing
* fix(Client): destroy the client on login failure
This may happen duo invalid sharding config / invalid token / user requested destroy
* fix(Client): reject login promise when the client is destroyed before ready
* fix(WebSocketManager): remove redundancy in destroy method (#2491)
* typo(ErrorMessages): duo -> duo to
* typo(ErrorMessages): duo -> due
* fix: docs and options
* docs(WebSocketManager): WebSockethard -> WebSocketShard (#2502)
* fix(ClientUser): lazily load to account for extended user structure (#2501)
* docs(WebSocketShard): document class to make it visible in documentation (#2504)
* fix: WebSocketShard#reconnect
* fix: presenceUpdate & userUpdate
* presenceUpdate wasn't really being handled at all
* userUpdate handled incorrectly because as of v7 in the Discord API, it comes inside presenceUpdate
* re-add raw event
* member is now part of message create payload
* feat: Add functionality to support multiple servers with different shards (#2395)
* Added functionallity to spawn multiple sharding managers due to adding start and end shards
* Small fixes and limiting shard amount to max recommended
* Forgot a check in spawn()
* Fixed indentation
* Removed optiosn object documentation for totalShards
* More fixes and a check that the startShard + amount doesnt go over the recommended shard amount
* fix getting max recommended
* Removed async from constructor (my fault)
* Changed start and end shard to a shardList or "auto" + fixed some brainfarts with isNaN
* Changed the loop and totalShard count calculation
* shards are actually 0 based
* Fixed a problem with the gateway and handled some range errors and type errors
* Changed Number.isNan to isNaN and changed a few Integer checks to use Number.isInteger
* Added check if shardList contains smth greater than totalShards; made spawn use totalShards again; shardList will be ignored and rebuild if totalShards is 'auto'; fixed docs
* ShardingManager#spawn now uses a for..of loop; fixed the if statement inside the new for..of loop to still work as intended; made the totalShards be set to a new amount if smth manual is put into ShardingManager#spawn just like before; Fixed some spelling
* internal sharding
* ready event
* the square deal
* the new deal
* the second new deal
* add actual documentation
* the new freedom
* the great society
* federal intervention
* some of requested changes
* i ran out of things to call these
* destroy this
* fix: Client#uptime went missing
* fix(Client): destroy the client on login failure
This may happen duo invalid sharding config / invalid token / user requested destroy
* fix(Client): reject login promise when the client is destroyed before ready
* fix(WebSocketManager): remove redundancy in destroy method (#2491)
* typo(ErrorMessages): duo -> duo to
* typo(ErrorMessages): duo -> due
* fix: docs and options
* docs(WebSocketManager): WebSockethard -> WebSocketShard (#2502)
* fix(ClientUser): lazily load to account for extended user structure (#2501)
* docs(WebSocketShard): document class to make it visible in documentation (#2504)
* fix: WebSocketShard#reconnect
* fix: presenceUpdate & userUpdate
* presenceUpdate wasn't really being handled at all
* userUpdate handled incorrectly because as of v7 in the Discord API, it comes inside presenceUpdate
* Internal Sharding adaptation
Adapted to internal sharding
Fixed a bug where non ready invalidated sessions wouldnt respawn
* Fixed shardCount not retrieving
* Fixing style
removed unnecessary parenthesis
* Fixing and rebasing
lets hope i didnt dun hecklered it
* Fixing my own retardation
* Thanks git rebase
* fix: assigning member in message create payload
* fix: resumes
* fix: IS wont give up reconnecting now
* docs: add missing docs mostly
* fix: found lost methods
* fix: WebSocketManager#broadcast check if shard exists
* fix: ShardClientUtil#id returning undefined
* feat: handle new session rate limits (#2796)
* feat: handle new session rate limits
* i have no idea what i was doing last night
* fix if statement weirdness
* fix: re-add presence parsing from ClientOptions (#2893)
* resolve conflicts
* typings: missing typings
* re-add missing linter rule
* fix: replacing ClientUser wrongly
* address unecessary performance waste
* docs: missing disconnect event
* fix(typings): Fix 2 issues with typings (#2909)
* (Typings) Update typings to reflect current ClientOptions
* fix(Typings) fixes a bug with Websockets and DOM Types
* fix travis
* feat: allow setting presence per shard
* add WebSocketManager#shardX events
* adjust typings, docs and performance issues
* readjust shard events, now provide shardId parameter instead
* fix: ready event should check shardCount, not actualShardCount
* fix: re-add replayed parameter of Client#resume
* fix(Sharding): fixes several things in Internal Sharding (#2914)
* fix(Sharding) fixes several things in Internal Sharding
* add default value for shards property
* better implement checking for shards array
* fix travis & some casing
* split shard count into 2 words
* update to latest Internal Sharding, fix requested changes
* make sure totalShardCount is a number
* fix comment
* fix small typo
* dynamically set totalShardCount if either shards or shardCount is provided
* consistency: rename shardID to shardId
* remove Client#shardIds
* fix: typo in GuildIntegrationsUpdate handler
* fix: incorrect packet data being passed in some events (#2919)
* fix: edgecase of ShardingManager and totalShardCount (#2918)
* fix: Client#userUpdate being passed wrong parameter
and fix a potential edgecase of returning null in ClientUser#edit from this event
* fix consistency and typings issues
* consistency: shardId instances renamed to shardID
* typings: fix typings regarding WebSocket
* style(.eslintrc): remove additional whitespace
* fix(Client): remove ondisconnect handler on timeout
* docs(BaseClient): fix typo of Immediate
* nitpick: typings, private fields and methods
* typo: improve grammar a bit
* fix: error assigning client in WebSocketManager
* typo: actually spell milliseconds properly
* Add worker-based sharding mode to ShardingManager
* Fix ClientShardUtil mode
* Fix worker not being cleared on shard death
* Update docs and typings
* Clean up Client sharding logic a bit
* Add info about requirements for worker mode
* feat: Add TextChannel#rateLimitPerUser
Rename parameter in TextChannel#setRateLimitPerUser
feat: Add `rateLimitPerUser` param to ChannelData
fix: eslint
* docs: Updated typings
* fix: Requested changes
* fix: rateLimitPerUser being undefined when 0
When `rate_limit_per_user` is 0, the gateway does not send it (but REST does). When this is set to a non-zero number, this property starts to exist. Otherwise this will be `0`. Adding `|| 0` should do the trick changing `undefined` to `0`.
* fix: eslint
* wip: comprehensive permissionOverwrites refactor
* PermissionOverwrites.resolve should Promise.reject()
where a promise is the expected return value
* On second thought, async rewrite to automatically reject on throw
* Fix some docs
* Fix a bug
* fix 2 more bugs
* typings: Updated for latest commit
* typings: Add missing method in GuildChannel
* typings: Add missing `| null` in PermissionOverwriteOption type
* Suggested changes
* feat: add ClientOptions#retryLimit
* hydra needs to learn how to code right
* a default would probably help
* move incrementor & update comment
* clarify docs on Infinity
* fix: better global ratelimit handling in RequestHandler
fix: Remove useless line
fix: Better global ratelimit management
* refactor: Changed RESTManager#globallyRateLimited to be a getter
* refactor: Remove RESTManager#globallyRateLimited getter
* docs: Updated comments to reflect latest changes
* Docs: merge PermissionOverwriteOptions and OverwriteData
* fix user-member and replace eslint-disable with linebreaks
* consistency fix
* Fix: remove empty line between jsdocs and method
* Fix: allowed/denied to allow/deny to conform with recent master changes
* refactor: clean up rate limit handling
* requested changes
* remove request mode option
* fix dupe requests
* hardcode reaction ratelimits
* suggested changes
* fix small thing
* re-add restTimeOffset
* move restTimeOffset a bit
* i swear i know english its my native language ok
* requested changes
* fix: a bit *too* pre-emptive with ratelimits, now less so
* fix: dapi error shoudl reject with path
* fix: make errors in execute catchable
* fix promise return
* rebase is hard
* misc: Update ClientApplication for the current API
* cleanup: ClientApplication#fetchAssets, removed createAsset
* Major cleanup time
* Merge to kyra's branch
* docs: Updated typings
* fix: re-add ClientApplication#{cover,coverImage()}
* typings(ClientApplication): move coverImage declaration up
* Rework createMessage
- MessageAttachment is now structurally similar to FileOptions
- No longer mutates the object passed as options
- Supports more permutations of arguments
* Ignore complexity warning
* Refactor name finding
* Fix typo
* Update typings
* Default name to null for MessageAttachment
* Make Message#reply use transformOptions
* Move transformOptions
* Fix Message#reply
* Fix mutation
* Update tests
* Fix options passing
* Refactor into APIMessage
* Fix webhook send
* Expose APIMessage
* Add documentation
* Add types
* Fix type doc
* Fix another type doc
* Fix another another type doc (is this one even right!?)
* Remove trailing comma
* Properly clone split options
* Add support for sending file as stream
* Missed a doc
* Resolve files only once when splitting messages
* This looks nicer
* Assign directly
* Don't cache data and files
* Missing return type
* Use object spread instead Object.assign
* Document constructors
* Crawl is a little dot
* comp pls
* tests: sanitize local file path, disable no-await-in-loop
* abstract BitField from Permissions
* reduce useless code, improve docs
* add a ReadOnly identifier to the return type of Bitfield#freeze()
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html#partial-readonly-record-and-pick
* fix the RangeError
* update docs, convert Speaking and ActivityFlags to bitfields
* fix some docs
* Fix Speaking BitField oops
* docs for oops
* more incorrect docs
* Fix incorrectly named property
* add new classes to index
* fix missing @extends docs
* default bitfield resolve to 0, and cleanup defaulting everywhere
Also removes GuildMember#missiongPermissions() alias that had incorrect behavior
* Breaking: Rename Overwrite allowed and denied to allow and deny
To be consistent with the api's naming
* fix setSpeaking usage to bitfields instead of booleans
* fix speaking bug in playChunk
* docs: Updated typings
* fix: BitFieldResolvable should use RecursiveArray
* bugfix/requested change
* typings: Cleanup (#2)
* typings: Fix BitField#{toArray,@@iterator} output type
* typings: correct PermissionOverwrites property names and nitpicks
* src: Handle WEBHOOK_UPDATE events
* Commit rename of 77'
Or adding the letter S
* I missed this
* Properly do this now
Typos everywhere
* Typings
* refactor: remove now unnecessary guild variable
* Error for guild.fetchVanityURL feature not enabled
* added GET/guilds/{guild.id}/vanity-url endpoint
* fix: code conventions
* adopted suggestion
* Changed error message according to change request
* Renamed method
to indicate that only the code is fetched, not the entire url.
* Update Guild.js
Useless file, filled with errors. Never served any real purpose. Discussed on discord. Can be replaced should a time come that we automate testing the typings further than just linting.
* fix: Capture stack traces in APIRouter to preserve async stack
* fix: Handle the stack trace better
* fix: Check if error is an instance of Error (5XX rejects with Result)
* fix: Error.captureStackTrace is not supported in all browsers
* Fix guild being a guild and not an AbstractHandler in PresenceUpdate
* update the default guild to be a Guild, and not GuildMember
* getters return null instead of undefined
* fix lint
* fix: Util.basename being unreliable
new URL for WHATWG parsing was not chosen because it only works for URLs and threw in local pathes, path.basename is unreliable (according to the devs' note), and path.parse seems to work well.
* docs: Update Util.basename's description
* add Collection as possible param to GuildChannel#overwritePermissions
* change PermissionoverwriteOptions desc. default to unset
* fix eslint hiccup
* fix spelling of snowflake
* [WIP] Remove user bots
* more backend userbot removal
* Add mfaEnabled back
* revert client presences store removal
* partially revert getAuth changes
* remove more no longer used children of ClientUserGuildSettings
* fix a bug with this pr and TextBasedChannel.applyToClass
* remove a syncGuilds reference
* more user bot data handling
* various guildSync cleanup
* bots can't call logout
Had the user/bot portions of the code mixed up. Though, does this need to be a promise anymore?
* make ClientManager#destroy() sync
It nolonger needs to be a promise, and nothing depended on it being a promise that I can tell.
* requested change
* Fix massive error
* no longer used as it's userbot only
* Hide Webhook#token (consistency with Client#token)
* Make `Webhook#token` writable
* fix: devsnek's requested change
Webhook#token must be both writable and configurable.
* Add timeDifference calcs back into ratelimits
And fix x-ratelimit-reset is in seconds, not ms: https://puu.sh/AIXxY/9b3989b248.png
* mutate reset time with date header instead
* fix defaulting of reset and remaining
if the reset header is not available, then the reset time should be Date.now() instead of the difference between the date header and Date.now()
If the date header is null, fall back to Date.now() since it's the best we can do (this should never happen, but safer to handle it just in case)
if remaining is 0 we don't want to default it back to 1 since 0 is falsy
The node documentation fails to correctly document when the backlog of unsent messages exceeds a certain threshhold the function will return false. This does not mean it will refuse to send- simply that it will take time. Issue in point: https://github.com/nodejs/node/issues/7657#issuecomment-240581726
* Fixed a bug where Guild#equals would cause the given guild to lose its features
* Fix Util.arraysEqual
* Fixed docs for Util.arraysEqual
* Remove Util.arraysEqual
* Rework collection
* Fix docs
* Remove (prop, value) behavior
* Add back thisArg
* Put examples on same line
* Revert map to return array
* Make examples less specific
* Add thisArg to sweep and partition
* feat(GuildEmoji#deletable)
* Update: Discord API returns 50001
When you try to get or delete a managed emoji from the API, you get a 50001 (Missing Access) error code.
* refactor: reduced duplication in role stores
* fix docs
* fix: typo
* most of requested changes
* rest of changes
* ACTUAL rest of changes
* docs
* doooocs
* reason
* fix message embed json serialization
remove the toJSON method on message embeds so the raw data is exposed
for JSON seralization. this removes the hexColor property, but it
probably should not have been there in the first place. fixes#2419
* change api transform to tojson
Fixes#2364
Discord sends those timestamps packed as SMALL_BIG_EXT, which get converted to strings in js.
~~Maybe they are already preparing their timestamps for 2038.~~
* Bring some docs up to date, as well as add a new example
* Missed an exclamation mark
* Do requested changes
* Do suggestions
* Same suggestions for the other examples
* Show people that they can also use reply with embeds
* Typos in embed.js example
* Remove object example from embeds, too complex
Suggested by Yukine
* Some changes, some requested changes
* Add moderation examples!
* Add attachment examples
* Missing dot
* Fix spacing
* Requested Changes
* Quote consistency
* Tfw you break the syntax
* docs/feat(WebsocketOptions): Parse ws options presence
Allow the `presence` property in `WebsocketOptions` to be used the same way
as `ClientUser#setPresence`.
* Move presence options to top level
* Prepare to work on moving all role functions to a Store
And yes, this is *another* patch branch cause I messed up my master branch to hell
* Move all emoji role related functions to its own store
Tested everything and it works! (With a reload of the client)
Also had to change a value in DataStore#holds
holds.name for GuildEmojis would return the emoji name instead of the class name
* New Line
* Thanks JS for circular dependency!
Because we can't have nice things...
* Do space's request
* Fix equals
* Fix space's point.
Raw API data has the role property as an array of IDs
* Ignore this I need a patch branch for Git
* Move all member role related stuff to a new DataStore
GuildMemberRoleStore is a new store that holds all member role related stuffs
Because its consistent!
* Minorest doc fix ever
To whoever did this object, they forgot a `{`
* Fix the spacing in the docs
* Resue the stores resolve rather than copy paste
Cause I'm dum and it overwrite resolve to the guild role stores resolve soo
* Fix some requests
- Removed the bs private functions
- Set the roles in the constructor
But, I need feedback. There is no way, that I saw, to make a member have roles whenever GuildMmber#_patch is called,
due to the roles being null on the guild. So the only way might be the for loop and getter.
* Fix an issue that I caused in #add
I was testing some other things, and changed that to test. Forgot to change it back
* Actually make the store generate just once when the member is created by first initializing the roles in the guild
Also replaces GuildMember#_roles with GuildMemberRoleStore#_roles
Tested all functions to make sure the expected result happens.
* I missed this from moving remove from GuildMember to GuildMemberRoleStore
* Fix RoleStore#create docs
For real this time
* Do all the requested changes
- Rename all `somethingRole` to `something` (hoistRole => hoist)
- Refactor add and remove to be cleaner and re-use set
* Fix a bug where the store would loose some roles due to null roles that can throw an error in the for loop after they've been deleted
* Remove the `role.id || role` part of the add and remove functions as Appel suggested
* Replace roles.resolve with roles.resolveID for GuildMemberRoleStore#remove
* Don't use Array.isArray in checks
Use instanceof instead
* Woops, I forgot to change this
Renamed colorRole to color
* The docs have dots, so we place the dots back
This leads to GuildMemberStore#_fetchMany to always reject
because it expects more member than possible.
Also no longer call the GuildMemberRemove handler locally
to not decrement twice.
The error from something like client.on('ready', () => undefined.f);
would just be emitted as debug event instead of being thrown.
Simply moving the emitting part out of the try catch again solves this.
* make EmojiStore not Private anymore.
because why have something private if there is priority functionality on that class? also that causes that the docs wont show it directly
* make GuildChannelStore not private anymore
because why have something private if there is priority functionality on that class? also that causes that the docs wont show it directly
* make RoleStore not private anymore
because why have something private if there is priority functionality on that class? also that causes that the docs wont show it directly
* make ReactionStore not private anymore
because why have something private if there is priority functionality on that class? also that causes that the docs wont show it directly
* make all non private to stay consistent
* fix merge conflicts because of other PRs.
* add Permissions.toArray()
* accept Permissions objects to Permissions.missing()
* accept Permissions as parameter to Permissions.has()
* style fixes
* remove redundant line, update JSDoc for Permission.resolve()
* JSDoc, style, and checkAdmin fixes
* add Permissions.resolveToObject()
* accept PermissionResolvable to Permissions.missing()
* remove `resolveToObject`, fix constructor JSDoc
* remove redundant parameter type
* fix `Permissions.missing()`
* fix checkAdmin
* update Permissions.toArray() description
* eliminate ambiguity in Permissions.toArray() description
* add backticks to permission example
* remove irrelevant type in Permission ctor description
* use this.constructor to properly support OOP
* use simplified approach for Permissions.toArray()
* fix return type on Permissions.toArray()
* move `Permissions#toArray` to more suitable position
* bitwise approach to `Permissions#missing`
* allow `Permissions` to be iterated over
* don't checkAdmin on return array
* remove unnecessary conditional
* fix JSDoc indentation
* use simpler & more reliable approach for missing()
* update PermissionResolvable typedef
* Fix ReactionCollector#remove and make Collector interface more consistent
* Move those below the doc
* Remove object spread
* Only emit event arguments
* Forgot to delete this line
* Update docs
* Also fix this
* More edits to docs
* Snowflake|string
* Permissions#resolve fix
* Travis failed because >120 chars per line
* better fix
Permissions#resolve reverted
removed destructuring in GuildChannelStore and RoleStore
* updating channelCreate example to reflect recent changes
Type is now part of the options object, so the example should reflect that.
* changing type to reason per comment
* fix(setParent): no longer in GuildChannel
* refactored
* little bit less ugly
* space/appel suggestion
* docs fix
* shhhhhhhh
* fun docs trip
* prototype thing
* mark nullable
* added a new Typedef for Bans you can get from <Guild>.fetchBans() due recent change aswell as fixed a little typo in the fetchAuditLogs() mehtod so .type has no the correct type defined
* little change due request
* fixed indentation
* Update Guild.js
* Update Guild.js
* Fix inconsistancy with Channel Creation
* Because static get is a function, it thinks we are create a new instance based on that function, rather than the returned class...
* Fix some missing doc strings
Mainly just readonly tags
* Return an error when guild#allowDMs is ran from a bot account, and fix some return types
* WebhookClient implements Webhook, doesn't extend it
* Fix Client#rateLimit docs not showing what it returns
Cause I wanted to handle this event only to see no return props 🤔
* Actually make Client#rateLimit show the right info
Its an object with all the info
* emit ReactionCollector#remove on all unreactions
this will emit an event when a user removes a collected reaction. this
is in addition to Collector#dispose, which will only fire when all users
have unreacted to the same emoji.
* emit only collected removals
* refactor(MessageReactions): fetchUsers() is now users.fetch()
made a lovely class for it and all
happify linter
stuff
i know how to code i swear
i lied
* bdistin suggestions
* space suggestions, rename store
* fix count
* documentation update
* added a new check to setUserLimit so it won't silently fail anymore if you put a wrong type in
* adapt spaces idea of converting null to 0
* this way it looks cleaner
* and i need to remove this
* need to do it that way because like Gus said null will not change anyhting
* space prooved me wrong and idk why ist working now
* fix(TextBasedChannel): return a promise in startTyping
This fixes#2040
Calling TextBasedChannel#startTyping now returns a promise.
This promise resolves when the bot stops typing (TextBasedChannel#stopTyping) or rejects when an error occurs.
Calling the method again returns the same promise as long the bot is still typing.
* move code into the promise' executor
* Clarify the purpose of the returned Promise
* inverse if and clarify count parameter
* docs: Add/normalize .toString() examples on all classes
* docs: Remove exclamation point on ClientApplication#toString example
* docs: Normalize .toString() descriptions on all classes
* Use "returns" instead of "concatenates"
* docs: fix documentation in various places
All stores: resolveID returns a nullable Snowflake
GuildAuditLogs: ActionType also can be ALL
MessageEmbed: make files property show up in the docs
ClientApplication: resetSecret and resetToken return a promise
ClientManager: status is readonly
Guild: features is an array of strings and ban no longer accepts a number or string
Guild: ban method no longer accepts a string or number
GuildMember: ^
RichPresenceAssets: small and large Image are Snowflakes, also fixed parameter documentation for small and large image url method
WebhookMessageOptions: file property is no longer a thing
* docs: improve GuildAuditLogs documentation
Prefix types with AuditLog to avoid confusion
Document GuildAuditLogs' static Targets and Actions properties and add necessary typedefs
Use typdefs over primitives where possible.
* fix documentation for Guild#defaultRole
The UserGetAction was never used.
The GuildMemberGetAction was only once used.
Easily replaced with a shorter and more comprehensible line. (Also consistent with the rest of the library)
* Fix setPosition issue
The rawPositions were never updated from using setPosition, now they are.
* Fix bubbling issue
Also, yes. It took me 8 hours to get back home. Deal with it :D
* Watch your copy paste
* Fix typo in setPosition
* Same typo in Role
* Fix edit with position breaking when the position was 0
* Eslint
* Revert code but fix the position issue
* tinify webpack
* meme
* fix long version
* more changes
* even smoler
* fix up logic
* fix build
* undo changes to user agent manager because its not webpack'd anymore
* the heck
* fix stupid
* clean up browser rules
* typo
* Fix documentation for GuildAuditLogEntry.target
* Update documentation for CategoryChannel#children
* Add EntryTarget for audit logs
I've done this to "fulfill" devsneks request while also showing all the possible results for the target of an AuditLogEntry
* Oops Eslint
* Private timeout sets gets set by BaseClient not WebhookClient
* Fix the "Missing Docs" for Presence#activity
* Small doc inconsistency
Array<Number> instead of Array<number> for Activity
* Client#emojis is an EmojiStore not a Collection
* Document ClientPresenceStore
Just so its clickable through the wiki, nothing else is documented
* Small fix for BaseClient#setInterval
You don't wait before executing, you execute every X ms
* GuildChannelResolvable takes a GuildChannel/Snowflake
* Typo in UserResolvable
* Another typo for UserResolvable
* Add the number to the Status and VoiceStatus docs
Its probably not needed, but just so the user knows what each number means, its now documented.
* add permissionsLocked
* wip permissionLock()
* should be good
* better method name
* see if this fixes channel jumping
* fix property names
* each overwrite is a different instance, and thus the pointers do not equal, even if the values do.
* add more documentation to the edit method
* fix Permissions.add/remove, by completely changing what they do
* permissions cleanup
Removes overwrite._denied and overwrite._allowed in favor of overwrite.denied.bitfield and overwrite.allowed.bitfield
uses the modified Permissions.add and Permissions.remove to clean up existing code
fixes GuildMember.missingPermissions
changes Permissions add/remove to reverse loops for speed, changes resolve to allow the number 0 as a valid permission.
* Revert createChannel overwrite.allow / overwrite.deny for arrays of {allow:bitfield, deny:bitfield}
Documentation should be improved here, although I would need advice. I believe a overwrite object typedef is needed, to show the structure of the object, and also include that collections may be used for this, rather than arrays.
* api router fix for overwritePermissions
* add Permissions.freeze, and change all returned Permissions to immutable instances
* Make Permissions a permission resolveable
change role.permissions to be an instance of Permissions
* Make permissions.add/remove return a new instance if the instance is frozen
* Fix invalid error
* Update GuildChannel.js
* Update Guild.js
* fix bad merge
* Start Store cleanup
* wip store cleanup
* fix iterables initiating datastores
* handle the possibility of a datastore with no holds and no its own 'create' method
* more cleanup (instances that need more than just client/data)
* missed RoleStore extras
* not sure how eslint didn't catch that tab...
* avoid re-getting the channel we already have...
* cleanup resolvers and refactor them into DataStores
* ^
* and remove
* fix some bugs
* fix lint
* fix documentation maybe?
* formatting
* fix presences
* really fix presences this time
* bad fix was bad... let;s see how bad this one is..
* forgot to save a file
* make presence resolving take userresolveables too
* fix tabs in jsdocs
* fix bad fix from last night that caused issues, with better fix...
* oops
* refactor(Attachment): Merge MessageAttachment with Attachment
* refactor(Attachment): Rename setup to _patch for consistency
* refactor(MessageAttachment): Global rename of Attachment class
* refactor(ClientUserGuildSettings): make client first parameter of the constructor
* refactor(ClientUserChannelOverride): patch if possible rather then reinstantiating every update
* fix(ClientUserGuildSettings): avoid uncaught exception when patching newly joined guilds/gdms
* Normalize undefined type checks in collections with typeof operators.
* Remove redundant number type checking in collections.
Number.isInteger() throws false for strings and any other types that aren't numbers.
* refactor/fix(DataStores): move instantiating of store related classes into the relevant create methods and fixed FetchMemberOptions
* Renamed ChannelStore's constructor parameter for claritiy
* define client property before creating items from passed iterable to avoid the client property being undefined
* Fix fetching members with a limit
* add static Channel#create back and moved channel instantiating there
* make ChannelStore's constructor accept an iterable
* make iterable an optional parameter, allow to just pass client and options
* fixed a little typo in docs of <User>.displayAvatarURL() (#1872)
* Rewrite presence a little bit (#1853)
* such presence many good
* Update PresenceStore.js
* Update index.js
* Update ClientPresenceStore.js
* Update Presence.js
* Update ClientPresenceStore.js
* Update ClientUser.js
* Update Presence.js
* add timestamps and party
* Update Presence.js
* Update PresenceStore.js
* Update ClientPresenceStore.js
* Update ClientPresenceStore.js
* fix: made options.type optional in ClientUser#setActivity (#1875)
* fix: made options.type optional in ClientUser#setActivity
* some changes, smol fix
due to too many types being possible, it should just be defaulted to 0. this means streamers will have to set the type manually, though.
also mistake with activity.name check
* docs(Collection): Adjust exists documentation (#1876)
Since the return value of Collection#exists is basically just a boolean of Collection#find's result, the same documentation and arguments can and should be applied.
* refactor(Emoji): remove Guild#deleteEmoji in favour of Emoji#delete (#1877)
* refactor/fix(DataStores): move instantiating of store related classes into the relevant create methods and fixed FetchMemberOptions
* Renamed ChannelStore's constructor parameter for claritiy
* define client property before creating items from passed iterable to avoid the client property being undefined
* Fix fetching members with a limit
* add static Channel#create back and moved channel instantiating there
* make ChannelStore's constructor accept an iterable
* make iterable an optional parameter, allow to just pass client and options
* rebase, this time with saving the file
* address issue with falsy activity throwing errors when setting client's presence
Since the return value of Collection#exists is basically just a boolean of Collection#find's result, the same documentation and arguments can and should be applied.
* fix: made options.type optional in ClientUser#setActivity
* some changes, smol fix
due to too many types being possible, it should just be defaulted to 0. this means streamers will have to set the type manually, though.
also mistake with activity.name check
* Fix docs for Guild#pruneMembers
* ClientApplication returns
* Guild#deleteEmoji
* Guild#setRolePosition takes RoleResolvable
* Client#fetchApplication returns ClientApplication not Oauth2Application
* ClientDataResolver#resolveImage can return null
* ClientApplication#toString small example
* Guild#allowDMs now has a only for user accounts warning
* ClientUserSettings#patch is private and setGuildPosition has a user account warning
* Role#setPermissions can take PermissionResolvable, not just String
* ChannelCreationOverwrites is for a role or a member, not for a "group"
* Fix ChannelData#userlimit string being wrong
"The user limit of voice the channel" :lul:
* ChannelResolvable is only for Channel or Snowflake
* EmojiIdentifierResolvable supports Snowflakes
* UserResolvable doesn't take a guild
* Make patch functions private
* Remove examples
* Webhoox#edit options.name defaults to the webhook name
* Make VoiceConnection functions private
* Am dum
The whole ClientUserSettings category is only for self bots soo
* Value for update functions is *
* Make update functions be private
* Fix GuildEditData missing Ssytemchannel property
* PermissionOverwriteOptions can accept null as an option
(Why did no-one document this?)
* Fixed leftover fetchThing and removed unused methods/error messages
* Added resume event constant and used event constants wherever possible
* Replaced mentions of removed method name with their new name.
* Fixed typo: resume -> resumed
- UserResolvable no longer allows a guild
- ChannelResolvable no longer allows a message or a guild
- ChannelResolvable no longer allows a message or a guild
* UserStore refactor
* Create ChannelStore, remove redundant methods in ClientDataManager
* Create GuildStore
* Emoji stuff
* Use a Base class where possible to reduce code duplication
* Remove unnecessary comments from ChannelStore
* Add Base._clone();
* Remove unused ClientDataManager methods
* Refactor some more stuff
* ESLint
* Move Client#fetchUser to client.users.fetch
* Remove .has checks and just see if .get is truthy
* Fix guild member chunk error
* ESLint
* Fix typo
* Fix channel storing for user bots
* Remove ClientDataManager
* GuildChannelStore
* Reduce use of Util.cloneObject
* and this one too
* update typings
* Fix MessageUpdate handling (#1507)
* Fix role updates (probably fixes#1525)
* fix for eslint
* Address some of appell's comments
* Use debug constant
* start message store crap if it's ugly tell me later k
* fix that
* message store but works™️
* clean up guild stuff
* clean up channel store stuff
* clean up channel event handling
* does this message stuff work? find out soon in the next episode of dIsCoRd.Js
* eslint
* emojis
* emojis and reactions
* hi my name is eslint and im A LIL SHIT
* so i forgot this huh
* user stuff
* Fix @class
* Fix message stuff
* Fix user store docs
* Document all the bases
* fix the super things
* tidy up remove
* fix textbasedchannel
* fix that too
* fix emoji store
* make voice state stuff less ugly
* make voice states even less ugly
* make members less bad
* fix bug
* fix that too
* fix reactions
* how was this broken for so long
* role store
* remove super._patch from UserConnection
* Rename UserProfile#setup to _patch
* remove unnecessary super calls
* update docgen dep (pls fix travis thx)
* doc messagestore
* fix docs
* message store docs
* things
* DOCS PLS
* more things
* Document TextBasedChannel#messages as a MessageStore
* Rebase
* All the stores!
* Allow to set the new game types via ClientUser#setPresence and setGame
* Accept string version of types, fix options parameter, remove Presence#streaming
* One line if statement, don't reuse data.game when game is already reassigned and fix error message
* Removed redundant if statement
- Fixed a common copy paste fail `the the <thing>` in various places
- Apparently I can't type Resolvable correctly,
Fixed that wherever applicable
- Documented GroupDMChannel#nicks so that it will be displayed on the docs
- GroupDMChannel#icon is nullable
- Removed empty InviteOptions typdef, as its properties are now documented in GuildChannel#createInvite
- MessageMentions#channels is no longer nullable
- RoleData#permissions takes a PermissionResolvable or an array of them
- Webhook#avatar is nullable
- Added HTTPOptions typedef and added it to ClientOptions typedef
- ClientUserChannelOverride#muted is for a channel and not a guild directly
* Made creating channels with overwrites nicer
and added ClientDataResolver#resolveRole
* Renamed ChannelPermissionOverwrites to ChannelCreationOverwrites
* Added RoleResolvables everywhere possible
* Fixed Emoji#setName resetting restricted roles and Emoji#equals
Which will lead to emojis not to update when roles are being added removed.
* Add Attachment structure
* Fix linter issues + @private
* Fixed array sends, also added embed sends
* fixed proving path to attachment
* fixed incorrect name assumption from path
* linting fix
* ;)
* im really good at this
* changes as requested by gus
and computer from #1459
* am a dum
* update webhook#send
* readonly addition to getters
* i... uh... oops
* farming deez commits
* fix webhook split
* removed some ugly
* removed .every checks
* ClientUser#createGroupDM now works like the docs states on user accounts
* Added GroupDMChannel#setIcon and fixed null handling for the channel name
* Added an s
* Don't resolve when icon is falsy and removed useless name trimming
* Removed now unnecessary name constant
* vscode being great
* Added GroupDMChannel#iconURL
* user guild settings
* Use direct collection
* I'm a goof
* double goof
* Structure properties
* Forgot to register listener
* wrong class names
* No more get in docs
* avoid waterfalls, bot checks
* trycatch
wow i thought i already did this :notlikecat:
* 👀
* Update ClientUser.js
* Update ClientUserGuildSettings.js
* Update UserGuildSettingsUpdate.js
* Update ClientUserChannelOverride.js
* Update ClientUserGuildSettings.js
* rewrite ratelimiting and api route builder
* more stuff
* let people pass their own handlers
* Update burst.js
* Update RequestHandler.js
* Update burst.js
* Update sequential.js
* Update RequestHandler.js
* Audio bitrate support
Note: not implemented for VoiceBroadcasts
* Fix default args, auto bitrate
* Late night typos are the best
* Changes bitrate to kbps for VoiceChannel stuff
* Add methods to manipulate bitrate while encoding
* rewrite ratelimiting and api route builder
* more stuff
* let people pass their own handlers
* Update burst.js
* Update RequestHandler.js
* Update burst.js
* Update sequential.js
* Update RequestHandler.js
* Added missing error messages
As well as `Guild#setRolePosition` and `Guild#setChannelPosition`'s first arg validation
And fixed a typo in `Guild#setChannelPosition`
`roles` -> `channels`
* Reverted collection and Util constructors
* Removed leftover messages
Should have been in the second commit.
* It's a single invalid permission and removed unused flag error
* Fix INVALID_TOKEN -> TOKEN_INVALID as of #1703
* fixed GroupDMChannel#addUser, added setName and removeUser
and changed every `the Group DM`to `this Group DM`, for consistency
* added edit method
* delete method comes already with the Channel class
* brackets
* removed empty line
* Fixed User#fetchProfile, UserProfile#premium and added #flags
* made UserProfile#flags a getter and stored the raw bitfield under UserProfile#_flags
* lowercased Flags
Remove the implication that a Message object's ID is unique only to the channel it was sent on
Message ID's are snowflakes, and as stated in Discord's API documentation, globally unique throughout Discord
* using correct properties to apply permissionOverwrites
and fixed `GuildChannel#clone`
* also arrays should be mapped and correct properties taking priority
* changed .deny and .allow to .denied and .allowed respectively
* whoops
* Add `count` optional argument to Collection methods
[NON-BREAKING CHANGE]
An optional `count` argument is added to the following methods:
- random() and randomKey()
- first() and firstKey()
- last() and lastKey()
If `count` is used, the method returns an array instead of only the value. Performance impact non-existent for existing code. Performance for returning an array has been measured and this is the fastest I could find (array[i] = value is faster than array.push()).
* Update Collection.js
Fixed spacing/line length errors according to suggestions by codacy/pr
* Fixed docs
Added proper `@returns {*|Array}` as the methods might return either. Also added params where missing (whoops)
* Further doc fixes
Per Crawl's comments, fixed (i + 1) spacing as well as fixed {Integer} to {number}
* random() and randomKey() fix
Per Hydra's comment, random() and randomKey() now ensures unique values.
I've also resolved potential issues with requesting a count higher than the collection size. A collection with 10 items will only ever return at most 10 items using the `count` property.
* Can I facepalm harder
Had wrong header comments ^_^
* Fixed for "values/value" and Omited
Also, added "Positive" integer check.
* looks like I "omitted" a change, there.
* Update Collection.js
* Update Collection.js
* Update Collection.js
* Add denied/allowed permissions to PermissionOverwrites
* Remove one accidental trailing space.
* Change to _denied/_allowed & denied/allowed
This could possible break if people use deny/allow, I assume, but that's okay.
* Update PermissionOverwrites.js
* Update PermissionOverwrites.js
* Fix Util.js : fetchRecommendedShards()
I'm not sure who thought this was a good idea, but by removing gateway, it broke fetchRecommendedShards() in Util.js as it uses ${Constants.Endpoints.gateway.bot}.
* Update Constants.js
* Update Constants.js
* Update Util.js
* Update Constants.js
* wowe
* fix sending
* Update MessageEmbed.js
* lel
* patched some fields for message embed and transforms edits as well
* webhook embeds transform
* apply transform to webhook embeds, and changed references
* Update MessageEmbed.js
* Update ClientDataResolver.js
* updated embeds params and use new util resolvers
* did not mean to add this back
* use master version of ClientDataResolver
* transform no longer needed
* handing guildauditlog's promise rejections to the user
* Returning a new Promise to resolve a Promise.all is unnecessary.
Also for the docs, it returns a Promise<GuildauditLogs>, not GuildAuditLogs directly.
* totally did not removed that line
* fix fetchMentions' auth header, options and data mapping
* vscode strikes again
* switched to Util.mergeDefault
* vscode
* removed duplicated optionals and switched to instanceof
@@ -7,11 +7,12 @@ pull request. We use ESLint to enforce a consistent coding style, so having that
is a great boon to your development process.
## Setup
To get ready to work on the codebase, please do the following:
1. Fork & clone the repository, and make sure you're on the **master** branch
2. Run `npm install`
2. Run `npm ci`
3. If you're working on voice, also run `npm install @discordjs/opus` or `npm install opusscript`
4. Code your heart out!
5. Run `npm test` to run ESLint and ensure any JSDoc changes are valid
6. [Submit a pull request](https://github.com/discordjs/discord.js/compare)
6. [Submit a pull request](https://github.com/discordjs/discord.js/compare) (Make sure you follow the [conventional commit format](https://github.com/discordjs/discord.js-next/blob/master/.github/COMMIT_CONVENTION.md))
We're sorry, we only use this issue tracker for bugs in the library itself and feature requests for it. We are not able to provide general support or answser questions on the issue tracker.
Should you want to ask such questions, please post in one of our support channels in our Discord server: https://discord.gg/bRCvFy9
Any issues that don't directly involve a bug in the library or a feature request will likely be closed and redirected to the Discord server.
@@ -26,7 +40,8 @@ discord.js is a powerful [node.js](https://nodejs.org) module that allows you to
- 100% coverage of the Discord API
## Installation
**Node.js 6.0.0 or newer is required.**
**Node.js 12.0.0 or newer is required.**
Ignore any warnings about unmet peer dependencies, as they're all optional.
Without voice support: `npm install discord.js`
@@ -34,18 +49,23 @@ With voice support ([@discordjs/opus](https://www.npmjs.com/package/@discordjs/o
With voice support ([opusscript](https://www.npmjs.com/package/opusscript)): `npm install discord.js opusscript`
### Audio engines
The preferred audio engine is @discordjs/opus, as it performs significantly better than opusscript. When both are available, discord.js will automatically choose @discordjs/opus.
Using opusscript is only recommended for development environments where @discordjs/opus is tough to get working.
For production bots, using @discordjs/opus should be considered a necessity, especially if they're going to be running on multiple servers.
### Optional packages
- [bufferutil](https://www.npmjs.com/package/bufferutil) to greatly speed up the WebSocket when *not* using uws (`npm install bufferutil`)
- [erlpack](https://github.com/hammerandchisel/erlpack) for significantly faster WebSocket data (de)serialisation (`npm install hammerandchisel/erlpack`)
- [zlib-sync](https://www.npmjs.com/package/zlib-sync) for WebSocket data compression and inflation (`npm install zlib-sync`)
- [erlpack](https://github.com/discord/erlpack) for significantly faster WebSocket data (de)serialisation (`npm install discord/erlpack`)
- One of the following packages can be installed for faster voice packet encryption and decryption:
- [bufferutil](https://www.npmjs.com/package/bufferutil) for a much faster WebSocket connection (`npm install bufferutil`)
- [utf-8-validate](https://www.npmjs.com/package/utf-8-validate) in combination with `bufferutil` for much faster WebSocket processing (`npm install utf-8-validate`)
// Log our bot in using the token from https://discordapp.com/developers/applications/me
// Log our bot in using the token from https://discord.com/developers/applications
client.login('your token here');
```
@@ -41,11 +41,11 @@ And here is the result:

But what if you want to send an attachment with a message content? Fear not, for it is easy to do that too! We'll recommend reading [the TextChannel's "send" function documentation](/#/docs/main/stable/class/TextChannel?scrollTo=send) to see what other options are available.
But what if you want to send an attachment with a message content? Fear not, for it is easy to do that too! We'll recommend reading [the TextChannel's "send" function documentation](/#/docs/main/master/class/TextChannel?scrollTo=send) to see what other options are available.
```js
// Extract the required classes from the discord.js module
- **Windows:** `npm install ffmpeg-binaries` or see the [FFMPEG section of AoDude's guide](https://github.com/bdistin/OhGodMusicBot/blob/master/README.md#download-ffmpeg).
- **Windows:** `npm install ffmpeg-static` or see the [FFMPEG section of AoDude's guide](https://github.com/bdistin/OhGodMusicBot/blob/master/README.md#download-ffmpeg).
## How do I set up @discordjs/opus?
- **Ubuntu:** Simply run `npm install @discordjs/opus`, and it's done. Congrats!
- **Windows:** Run `npm install --global --production windows-build-tools` in an admin command prompt or PowerShell.
Then, running `npm install @discordjs/opus` in your bot's directory should successfully build it. Woo!
Other questions can be found at the [official Discord.js guide](https://discordjs.guide/popular-topics/common-questions.html)
If you have issues not listed here or on the guide, feel free to ask in the [official Discord.js server](https://discord.gg/bRCvFy9).
Always make sure to read the [documentation](https://discord.js.org/#/docs/main/stable/general/welcome).
v11.6.0 backports new features from the in-development v12, and fixes bugs in the v11.5.x releases.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.6.0) for a full list of changes, including information about deprecations.
# Version 12.0.0
# Version 11.5.0
v11.5.0 backports new features from the in-development v12, and fixes bugs in the v11.4.x releases.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.5.0) for a full list of changes, including information about deprecations.
# Version 11.4.0
v11.4.0 backports many new features such as Rich Presence and bugfixes from v11.3.0.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.4.0) for a full list of changes, including information about deprecations.
# Version 11.3.0
v11.3.0 backports many new features and bug fixes from the in-development v12.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.3.0) for a full list of changes, including information about deprecations.
# Version 11.2.0
v11.2.0 fixes a lot of bugs we encountered along the 11.1.0 release, as well as support for new features such as Message Attachments and UserGuildSettings.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.2.0) for a full list of changes, including information about deprecations.
v12.0.0 contains many new and improved features, optimisations, and bug fixes.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/12.0.0) for a full list of changes.
You can also visit [the guide](https://discordjs.guide/additional-info/changes-in-v12.html) for help with updating your v11 code to v12.
# Version 11.1.0
v11.1.0 features improved voice and gateway stability, as well as support for new features such as audit logs and searching for messages.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.1.0) for a full list of changes, including
information about deprecations.
# Version 11
Version 11 contains loads of new and improved features, optimisations, and bug fixes.
See [the changelog](https://github.com/discordjs/discord.js/releases/tag/11.0.0) for a full list of changes.
## Significant additions
* Message Reactions and Embeds (rich text)
*Support for uws and erlpack for better performance
*OAuthApplication support
*Web distributions
-Message Reactions and Embeds (rich text)
-Support for uws and erlpack for better performance
-OAuthApplication support
- Web distributions
## Breaking changes
### Client.login() no longer supports logging in with email + password
Logging in with an email and password has always been heavily discouraged since the advent of proper token support, but in v11 we have made the decision to completely remove the functionality, since Hammer & Chisel have [officially stated](https://github.com/hammerandchisel/discord-api-docs/issues/69#issuecomment-223886862) it simply shouldn't be done.
User accounts can still log in with tokens just like bot accounts. To obtain the token for a user account, you can log in to Discord with that account, and use Ctrl + Shift + I to open the developer tools. In the console tab, evaluating `localStorage.token` will give you the token for that account.
### ClientUser.setEmail()/setPassword() now require the current password, as well as setUsername() on user accounts
Since you can no longer log in with email and password, you must provide the current account password to the `setEmail()`, `setPassword()`, and `setUsername()` methods for user accounts (self-bots).
### Removed TextBasedChannel.sendTTSMessage()
This method was deemed to be an entirely pointless shortcut that virtually nobody even used.
The same results can be achieved by passing options to `send()` or `sendMessage()`.
Example:
```js
channel.send('Hi there',{tts:true});
```
### Using Collection.find()/exists() with IDs will throw an error
This is simply to help prevent a common mistake that is made frequently.
To find something or check its existence using an ID, you should use `.get()` and `.has()` which are part of the [ES6 Map class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map), which Collection is an extension of.
# Version 10
Version 10's non-BC changes focus on cleaning up some inconsistencies that exist in previous versions.
Upgrading from v9 should be quick and painless.
## Client options
All client options have been converted to camelCase rather than snake_case, and `max_message_cache` was renamed to `messageCacheMaxSize`.
v9 code example:
```js
constclient=newDiscord.Client({
disable_everyone:true,
max_message_cache:500,
message_cache_lifetime:120,
message_sweep_interval:60
message_sweep_interval:60,
});
```
v10 code example:
```js
constclient=newDiscord.Client({
disableEveryone:true,
messageCacheMaxSize:500,
messageCacheLifetime:120,
messageSweepInterval:60
messageSweepInterval:60,
});
```
## Presences
Presences have been completely restructured.
Previous versions of discord.js assumed that users had the same presence amongst all guilds - with the introduction of sharding, however, this is no longer the case.
v9 discord.js code may look something like this:
```js
User.status;// the status of the user
User.game;// the game that the user is playing
@@ -101,6 +102,7 @@ Additionally, the introduction of the Presence class keeps all of the presence d
A user may have an entirely different presence between two different guilds.**
v10 code:
```js
MemberOrUser.presence.status;// the status of the member or user
MemberOrUser.presence.game;// the game that the member or user is playing
@@ -110,41 +112,46 @@ ClientUser.setPresence(fullPresence); // status and game combined
```
## Voice
Voice has been rewritten internally, but in a backwards-compatible manner.
There is only one breaking change here; the `disconnected` event was renamed to `disconnect`.
Several more events have been made available to a VoiceConnection, so see the documentation.
## Events
Many events have been renamed or had their arguments change.
@@ -34,7 +32,8 @@ discord.js is a powerful [Node.js](https://nodejs.org) module that allows you to
- 100% coverage of the Discord API
## Installation
**Node.js 6.0.0 or newer is required.**
**Node.js 12.0.0 or newer is required.**
Ignore any warnings about unmet peer dependencies, as they're all optional.
Without voice support: `npm install discord.js`
@@ -42,19 +41,23 @@ With voice support ([@discordjs/opus](https://www.npmjs.com/package/@discordjs/o
With voice support ([opusscript](https://www.npmjs.com/package/opusscript)): `npm install discord.js opusscript`
### Audio engines
The preferred audio engine is @discordjs/opus, as it performs significantly better than opusscript. When both are available, discord.js will automatically choose @discordjs/opus.
Using opusscript is only recommended for development environments where @discordjs/opus is tough to get working.
For production bots, using @discordjs/opus should be considered a necessity, especially if they're going to be running on multiple servers.
### Optional packages
- [bufferutil](https://www.npmjs.com/package/bufferutil) to greatly speed up the WebSocket when *not* using uws (`npm install bufferutil`)
- [erlpack](https://github.com/hammerandchisel/erlpack) for significantly faster WebSocket data (de)serialisation (`npm install hammerandchisel/erlpack`)
- [zlib-sync](https://www.npmjs.com/package/zlib-sync) for WebSocket data compression and inflation (`npm install zlib-sync`)
- [erlpack](https://github.com/discord/erlpack) for significantly faster WebSocket data (de)serialisation (`npm install discord/erlpack`)
- One of the following packages can be installed for faster voice packet encryption and decryption:
- [bufferutil](https://www.npmjs.com/package/bufferutil) for a much faster WebSocket connection (`npm install bufferutil`)
- [utf-8-validate](https://www.npmjs.com/package/utf-8-validate) in combination with `bufferutil` for much faster WebSocket processing (`npm install utf-8-validate`)
The preferred opus engine is @discordjs/opus, as it performs significantly better than opusscript. When both are available, discord.js will automatically choose @discordjs/opus.
Using opusscript is only recommended for development environments where @discordjs/opus is tough to get working.
For production bots, using @discordjs/opus should be considered a necessity, especially if they're going to be running on multiple servers.
## Joining a voice channel
The example below reacts to a message and joins the sender's voice channel, catching any errors. This is important
as it allows us to obtain a `VoiceConnection` that we can start to stream audio with.
@@ -24,19 +27,15 @@ const client = new Discord.Client();
client.login('token here');
client.on('message',message=>{
client.on('message',asyncmessage=>{
// Voice only works in guilds, if the message does not come from a guild,
// we ignore it
if(!message.guild)return;
if(message.content==='/join'){
// Only try to join the sender's voice channel if they are in one themselves
if(message.member.voiceChannel){
message.member.voiceChannel.join()
.then(connection=>{// Connection is an instance of VoiceConnection
message.reply('I have successfully connected to the channel!');
New to v12 is the ability to play OggOpus and WebmOpus streams with much better performance by skipping out Ffmpeg. Note this comes at the cost of no longer having volume control over the stream:
If you have an existing [ReadableStream](https://nodejs.org/api/stream.html#stream_readable_streams),
this can also be used:
Make sure to consult the documentation for a full list of what you can play - there's too much to cover here!
**Playing a ReadableStream:**
```js
connection.playStream(myReadableStream);
## Voice Broadcasts
// If you don't want to use absolute paths, you can use
// fs.createReadStream to circumvent it
constfs=require('fs');
conststream=fs.createReadStream('./test.mp3');
connection.playStream(stream);
```
It's important to note that creating a readable stream to a file is less efficient than simply using `connection.playFile()`.
**Playing anything else:**
For anything else, such as a URL to a file, you can use `connection.playArbitraryInput()`. You should consult the [ffmpeg protocol documentation](https://ffmpeg.org/ffmpeg-protocols.html) to see what you can use this for.
A voice broadcast is very useful for "radio" bots, that play the same audio across multiple channels. It means audio is only transcoded once, and is much better on performance.
console.log('Channel unsubscribed from broadcast :(');
});
```
Again, playing a file from a URL like this is more performant than creating a ReadableStream to the file.
`broadcast` is an instance of `VoiceBroadcast`, which has the same `play` method you are used to with regular VoiceConnections:
## Advanced Topics
soon:tm:
```js
constdispatcher=broadcast.play('./audio.mp3');
connection.play(broadcast);
```
It's important to note that the `dispatcher` stored above is a `BroadcastDispatcher` - it controls all the dispatcher subscribed to the broadcast, e.g. setting the volume of this dispatcher affects the volume of all subscribers.
In addition to your usual Node applications, discord.js has special distributions available that are capable of running in web browsers.
This is useful for client-side web apps that need to interact with the Discord API.
[Webpack 3](https://webpack.js.org/) is used to build these.
## Usage
## Restrictions
- Any voice-related functionality is unavailable, as there is currently no audio encoding/decoding capabilities without external native libraries,
which web browsers do not support.
- The ShardingManager cannot be used, since it relies on being able to spawn child processes for shards.
- None of the native optional packages are usable.
### Require Library
If you are making your own webpack project, you can require `discord.js/browser` wherever you need to use discord.js, like so:
```js
constDiscord=require('discord.js/browser');
// do something with Discord like you normally would
```
### Webpack File
You can obtain your desired version of discord.js' web build from the [webpack branch](https://github.com/discordjs/discord.js/tree/webpack) of the GitHub repository.
There is a file for each branch and version of the library, and the ones ending in `.min.js` are minified to substantially reduce the size of the source code.
Include the file on the page just as you would any other JS library, like so:
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.