| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
The API no longer allows bot users to Direct Message other bot users, so
pre-emptively check that the recipient is not a bot. If it is, return a
`ModelError::MessagingBot`.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Nonces can actually be almost anything - including booleans - so just
use a Value to represent it since very few users will need it.
This fixes errors like:
```
WARN:serenity::internal::ws_impl: (╯°□°)╯︵ ┻━┻ Error decoding: {"t":"MESSAGE_CREATE","s":12187872,"op":0,"d":{"type":0,"tts":false,"timestamp":"2017-06-01T01:00:00.000000+00:00","pinned":false,"nonce":"","mentions":[{"username":"redacted","id":"redacted","discriminator":"redacted","avatar":"redacted"}],"mention_roles":[],"mention_everyone":false,"id":"redacted","embeds":[],"edited_timestamp":null,"content":"redacted","channel_id":"redacted","author":{"username":"redacted","id":"redacted","discriminator":"redacted","bot":true,"avatar":"redacted"},"attachments":[]}}
ERROR:serenity::client: Shard handler received err: Json(ErrorImpl { code: Message("Unknown i64 value: "), line: 0, column: 0 })
```
and:
```
WARN:serenity::internal::ws_impl: (╯°□°)╯︵ ┻━┻ Error decoding: {"t":"MESSAGE_CREATE","s":1001192,"op":0,"d":{"type":0,"tts":false,"timestamp":"2017-06-01T01:01:01.000000+00:00","pinned":false,"nonce":true,"mentions":[],"mention_roles":[],"mention_everyone":false,"id":"redacted","embeds":[],"edited_timestamp":null,"content":"bork","channel_id":"redacted","author":{"username":"redacted","id":"redacted","discriminator":"redacted","bot":true,"avatar":"redacted"},"attachments":[]}}
ERROR:serenity::client: Shard handler received err: Json(ErrorImpl { code: Message("invalid type: boolean `true`, expected identifier"), line: 0, column: 0 })
```
|
| |
|
|
| |
Embeds can now have a combined textual length of 6000, up from 4000.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
The 'wait' parameter allows you to specify waiting for the Message to be
sent prior to receiving a response, which will have Discord include the
JSON representation of the Message in the body.
|
| | |
|
| |
|
|
|
|
|
| |
Deprecate `Channel::delete_messages` and `Channel::delete_permission`.
These methods aren't available on all of the variants' types, so they
shouldn't be on the Channel either.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When made, the `http::send_files` code was duplicated from
`http::send_file`. Instead call `http::send_files`, which provides a
fix for when an, e.g. 4xx status code, is received, and the library
would continue to deserialize the response as usual.
This fixes errors like:
```
Err(Json(ErrorImpl { code: Message("missing field `id`"), line: 1, column: 54 }))
```
Instead returning:
```
Err(Http(InvalidRequest(PayloadTooLarge)))
```
|
| |
|
|
|
|
| |
After the shard handler successfully reconnects a shard, reset the
`last_ack_time` and `last_heartbeat_sent` to avoid going into an
endless reconnection loop.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Switch from using `#[doc(hidden)]` to hide some internal functions to
`pub(crate)`.
The library now requires rustc 1.18.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
The `channel_id` field on Context is no longer required internally, and
is no longer of use to userland as event handlers are given the channel
ID in some way where possible.
`queue` is a remnant from when the Context was the primary way to
interact with the REST API.
|
| |
|
| |
Use the client ID instead of the user ID.
|
| |
|
|
| |
All codepaths result in Some value, so it doesn't need to be optional.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
Negative message nonces caused deserialization errors, as serde would
not deserialize integers into strings.
To fix this, change `Message::nonce` into an `Option<Snowflake>` from an
`Option<String>`. This new `Snowflake` is a wrapper around an `i64`. Use
a new `I64Visitor` to deserialize i64s, u64s, and strs into the wanted
i64.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Upgrade `rust-websocket` to v0.20, maintaining use of its sync client.
This indirectly switches from `rust-openssl` v0.7 - which required
openssl-1.0 on all platforms - to `native-tls`, which allows for use of
schannel on Windows, Secure Transport on OSX, and openssl-1.1 on other
platforms.
Additionally, since hyper is no longer even a dependency of
rust-websocket, we can safely and easily upgrade to `hyper` v0.10 and
`multipart` v0.12.
This commit is fairly experimental as it has not been tested on a
long-running bot.
|
| |
|
|
|
|
|
|
|
|
| |
Make read/writes to the stream timeout after 90 seconds to prevent a
potentially infinitely blocked call.
If the timeout is reached, perform a reconnect.
This fixes issues such as intermittent internet issues causing a message
to never be received, and thus infinitely blocking.
|
| |
|
|
|
|
| |
When returning, the Client would return an Ok(()). Instead, return an
error, since there is currently no reason the client would return under
"okay" circumstances.
|
| |
|
|
|
|
|
|
|
|
| |
Instead of running a loop forever, have the client join threads when
they end.
This is currently a poor way of having the client eventually end, but
for now it's a duck-tape solution, as when one shard completely fails to
reboot it's an indicator of a larger issue (invalidated authentication,
intermittent network issues, etc.)
|
| |
|
|
|
| |
The logic for this was duplicated, and can be easily separated into its
own function.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Instead of accepting a `&str`, make `User::direct_message` and
`User::dm` accept a `CreateMessage` builder for consistency with related
functions.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Chrono is easier to use than timestamped strings, so they should be
automatically deserialized and available for the user, instead of having
the user deserialize the strings themselves.
These fields have been changed to use a type of `DateTime<FixedOffset>`:
- `ChannelPinsUpdateEvent.last_pin_timestamp`
- `Group.last_pin_timestamp`
- `Guild.joined_at`
- `GuildChannel.last_pin_timestamp`
- `Invite.created_at`
- `Member.joined_at`
- `Message.edited_timestamp
- `Message.timestamp`
- `MessageUpdateEvent.edited_timestamp`
- `MessageUpdateEvent.timestamp`
- `PrivateChannel.last_pin_timestamp`
`Member.joined_at` is now also an `Option`. Previously, if a Guild
Member Update was received for a member not in the cache, a new Member
would be instantiated with a default String value. This is incorrect
behaviour, and has now been replaced with being set to `None` in that
case.
Id methods' `created_at()` method now return a `chrono::NaiveDateTime`
instead of a `time::Timespec`, and `User::created_at` has been updated
to reflect that.
Additionally, drop `time` as a direct dependency and use chrono for
internals.
|