* 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
* 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