aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | Implement From<EmojiId | EmojiIdentifier> for ReactionType (#217)Fenhl2017-11-131-0/+18
| |
* | Change PrivateChannel::say to use `Display` (#214)Fenhl2017-11-121-1/+1
| |
* | Re-order use statements alphabeticallyZeyla Hellyer2017-11-1154-165/+151
| |
* | Simplify Error's `Display` implZeyla Hellyer2017-11-111-11/+1
| |
* | Make ShardManager::runners publicZeyla Hellyer2017-11-091-1/+5
| | | | | | | | | | | | `ShardManager::public` has been made public to allow direct user interaction, but should be used with caution due to the fact this can internally cause an invalid state when used improperly.
* | Fix Shard::shard_info doctestZeyla Hellyer2017-11-091-3/+1
| |
* | Fix parking_lot::{Mutex, RwLock} re-exportsZeyla Hellyer2017-11-091-2/+1
| | | | | | | | | | | | | | | | Fix the re-exports for `parking_lot::{Mutex, RwLock}` no longer functioning due to the conditional compilation gate removal (`parking_lot` is now always compiled). Tests have been updated to ensure the functionality of these re-exports.
* | Fix doc-testsacdenisSK2017-11-084-53/+15
| |
* | Fix indention for the docs (#213)Chris2017-11-081-6/+6
| |
* | Add Debug derives to more public typesthelearnerofcode2017-11-075-5/+30
| |
* | Into<String> -> DisplayacdenisSK2017-11-071-6/+6
| |
* | Rename `list` to be consistent with `multiple_quoted`acdenisSK2017-11-061-2/+2
| |
* | Actually, change `NeverFails` to a void enumacdenisSK2017-11-051-1/+1
| |
* | Whoops. Add a `FromStr` impl for `ReactionType`acdenisSK2017-11-047-79/+37
| |
* | Merge v0.4.3acdenisSK2017-11-0419-94/+340
|\|
| * Fix doctests for a variety of feature targetsZeyla Hellyer2017-11-014-8/+33
| |
| * Fix no-client cache testsZeyla Hellyer2017-11-014-23/+45
| | | | | | | | | | There were a few doctests in the cache module that relied on the client module, so instead feature-gate the doctests.
| * Fix no-parking_lot compilationZeyla Hellyer2017-11-011-1/+2
| | | | | | | | | | | | Fixes compilation without the `parking_lot` crate compiled. The prelude re-exposed `parking_lot`'s `Mutex` and `RwLock`, but didn't do so conditionally.
| * Use consistent token names in examplesZeyla Hellyer2017-11-015-5/+5
| | | | | | | | | | The names of environment variable tokens in the examples differed, so this makes them all use the same name.
| * Fix ping bot example (#211)Ben2017-10-311-1/+6
| |
| * Make Member::permissions return guild permissionsZeyla Hellyer2017-10-311-11/+3
| | | | | | | | | | | | Fixes what is realistically a bug where `Member::permissions` would retrieve the permissions for the Member in the default channel of the guild. This now only returns the guild-level permissions of the member.
| * Slightly clarify ratelimiting documentationZeyla Hellyer2017-10-301-2/+2
| |
| * Fix extraneous whitespaceZeyla Hellyer2017-10-301-1/+1
| |
| * Rename `Guild::permissions_for`->`permissions_in`Zeyla Hellyer2017-10-305-8/+19
| | | | | | | | | | | | Rename `Guild::permissions_for` to `Guild::permissions_in`, deprecating `Guild::permissions_for` which is only an inline method to `permissions_in`.
| * Guild::has_perms: use Guild::member_permissionsZeyla Hellyer2017-10-301-22/+14
| | | | | | | | | | | | Make `Guild`'s internal method `has_perms` go through `Guild::member_permissions` to check permissions, since all method that use it don't need channel-specific permissions.
| * Add Guild::member_permissionsZeyla Hellyer2017-10-301-0/+51
| | | | | | | | | | | | Add a method on the Guild for calculating only a member's guild-only permissions, not including the permissions for either the default channel or any specific channel.
| * Add some docs to `BanOptions`acdenisSK2017-10-301-0/+1
| |
| * Fix shard shutdown via ContextZeyla Hellyer2017-10-294-8/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the shard shutdown via the Context. This works by setting a "shutdown" field on the Shard struct as being true, indicating that the Shard has shutdown. The Shard Runner detects this and requests a shutdown from the Shard Manager. The ideal solution here would be to add a "Shutdown" variant to serenity::gateway::ConnectionStage, but that would be a breaking change, so we instead need to opt for adding a new struct to gateway::Shard. The Shard Manager has also been updated to only attempt the shutdown of a shard if it doesn't already know for certain that it shut itself down, which avoids an error logged saying that there was an error sending a shutdown message to its Shard Runner. When all shards have been shutdown (for most bots, this will only be one), the Shard Manager will end and the Client will stop its operations, returning thread control to the user.
| * Fix #206 (#207)Uninteresting Account2017-10-292-11/+28
| |
| * Fall back to `str::parse` if `parse_username` failsacdenisSK2017-10-241-3/+4
| |
* | Fix Help-Commands to list all eligible commands in DMs. (#212)Lakelezz2017-11-041-1/+1
| |
* | Fix Client's framework setZeyla Hellyer2017-11-031-2/+2
| | | | | | | | | | | | | | The Client would create two Arc's containing unique instances of a user's given Framework, one given to the ShardManager and one kept on the Client. This would result in the user's Framework on the Client being set, but the other left untouched and permanently staying empty.
* | `deserialize_i32` -> `deserialize_u8`acdenisSK2017-11-031-1/+1
| |
* | Redo client internals + gatewayZeyla Hellyer2017-11-0314-881/+1717
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit is a rewrite of the client module's internals and the gateway. The main benefit of this is that there is either 0 or 1 lock retrievals per event received, and the ability to utilize the ShardManager both internally and in userland code has been improved. The primary rework is in the `serenity::client` module, which now includes a few more structures, some changes to existing ones, and more functionality (such as to the `ShardManager`). The two notable additions to the client-gateway bridge are the `ShardMessenger` and `ShardManagerMonitor`. The `ShardMessenger` is a simple-to-use interface for users to use to interact with shards. The user is given one of these in the `serenity::client::Context` in dispatches to the `serenity::client::EventHandler`. This can be used for updating the presence of a shard, sending a guild chunk message, or sending a user's defined WebSocket message. The `ShardManagerMonitor` is a loop run in its own thread, potentially the main thread, that is responsible for receiving messages over an mpsc channel on what to do with shards via the `ShardManager`. For example, it will receive a message to shutdown a single shard, restart a single shard, or shutdown the entire thing. Users, in most applications, will not interact with the `ShardManagerMonitor`. Users using the `serenity::client::Client` interact with only the `ShardMessenger`. The `ShardManager` is now usable by the user and is available to them, and contains public functions for shutdowns, initializations, restarts, and complete shutdowns of shards. It contains utility functions like determining whether the `ShardManager` is responsible for a shard of a given ID and the IDs of shards currently active (having an associated `ShardRunner`). It can be found on `serenity::client::Client::shard_manager`. Speaking of the `ShardRunner`, it no longer owns a clone of an Arc to its assigned `serenity::gateway::Shard`. It now completely owns the Shard. This means that in order to open the shard, a `ShardRunner` no longer has to repeatedly retrieve a lock to it. This reduces the number of lock retrievals per event dispatching cycle from 3 or 4 depending on event type to 0 or 1 depending on whether it's a message create _and_ if the framework is in use. To interact with the Shard, one must now go through the previously mentioned `ShardMessenger`, which the `ShardRunner` will check for messages from on a loop. `serenity::client::Context` is now slightly different. Instead of the `shard` field being `Arc<Mutex<Shard>>`, it is an instance of a `ShardMessenger`. The interface is the same (minus losing some Shard-specific methods like `latency`), and `Context`'s shortcuts still exist (like `Context::online` or `Context::set_game`). It now additionally includes a `Context::shard_id` field which is a u64 containing the ID of the shard that the event was dispatched from. `serenity::client::Client` has one changed field name, one field that is now public, and a new field. `Client::shard_runners` is now `Client::shard_manager` of type `Arc<Mutex<ShardManager>>`. The `Client::token` field is now public. This can, for example, be mutated on token resets if you know what you're doing. `Client::ws_uri` is new and contains the URI for shards to use when connecting to the gateway. Otherwise, the Client's usage is unchanged. `serenity::gateway::Shard` has a couple of minor changes and many more public methods and fields. The `autoreconnect`, `check_heartbeat`, `handle_event`, `heartbeat`, `identify`, `initialize`, `reset`, `resume`, `reconnect`, and `update_presence` methods are now public. The `token` structfield is now public. There are new getters for various structfields, such as `heartbeat_instants` and `last_heartbeat_ack`. The breaking change on the `Shard` is that `Shard::handle_event` now takes an event by reference and, instead of returning `Result<Option<Event>>`, it now returns `Result<Option<ShardAction>>`. `serenity::gateway::ShardAction` is a light enum determining an action that someone _should_/_must_ perform on the shard, e.g. reconnecting or identifying. This is determined by `Shard::handle_event`. In total, there aren't too many breaking changes that most of userland use cases has to deal with -- at most, changing some usage of `Context`. Retrieving information like a Shard's latency is currently not possible anymore but work will be done to make this functionality available again.
* | Make the Client return a ResultZeyla Hellyer2017-11-0318-67/+126
| | | | | | | | | | | | | | | | The client now returns a Result in preparation of a future commit. Upgrade path: Handle the case of an error via pattern matching, or unwrap the Result.
* | Make `Command::aliases` publicacdenisSK2017-11-031-1/+2
| |
* | Fix framework Args testsZeyla Hellyer2017-11-011-71/+71
| | | | | | | | | | The tests were left untouched after a breaking change, resulting in them failing.
* | Fix audit logs a bitacdenisSK2017-11-014-42/+93
| |
* | Add a fallback to `RoleId::from_str` as wellacdenisSK2017-10-241-7/+8
| |
* | Remove unwrapsacdenisSK2017-10-242-2/+2
| |
* | Merge v0.4.2acdenisSK2017-10-2414-35/+409
|\ \
| * | Fall back to `str::parse` if `parse_username` failsacdenisSK2017-10-241-3/+4
| |/
| * Fix User::has_roleZeyla Hellyer2017-10-241-1/+5
| | | | | | | | | | | | | | | | | | Fix the return value of the function by properly checking whether the user has the role in the given guild. The function made the erraneous mistake of simply checking if the given guild had the role by Id, not whether the _member in the given guild_ had the role by Id.
| * Add a debug impl for `DispatchError`acdenisSK2017-10-231-0/+25
| | | | | | | | | | | | Why this was hand-made instead of derived is because of `CheckFailed`'s content, which is mostly `Command` not also deriving `Debug`; except that even `Command` has a trouble maker that would force us to do this hand-made anyway, `checks`. Fixes #204
| * Properly update emojis, fix shard retries, fix csLakelezz2017-10-233-6/+22
| | | | | | | | | | | | | | * If a guild's emojis are being altered, Serenity will straight up use the new `HashMap` instead of just extending. If `connect()` returns an `Err`, it will retry connecting. Cleaned up `help_command.rs`.
| * Add "zero-copy" parsingacdenisSK2017-10-212-1/+83
| |
| * Fix clippy warningsMei Boudreau2017-10-191-17/+14
| |
| * Fix shard connectionZeyla Hellyer2017-10-191-29/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes shard connections by removing the Default implementation for Shards. This was because when instantiating a Shard, `..Default::default()` syntax was used, which calls the `Default` implementation of the struct and moves the necessary values over to the overlying instantiation. When using `..Default::default()` syntax, all values in the Default implementation are instantiated, even ones that could be deemed unnecessary. For example, in the following sample code: ```rust struct Foo { x: bool, y: bool, } impl Default for Foo { fn default() -> Self { Self { x: true, y: true, } } } // ... let foo = Foo { x: false, ..Default::default() }; ``` `Foo::x` will still be instantiated in the Default implementation despite a value being set in the user's instantiation of Foo. This causes WebSocket client instantiation to be invalid in the Default instantiation, because the WebSocket instantiated has no base URL, causing an error to be returned. This commit resolves this issue by simply not having a Default implementation - due to the fact that a default implementation will never be valid and successful - and instead set all values in `Shard::new`. Notes: This issue surfaced with commit fcc4e2ce2e523248ed33c9f4853d3485cbc9b6e6 (PR #195). Closes #203.
| * Deprecate some text-only Channel methodsZeyla Hellyer2017-10-191-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some methods on `model::Channel` are only for text channels. Methods on Channel should be applicable to all channel types. Deprecates the following methods on `model::Channel`: - `create_reaction` - `delete_message` - `delete_reaction` - `edit_message` - `message` - `messages` - `reaction_users` - `say` - `send_files` - `send_message` - `unpin`
| * Re-export parking_lot::{Arc, Mutex} from preludeZeyla Hellyer2017-10-191-0/+1
| | | | | | | | | | | | These two types are used in public APIs, and so by re-exporting them it makes it easier for the user to use them without needing to depend on `parking_lot` themselves.