aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-11-15 09:34:45 -0800
committerAustin Hellyer <[email protected]>2016-11-15 09:34:45 -0800
commit08721763df212cd46b4226d535da00fad9dc10e7 (patch)
treebbf65b7542d2b3f26f1f9cf2c2c90b3813e83524 /src/client
parentFeature-gate voice example (diff)
downloadserenity-08721763df212cd46b4226d535da00fad9dc10e7.tar.xz
serenity-08721763df212cd46b4226d535da00fad9dc10e7.zip
Add a message builder for Context::send_message
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)); ```
Diffstat (limited to 'src/client')
-rw-r--r--src/client/context.rs29
-rw-r--r--src/client/dispatch.rs2
2 files changed, 16 insertions, 15 deletions
diff --git a/src/client/context.rs b/src/client/context.rs
index f4ddd5e..0507bc3 100644
--- a/src/client/context.rs
+++ b/src/client/context.rs
@@ -7,6 +7,7 @@ use super::{STATE, http};
use super::login_type::LoginType;
use ::utils::builder::{
CreateInvite,
+ CreateMessage,
EditChannel,
EditGuild,
EditMember,
@@ -453,7 +454,7 @@ impl Context {
/// [`User::dm`]: ../model/struct.User.html#method.dm
pub fn dm<C: Into<ChannelId>>(&self, target_id: C, content: &str)
-> Result<Message> {
- self.send_message(target_id.into(), content, "", false)
+ self.send_message(target_id.into(), |m| m.content(content))
}
pub fn edit_channel<C, F>(&self, channel_id: C, f: F)
@@ -838,9 +839,9 @@ impl Context {
/// [`ClientError::MessageTooLong`]: enum.ClientError.html#variant.MessageTooLong
/// [`ClientError::NoChannelId`]: ../enum.ClientError.html#NoChannelId
/// [`Message`]: ../model/struct.Message.html
- pub fn say(&self, text: &str) -> Result<Message> {
+ pub fn say(&self, content: &str) -> Result<Message> {
if let Some(channel_id) = self.channel_id {
- self.send_message(channel_id, text, "", false)
+ self.send_message(channel_id, |m| m.content(content))
} else {
Err(Error::Client(ClientError::NoChannelId))
}
@@ -896,19 +897,19 @@ impl Context {
///
/// [`Channel`]: ../model/enum.Channel.html
/// [`ClientError::MessageTooLong`]: enum.ClientError.html#variant.MessageTooLong
- pub fn send_message<C>(&self, channel_id: C, content: &str, nonce: &str, tts: bool)
- -> Result<Message> where C: Into<ChannelId> {
- if let Some(length_over) = Message::overflow_length(content) {
- return Err(Error::Client(ClientError::MessageTooLong(length_over)));
+ pub fn send_message<C, F>(&self, channel_id: C, f: F) -> Result<Message>
+ where C: Into<ChannelId>, F: FnOnce(CreateMessage) -> CreateMessage {
+ let map = f(CreateMessage::default()).0;
+
+ if let Some(ref content) = map.get(&"content".to_owned()) {
+ if let &&Value::String(ref content) = content {
+ if let Some(length_over) = Message::overflow_length(&content) {
+ return Err(Error::Client(ClientError::MessageTooLong(length_over)));
+ }
+ }
}
- let map = ObjectBuilder::new()
- .insert("content", content)
- .insert("nonce", nonce)
- .insert("tts", tts)
- .build();
-
- http::send_message(channel_id.into().0, map)
+ http::send_message(channel_id.into().0, Value::Object(map))
}
pub fn set_game(&self, game: Option<Game>) {
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index 985f03e..6295bc9 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -1,5 +1,5 @@
use std::sync::{Arc, Mutex};
-use std::{mem, thread};
+use std::thread;
use super::event_store::EventStore;
use super::login_type::LoginType;
use super::{STATE, Connection, Context};