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
use std::fmt;

/// The available OAuth2 Scopes.
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum OAuth2Scope {
    /// For oauth2 bots, this puts the bot in the user's selected guild by default.
    Bot,
    /// Allows your app to use Slash Commands in a guild.
    ApplicationsCommands,
    /// Allows your app to update its Slash Commands via this bearer token - client credentials grant only.
    ApplicationsCommandsUpdate,

    /// Allows `/users/@me` without [`Self::Email`].
    Identify,
    /// Enables `/users/@me` to return an `email` field.
    Email,
    /// Allows `/users/@me/connections` to return linked third-party accounts.
    Connections,
    /// Allows `/users/@me/guilds` to return basic information about all of a user's guilds.
    Guilds,
    /// Allows `/guilds/{guild.id}/members/{user.id}` to be used for joining users to a guild.
    GuildsJoin,
    /// Allows your app to join users to a group dm.
    GdmJoin,
    /// For local rpc server access, this allows you to control a user's local Discord client -
    /// requires Discord approval.
    Rpc,
    /// For local rpc server api access, this allows you to receive notifications pushed out to the user - requires Discord approval.
    RpcNotificationsRead,
    RpcVoiceRead,
    RpcVoiceWrite,
    RpcActivitiesWrite,
    /// This generates a webhook that is returned in the oauth token response for authorization code grants.
    WebhookIncomming,
    /// For local rpc server api access, this allows you to read messages from all client channels
    /// (otherwise restricted to channels/guilds your app creates).
    MessagesRead,
    /// Allows your app to upload/update builds for a user's applications - requires Discord approval.
    ApplicationsBuildsUpload,
    /// Allows your app to read build data for a user's applications.
    ApplicationsBuildsRead,
    /// Allows your app to read and update store data (SKUs, store listings, achievements, etc.) for a user's applications.
    ApplicationsStoreUpdate,
    /// Allows your app to read entitlements for a user's applications.
    ApplicationsEntitlements,
    /// Allows your app to fetch data from a user's "Now Playing/Recently Played" list - requires Discord approval.
    ActivitiesRead,
    /// allows your app to update a user's activity - requires Discord approval (Not required for gamesdk activity manager!).
    ActivitiesWrite,
    /// Allows your app to know a user's friends and implicit relationships - requires Discord approval.
    RelactionshipsRead,
}

impl fmt::Display for OAuth2Scope {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let val = match self {
            Self::Bot => "bot",
            Self::ApplicationsCommands => "applications.commands",
            Self::ApplicationsCommandsUpdate => "applications.commands.update",
            Self::Identify => "identify",
            Self::Email => "email",
            Self::Connections => "connections",
            Self::Guilds => "guilds",
            Self::GuildsJoin => "guilds.join",
            Self::GdmJoin => "gdm.join",
            Self::Rpc => "rpc",
            Self::RpcNotificationsRead => "rpc.notifications.read",
            Self::RpcVoiceRead => "rpc.voice.read",
            Self::RpcVoiceWrite => "rpc.voice.write",
            Self::RpcActivitiesWrite => "rpc.activities.write",
            Self::WebhookIncomming => "webhook.incoming",
            Self::MessagesRead => "messages.read",
            Self::ApplicationsBuildsUpload => "applications.builds.upload",
            Self::ApplicationsBuildsRead => "applications.builds.read",
            Self::ApplicationsStoreUpdate => "applications.store.update",
            Self::ApplicationsEntitlements => "applications.entitlements",
            Self::ActivitiesRead => "activities.read",
            Self::ActivitiesWrite => "activities.write",
            Self::RelactionshipsRead => "relationships.read",
        };

        f.write_str(val)
    }
}