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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
use super::{Invite, RichInvite};
use ::client::rest;
use ::internal::prelude::*;
use ::model::ChannelId;
use ::utils::builder::CreateInvite;
use ::utils;
#[cfg(feature="cache")]
use super::permissions;
#[cfg(feature="cache")]
use super::utils as model_utils;
#[cfg(feature="cache")]
use ::client::CACHE;
impl Invite {
/// Accepts the invite, placing the current user in the [`Guild`] that the
/// invite was for.
///
/// Refer to [`rest::accept_invite`] for more information.
///
/// **Note**: This will fail if you are already in the guild, or are banned.
/// A ban is equivalent to an IP ban.
///
/// **Note**: Requires that the current user be a user account.
///
/// # Errors
///
/// If the `cache` features is enabled, then this returns a
/// [`ClientError::InvalidOperationAsBot`] if the current user does not have
/// the required [permission].
///
/// [`ClientError::InvalidOperationAsBot`]: ../client/enum.ClientError.html#variant.InvalidOperationAsBot
/// [`Guild`]: struct.Guild.html
/// [`rest::accept_invite`]: ../client/rest/fn.accept_invite.html
/// [permission]: permissions/index.html
pub fn accept(&self) -> Result<Invite> {
#[cfg(feature="cache")]
{
if CACHE.read().unwrap().user.bot {
return Err(Error::Client(ClientError::InvalidOperationAsBot));
}
}
rest::accept_invite(&self.code)
}
/// Creates an invite for a [`GuildChannel`], providing a builder so that
/// fields may optionally be set.
///
/// See the documentation for the [`CreateInvite`] builder for information
/// on how to use this and the default values that it provides.
///
/// Requires the [Create Invite] permission.
///
/// # Errors
///
/// If the `cache` is enabled, returns a [`ClientError::InvalidPermissions`]
/// if the current user does not have the required [permission].
///
/// [`ClientError::InvalidPermissions`]: ../client/enum.ClientError.html#variant.InvalidPermissions
/// [`CreateInvite`]: ../utils/builder/struct.CreateInvite.html
/// [`GuildChannel`]: struct.GuildChannel.html
/// [Create Invite]: permissions/constant.CREATE_INVITE.html
/// [permission]: permissions/index.html
pub fn create<C, F>(channel_id: C, f: F) -> Result<RichInvite>
where C: Into<ChannelId>, F: FnOnce(CreateInvite) -> CreateInvite {
let channel_id = channel_id.into();
#[cfg(feature="cache")]
{
let req = permissions::CREATE_INVITE;
if !model_utils::user_has_perms(channel_id, req)? {
return Err(Error::Client(ClientError::InvalidPermissions(req)));
}
}
rest::create_invite(channel_id.0, f(CreateInvite::default()).0.build())
}
/// Deletes the invite.
///
/// **Note**: Requires the [Manage Guild] permission.
///
/// # Errors
///
/// If the `cache` is enabled, returns a [`ClientError::InvalidPermissions`]
/// if the current user does not have the required [permission].
///
/// [`ClientError::InvalidPermissions`]: ../client/enum.ClientError.html#variant.InvalidPermissions
/// [Manage Guild]: permissions/constant.MANAGE_GUILD.html
/// [permission]: permissions/index.html
pub fn delete(&self) -> Result<Invite> {
#[cfg(feature="cache")]
{
let req = permissions::MANAGE_GUILD;
if !model_utils::user_has_perms(self.channel.id, req)? {
return Err(Error::Client(ClientError::InvalidPermissions(req)));
}
}
rest::delete_invite(&self.code)
}
/// Gets the information about an invite.
pub fn get(code: &str) -> Result<Invite> {
rest::get_invite(utils::parse_invite(code))
}
}
impl RichInvite {
/// Accepts the invite, placing the current user in the [`Guild`] that the
/// invite was for.
///
/// Refer to [`rest::accept_invite`] for more information.
///
/// **Note**: This will fail if you are already in the guild, or are banned.
/// A ban is equivalent to an IP ban.
///
/// **Note**: Requires that the current user be a user account.
///
/// # Errors
///
/// If the `cache` is enabled, returns a
/// [`ClientError::InvalidOperationAsBot`] if the current user is a bot
/// user.
///
/// [`ClientError::InvalidOperationAsBot`]: ../client/enum.ClientError.html#variant.InvalidOperationAsBot
/// [`Guild`]: struct.Guild.html
/// [`rest::accept_invite`]: ../client/rest/fn.accept_invite.html
pub fn accept(&self) -> Result<Invite> {
#[cfg(feature="cache")]
{
if CACHE.read().unwrap().user.bot {
return Err(Error::Client(ClientError::InvalidOperationAsBot));
}
}
rest::accept_invite(&self.code)
}
/// Deletes the invite.
///
/// Refer to [`rest::delete_invite`] for more information.
///
/// **Note**: Requires the [Manage Guild] permission.
///
/// # Errors
///
/// If the `cache` feature is enabled, then this returns a
/// [`ClientError::InvalidPermissions`] if the current user does not have
/// the required [permission].
///
/// [`ClientError::InvalidPermissions`]: ../client/enum.ClientError.html#variant.InvalidPermissions
/// [`Invite::delete`]: struct.Invite.html#method.delete
/// [`rest::delete_invite`]: ../client/rest/fn.delete_invite.html
/// [Manage Guild]: permissions/constant.MANAGE_GUILD.html
/// [permission]: permissions/index.html
pub fn delete(&self) -> Result<Invite> {
#[cfg(feature="cache")]
{
let req = permissions::MANAGE_GUILD;
if !model_utils::user_has_perms(self.channel.id, req)? {
return Err(Error::Client(ClientError::InvalidPermissions(req)));
}
}
rest::delete_invite(&self.code)
}
}
|