aboutsummaryrefslogtreecommitdiff
path: root/src/utils/builder/create_invite.rs
blob: c8e175a863ce2e8c042f6167313060773d0057a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use serde_json::builder::ObjectBuilder;
use serde_json::Value;
use std::default::Default;

/// A builder to create a [`RichInvite`] for use via [`Context::create_invite`].
///
/// This is a structured and cleaner way of creating an invite, as all
/// parameters are optional.
///
/// # Examples
///
/// Create an invite with a max age of 3600 seconds and 10 max uses:
///
/// ```rust,ignore
/// use serenity::Client;
/// use std::env;
///
/// let mut client = Client::login_bot(&env::var("DISCORD_BOT_TOKEN").unwrap());
///
/// client.on_message(|context, message| {
///     if message.content == "!invite" {
///         let invite = context.create_invite(message.channel_id, |i| i
///             .max_age(3600)
///             .max_uses(10));
///     }
/// });
/// ```
///
/// [`Context::create_invite`]: ../client/struct.Context.html#method.create_invite
/// [`RichInvite`]: ../model/struct.Invite.html
pub struct CreateInvite(pub ObjectBuilder);

impl CreateInvite {
    /// The duration that the invite will be valid for.
    ///
    /// Set to `0` for an invite which does not expire after an amount of time.
    ///
    /// Defaults to `86400`, or 24 hours.
    pub fn max_age(self, max_age: u64) -> Self {
        CreateInvite(self.0.insert("max_age", max_age))
    }

    /// The number of uses that the invite will be valid for.
    ///
    /// Set to `0` for an invite which does not expire after a number of uses.
    ///
    /// Defaults to `0`.
    pub fn max_uses(self, max_uses: u64) -> Self {
        CreateInvite(self.0.insert("max_uses", max_uses))
    }

    /// Whether an invite grants a temporary membership.
    ///
    /// Defaults to `false`.
    pub fn temporary(self, temporary: bool) -> Self {
        CreateInvite(self.0.insert("temporary", temporary))
    }

    /// Whether or not to try to reuse a similar invite.
    ///
    /// Defaults to `false`.
    pub fn unique(self, unique: bool) -> Self {
        CreateInvite(self.0.insert("unique", unique))
    }
}

impl Default for CreateInvite {
    /// Creates a builder with default values, setting `validate` to `null`.
    fn default() -> CreateInvite {
        CreateInvite(ObjectBuilder::new().insert("validate", Value::Null))
    }
}