| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| |
|
|
|
|
|
| |
Conditional compiles with the 'methods' feature enabled - but the
'cache' feature disabled - were supported, but methods would call an
empty function to check if the current user has permissions. Instead,
put these function calls behind macros which check for feature cfgs.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The events were cluttering the `model` module, and so are now moved into
their own `model::event` module.
As users should not usually have to work with events all that much -
only currently in some rarely used event handlers - this change should
not be much more effort to import from.
i.e.:
```rs
use serenity::model::event::ChannelPinsAckEvent;
```
vs. the now-old:
```rs
use serenity::model::ChannelPinsAckEvent;
```
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
This may turn out to be a bad idea, but this causes a reconnect, as part
of the catch-all `rust-websocket` crate error handling. Since this
variant in particular doesn't seem directly harmful to ignore, it may be
better to just throw away than to reconnect.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The global Cache used to be an Arc<Mutex>, however the issue is that it
could only be opened for reading or writing once at a time.
With an RwLock, multiple readers can access the Cache at once, while
only one Writer may at once. This will allow users to be able to have
multiple Readers open at once, which should ease some of the pains with
working with the Cache.
Upgrade path:
Modify all uses of the CACHE from:
`CACHE.lock().unwrap()`
to
`CACHE.read().unwrap()` if reading from the Cache (most use cases), or
`CACHE.write().unwrap()` to write to it.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Re-organize the client module, creating a `gateway` submodule, and
splitting the connection into separate files in it.
The connection was a conglomeration of a number of purposes, most of
which are actually used elsewhere in the library and/or exposed to the
user. Thus, it makes sense to separate each item in a gateway-specific
module.
By splitting the client module further, this is a re-organization for
preliminary RPC support WRT the Client.
Additionally, rename the Connection struct to a Shard. The Connection
itself was not the actual connection, and was a higher-level interface
to the real connection logic. A Shard is a more accurate representation
of what it actually is.
|
| |
|
|
|
|
| |
While this has the potential to hit 429s in very minimal periods of
time, this will allow multiple concurrent HTTP requests, whereas
before they were forced to be sync.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
Rework the methods to accept strings and games directly, rather than
Optional values. Instead, use the new `reset_presence` to set a clean
status, or `set_presence` for more fine-grained control.
In addition, `Game::playing` and `Game::streaming` now accept `&str`s
rather than Strings.
|
| |
|
|
|
|
|
|
|
|
| |
For consistency with the rest of the library, rename the methods
prefixed with `find_` to `get_`.
The past logic was that items are "found", as they may or may not exist.
With get, the expectation is that it is _always_ there, i.e. over REST.
However, this is inconsistent, and "get"ting over REST can fail for
other reasons.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
The connection is now non-blocking, allowing user event handlers to
immediately unlock it themselves (assuming they haven't unlocked it
elsewhere), rather than waiting on the library to receive an event.
This is done by decoupling the receiver away from the connection,
which is not necessarily "directly" associated with the connection.
This needs a _lot_ of code cleanup later.
|
| |
|
|
|
|
|
|
| |
Fixes conditional compilation across multiple combinations of feature
targets, where it was assumed a second feature would be enabled by
something that requires a feature to be enabled.
This also fixes an EOF compilation error on no-feature builds.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Some routes, mostly user-specific ones, do not have ratelimit headers.
So when specifying the `Route::None` variant, do not attempt to treat it
as its own bucket, and instead ignore ratelimiting for it.
|
| |
|
|
|
|
|
|
|
|
| |
Adds support for
`DELETE /guilds/:guild_id/members/:user_id/roles/:role_id` and
`PUT /guilds/:guild_id/members/:user_id/roles/:role_id`, which are
routes to add or remove individual roles to a guild member.
The `Member::add_role` and `Member::remove_role` methods will edit
in-place.
|
| |
|
|
|
| |
They do not work for bot users. So return a
`ClientError::InvalidOperationAsBot` if someone tries to.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds conditional compilation for the following features, in
addition to the voice conditional compilation flag:
- extras (message builder)
- framework
- methods
- state
These 4 are enabled _by default_, while the `voice` feature flag is
disabled.
Disabling the state will allow incredibly low-memory bots.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a message builder to `send_message`. Often only one field - i.e.
`content` - needs to be specified, and the rest can be ignored.
This is a preliminary patch to add rich embed support to messages.
This message builder is used via:
```rust
// assuming in a context with a `channel_id` bound
context.send_message(channel_id, |m| m
.content("TTS ping!")
.tts(true));
```
|
| |
|
|
|
|
|
|
|
| |
When updating the State, return the old instance of removed/updated
fields where possible, so that they can be used to send to event
handlers as a "this is what it used to look like, this is what it looks
like now" type of thing.
Very descriptive, I know.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add support for the `PATCH /guilds/:guild_id/members/@me/nick` endpoint,
which allows the current user to edit their own nickname.
A user can only nickname themselves if they have the `Change Nickname`
permission.
This adds 4 methods:
- `serenity::client::http::edit_nickname`;
- `serenity::client::Context::edit_nickname`;
- `serenity::model::Guild::edit_nickname`;
- `serenity::model::LiveGuild::edit_nickname`.
`LiveGuild`'s implementation checks for whether the current user has
permission to change their own nickname.
|
| | |
|
| |
|
|
|
| |
Create a general `internal` module, and move `prelude_internal` to
`internal::prelude`.
|
| |
|
|
|
|
|
|
|
| |
The builders aren't a large enough portion of the library to deserve
their own root-level module, so move them to the `utils` module.
Additionally, split them into separate files, as the library will be
receiving more builders and the single-file pattern was getting rather
large.
|
| |
|
|
|
|
|
|
|
|
| |
Before sending a request to Discord, ensure that a message's content on
non-HTTP functions and methods meets the required length. If it exceeds
the limit, then return a
`Error::Client(ClientError::MessageTooLong(u64))`, containing the number
of unicode code points exceeding the limit.
Note that directly using the HTTP methods does not impose this limit.
|
| |
|
|
|
|
|
|
|
| |
Add the `delete_message_reactions` endpoint
(`DELETE /channels/{}/messages/{}/reactions`) and implement a method on
the `Message` struct for easy access, `delete_reactions`.
Register the `MESSAGE_REACTION_REMOVE_ALL` event and add an event
handler.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
The missing HTTP methods are:
- get_guild_integrations: `GET /guilds/:guild_id/integrations
- get_guild_regions: `GET /guilds/:guild_id/regions`
- get_user_connections: `GET /users/@me/connections`
- get_user_dm_channels: `GET /users/@me/channels`
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Rather than completely dropping the connection, send a close code prior.
|
| | |
|