this was done with intention to help keep the repository's working size
down, since most of these files will not be used.
rendered images have been moved online to
https://discord.foxbot.me/logo/
This resolves a bug where disconnecting the socket client would not
actually close the websocket. Bots would appear to remain online in the
discord client until their connection to discord eventually timed out.
The underlying cause of this issue sourced from the cancellation token
passed into the websocket's ReceiveAsync method - when entering the
disconnect process, the first step is to cancel out all of the
connection tokens. Unfortunately, the standard ClientWebSocket handles a
token cancellation by aborting the socket, rendering it inoperable for a
safe closure.
This change removes the inner cancellation token passed into
ReceiveAsync. The cancellation token is still retained for use in the
receive loop, so the receive task should gracefully complete once some
event satisfies the ClientWebSocket's blocking receive.
To ensure that all clients succesfully close, regardless of their
traffic, the disconnect procedure was rearranged such that awaiting the
receive task now occurs last, after the socket has been closed. Closing
the socket will propagate an event up to the ClientWebSocket's receive
method, which will allow the loop to iterate and gracefully complete.
So far, I have validated this change against basic connection opening
and closing, for both the gateway and voice clients. I have not yet
validated against unplanned connection interruptions, though I believe
that this change might actually improve some of those connection bugs,
since the ClientWebSocket should never find itself in an aborted state.
Co-authored-by: Chris Johnston <chris@thejohnstons.net>
commit 23f5abba48
Author: Christopher Felegy <foxbot@protonmail.com>
Date: Thu Dec 20 17:10:21 2018 -0500
lint: clean up some long lines
commit 4a8a809db0
Author: Chris Johnston <chris@thejohnstons.net>
Date: Sat Dec 15 00:33:05 2018 -0800
Explain why CreatorId can be null sometimes
commit 9442e4e635
Author: Chris Johnston <chris@thejohnstons.net>
Date: Fri Dec 14 23:59:01 2018 -0800
Add the CreatorId property to GuildEmote implementation
commit e0eb94d44c
Author: Chris Johnston <chris@thejohnstons.net>
Date: Fri Dec 14 23:41:54 2018 -0800
Update the Emoji API model to add User? attribute
* feature: add DiscordSocketRestClient
this resolves#803.
Users can access a DiscordSocketRestClient from the new
`DiscordSocketClient.Rest` property.
DiscordSocketRestClient is a wrapper over DiscordRestClient with certain
state-modifying methods, such as Login/Logout disabled, to prevent users
from breaking the client state.
DiscordSocketRestClient uses the same API client as the
DiscordSocketClient, allowing for shared ratelimiting - meaning users
can now force HTTP requests without needing to wory about running into
429s.
* fix: disallow users from bypassing shadowed login
* improve bot token validation by trying to decode user id from token
Try to decode the user id from the supplied bot token as a way of validating the token. If this should fail, indicate that the token is invalid.
* Update the tokenutils tests to pass the new validation checks
* Add test case for CheckBotTokenValidity method
* lint: clean up whitespace
* Add check for null or whitespace string, lint whitespace
* fix userid conversion
* Add hint to user to check that token is not an oauth client secret
* Catch exception that can be thrown by GetString
* Refactor token conversion logic into it's own testable method
* Update the minimum bot token length to 58 char
- Updates the minimum length of a bot token to be 58 characters. An older 58 char bot token was found by Moiph
- Makes this value an internal const instead of a magic number
* update the TokenUtils tests for 58 char min
* Initial set of dispose implementations
Not handled yet:
- Discord.Net.Websocket/Entities/SocketGuild
- Discord.Net.Tests
* Refactor DiscordSocketClient init into ctor
This way we remove an IDisposableAnalyzer warning for not disposing
the client when we set the client variable.
* Dispose of clients when disposing sharded client
* Finish implementing IDisposable where appropriate
I opted to use NoWarn in the Tests project as it wasn't really necessary
considering that our tests only run once
* Tweak samples after feedback
* Added ability to specify position when creating a channel
* Adjusted categories to include guildproperties and allow specifying position when creating channel categories
* fixed unimplemented methods (for CreateCategoryChannelAsync) and added appropriate documentation
* Add NamedArgumentTypeAttribute
* Add NamedArgumentTypeReader
* Fix superflous empty line.
* Fix logic for quoted arguments
* Throw an exception with a tailored message.
* Add a catch to wrap parsing/input errors
* Trim potential excess whitespace
* Fix an off-by-one
* Support to read an IEnumerable property
* Add a doc
* Add assertion for the collection test
This fixes an error that was introduced in d30d12246d (thanks Still for noticing!)
Changes the public property setters of the MessageActivity and MessageApplication entities to be
internal, since they cannot be modified by the user in the API.
* Add SocketUser.MutualGuilds + various ext. methods.
* Search through submodules for GetExecutableCommandAsync
* Allow GetExecutableCommandsAsync(ModuleInfo) to recurse properly to all submodules.
* Bump down lang. version & whitespace cleanup.
* Change to use Task.WhenAll
* Change to ICollection<CommandInfo>
* Resolve build errors.
* fix: strip trailing slash from ratelimit bucket IDs
This resolves#1125.
fixes a bug where some ratelimit buckets would include a trailing slash,
while others wouldn't; this would cause them to be treated as separate
ratelimits, even though they are the same
ideally this fix should change the ratelimit generator, but that code is
pretty complicated and this was an easier fix that seems less likely to
break things in the future.
tested against normal bot function, all routes are assigned the proper
buckets from my testing, so this should be good to go.
* lint: use more performant algorithm, operate on StringBuilder
* Add ExplicitContentFilter property to Guild
* re-order properties to match order listed on api docs
* re-order SystemChannelId to match api docs
* Implement ApplicationId in Guild model
* Add ExplicitContentFilter property to Guild
* re-order properties to match order listed on api docs
* re-order SystemChannelId to match api docs
* Implement ApplicationId in Guild model
* Improve xmldoc for IGuild ExplicitContentFilter
* Update xmldoc
* docs "Id" -> "ID"
* rename Test.GuildPermissions to a more general Test.Guilds
* Add ExplicitContentFilter to GuildProperties
* Add a test for ExplicitContentFilterLevel modification behavior
* Implement ModifyAsync behavior
* simplify ExplicitContentFilter test
* Add RestGuild ApplicationId inheritdoc
* Implement message Activity and Application model update
* RestMessage Application and Activity implementation
* add ToString to MessageApplication
* Add IconUrl property to MessageApplication
* clean up whitespace
* another excessive whitespace removal
* feature: consolidate all results into CommandExecuted
This resolves#694.
This is a breaking change!
- changes the signature of CommandExecuted from (CommandInfo, ...) to
(Optional<CommandInfo>, ...), since we are now including Search result
failures in the event (and a command isn't accessible yet).
* lint: remove unfinished thoughts
* fix: don't assume the member will always be included on MESSAGE_CREATE
This resolves#1153.
Member objects are only included on a message when the user has
transitioned from an offline state to an online state (i think?), so
this change will fall back to the prior behavior, where we just create
an incomplete member object for these states.
* lint: use a ternary in place of an if/else block