aboutsummaryrefslogtreecommitdiff
path: root/src/ext
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix framework before checkAustin Hellyer2016-12-181-1/+1
| | | | | | The framework would ignore the `before` function if the command was not ran by an owner. Instead, flip the conditions so that it's always run, and then the result is succeeded by an owner check.
* Fix framework command cooldownsAustin Hellyer2016-12-171-1/+1
|
* Remove useless cache useAustin Hellyer2016-12-171-3/+0
|
* Remove cache feature dependency for frameworkAustin Hellyer2016-12-161-55/+65
|
* Make 'voice' feature not require 'cache'Austin Hellyer2016-12-165-7/+18
| | | | | | | | The voice module required the cache feature in order to access the current user's Id. Instead, just copy the Id into the VoiceManager and distribute it from there -- the memory impact will be very minimal in comparison to the benefits of not needing to constantly unlock the Cache and not needing the user to be forced to use the Cache.
* Framework: format argument number on parse errorIllia2016-12-161-2/+9
|
* Fix framework owners_only checkIllia2016-12-161-6/+8
|
* Plain help: put groups on their own lineAustin Hellyer2016-12-141-0/+2
|
* Fix plain help command usage outputAustin Hellyer2016-12-141-0/+2
|
* Framework blocks, disabled commands, improvementsIllia2016-12-144-48/+205
|
* Slightly rework framework bucketsAustin Hellyer2016-12-146-207/+200
|
* Implement command groups and bucketsIllia2016-12-137-81/+703
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Implement command groups * change to ref mut * Implement framework API. * Remove commands field * Make it all work * Make example use command groups * Requested changes * Implement adding buckets * Add ratelimit check function * Finish everything * Fix voice example * Actually fix it * Fix doc tests * Switch to result * Savage examples * Fix docs * Fixes * Accidental push * 👀 * Fix an example * fix some example * Small cleanup * Abstract ratelimit bucket logic
* More config for CreateCommand, add various methodsIllia2016-12-105-5/+160
| | | | | | | | | | | | | | | | | | | | | | | | | | Adds multiple configurations to the command builder, and adds methods to various structs. Context::get_current_user is a shortcut to retrieve the current user from the cache. Message::get_member retrieves the member object of the message, if sent in a guild. Message::is_private checks if the message was sent in a Group or PrivateChannel. User::member retrieves the user's member object in a guild by Id; Adds 6 configurations to the command builder: - dm_only: whether the command can only be used in direct messages; - guild_only: whether the command can only be used in guilds; - help_available: whether the command should be displayed in the help list; - max_args: specify the maximum number of arguments a command must be given; - min_args: specify the minimum number of arguments a command must be given; - required_permissions: the permissions a member must have to be able to use the command;
* Abstract command fields to typesAustin Hellyer2016-12-093-14/+20
|
* Fix some clippy lintsAustin Hellyer2016-12-091-6/+6
|
* Command builder, quoted args, and multi-prefixesIllia2016-12-094-32/+278
| | | | | Add a command builder, which can take arguments such as multiple checks, quoted arguments, and multiple prefix support, as well as dynamic prefixes per context.
* Change all try's into ?sacdenisSK2016-12-072-58/+56
| | | This breaks compatibility with < 1.13, but we didn't support that anyway.
* Allow mentionable structs to be used as command argumentsIllia2016-12-071-0/+14
| | | | | Add EmojiIdentifier, allow User, UserId, Role, RoleId, EmojiIdentifier, Channel and ChannelId to be used as arguments for commands and add more parsing functions to utils
* Add Member::colourIllia2016-12-031-3/+3
| | | | Add a colour method to retrieve the member's top role with a unique colour, or the default colour if none can be applied.
* Fix a typoAustin Hellyer2016-12-011-1/+1
|
* Make command macro functions publicAustin Hellyer2016-11-301-2/+2
| | | | This will allow the command macro to be used in sub-modules.
* Re-order example Cargo.toml'sAustin Hellyer2016-11-301-1/+2
|
* Clarify some docsAustin Hellyer2016-11-301-1/+1
|
* Add documentation for examplesAustin Hellyer2016-11-291-3/+3
| | | | | | | | The examples include a README located in `examples/README.md`, which contains instructions for running these examples. They act as a simple form of tutorial to the library, without getting into too many details.
* Clean up the codebaseAustin Hellyer2016-11-296-191/+34
|
* Add initial audio supportAustin Hellyer2016-11-299-147/+548
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Audio can be played with support by passing one of the following into the `Handler::play` method: `serenity::ext::voice::{ffmpeg, pcm, ytdl}` functions, where - `ffmpeg` accepts a path (such as a `File`); - `pcm` accepts a raw reader source; - `ytdl` accepts a URI, which works with everything youtube-dl supports: <https://github.com/rg3/youtube-dl/blob/master/docs/supportedsites.md> The source can be stopped via [`Handler::stop`]. Receive is supported through [`Handler::listen`], which accepts a `serenity::ext::voice::AudioReceiver` implementation. An example is provided in the form of the file located at `./examples/07_voice.rs`, which can be run by cloning the repo and performing the command `cargo run --example 07_voice`. Prior to running the command, set a bot token as the value of the env variable `DISCORD_TOKEN`. The example supports: - `deafen`: deafens the bot; - `join`: joins a voice channel by ID. The example is a primitive implementation, and requires the ID of the channel to be passed to the bot as a command of `~join 131937933270712320`; - `leave`: leaves the current voice channel, if in one; - `mute`: mutes the bot and will continue to play source audio; - `play`: plays source audio from a URI, through a command like `~play https://www.youtube.com/watch?v=5KJjBRm0ElA`; - `ping`: responds with "Pong!" to ensure the bot is working properly; - `undeafen`: undeafens the bot, if that's actually a word; - `unmute`: unmutes the bot. Documentation for audio can be found at: <https://serenity.zey.moe/serenity/ext/voice/index.html>
* Fix doctestsAustin Hellyer2016-11-281-3/+3
|
* Add before/after framework command hooksIllia K2016-11-282-5/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These hooks will each be run prior to or after the command, and will finish execution before executing the command. These can be configured in a Framework via: ```rs client.with_framework(|f| f .before(|_context, message, _command_name| { println!("Got command '{}'", command_name); }) .after(|_context, _message, command_name| { println!("Finished command '{}'", command_name); })); ``` This does introduce a backwards compatibility break, by requiring commands' Context/Message to be borrowed Upgrade path: If not using the `command!` macro, modify command signatures from: ```rs fn some_command(context: Context, message: Message, args: Vec<String>) ``` to ```rs fn some_command(context: &Context, message: &Message, args: Vec<String>) ```
* Improve docs and add new message builder methodsIllia K2016-11-282-9/+9
| | | | | Add documentation for some missing methods - such as Game methods - and add more methods to the Message Builder.
* Correctly track Cache's unavailable guildsAustin Hellyer2016-11-271-0/+6
| | | | | When a guild delete is received, add its Id to the unavailable guild list, and when a create is received, remove it.
* Add a bit more docsAustin Hellyer2016-11-265-9/+408
|
* Make Cache::get_channel return a referenceAustin Hellyer2016-11-261-4/+23
| | | | | | | Additionally, allow it to search the groups' and private channels' maps in the cache. As these are usually O(1) operations, it's cheap to allow, in comparison to the current unoptimized method of getting a guild's channel.
* Remove the 'extras' feature flagAustin Hellyer2016-11-261-1/+0
| | | | | | There aren't many things behind this flag (6), and it only causes annoyances for locally-generated docs, which won't show these mostly-useful items behind the flag.
* Add no-named-argument command macro matchAustin Hellyer2016-11-261-1/+37
|
* Add Cache::get_guild_channelAustin Hellyer2016-11-261-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an 'extras'-enabled function to get a guild's channel. This will allow a simple Option pattern match over the result, rather than working with an Option<Channel<T>>. Example of old code vs. new code, in the context of an event handler: Old: ```rs use serenity::cache::CACHE; use serenity::model::Channel; let cache = CACHE.read().unwrap(); let channel = match cache.get_channel(channel_id) { Some(Channel::Guild(channel)) => channel, Some(Channel::Private(_)) => { context.say("Groups and DMs not supported") .map_err(|x| println!("Err sending message: {:?}", why); return; }, None => { context.say("Could not find channel") .map_err(|x| println!("Err sending message: {:?}", x); return; }, } ``` New: ```rs use serenity::cache::CACHE; let cache = CACHE.read().unwrap(); let channel = match cache.get_guild_channel(channel_id) { Some(channel) => channel, None => { context.say("Could not find channel") .map_err(|x| println!("Err sending message: {:?}", x)); return; }, }; ```
* Move events into their own moduleAustin Hellyer2016-11-252-1/+2
| | | | | | | | | | | | | | | | | | | | 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; ```
* Rename PublicChannel to GuildChannelAustin Hellyer2016-11-251-17/+17
|
* Rename the `http` module to `rest`Austin Hellyer2016-11-252-5/+5
|
* Rename guild structs to Guild and PartialGuildAustin Hellyer2016-11-241-6/+6
|
* Change the CACHE to be an RwLockAustin Hellyer2016-11-221-1/+1
| | | | | | | | | | | | | | | | | | 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.
* Rename the State to CacheAustin Hellyer2016-11-223-16/+16
|
* Don't unnecessarily borrow some if-letsAustin Hellyer2016-11-211-1/+1
|
* Re-organize the client moduleAustin Hellyer2016-11-212-7/+7
| | | | | | | | | | | | | | | | | | 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.
* Add framework command named argumentsAustin Hellyer2016-11-211-0/+23
|
* Rename state methods from find_ to get_Austin Hellyer2016-11-191-7/+7
| | | | | | | | | | 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.
* Register friend suggestion eventsAustin Hellyer2016-11-181-0/+2
|
* A bit of docsAustin Hellyer2016-11-183-6/+155
|
* Fix a few clippy lintsAustin Hellyer2016-11-151-8/+9
|
* Add state/framework/etc. conditional compile flagsAustin Hellyer2016-11-152-5/+10
| | | | | | | | | | | | | | | 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.
* State: on update, return old instancesAustin Hellyer2016-11-151-70/+155
| | | | | | | | | 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.