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
//! Descord is a minimal and easy to use discord api wrapper.
//!
//! # Example
//! ```rust
//! use descord::prelude::*;
//! #[tokio::main]
//! async fn main() {
//! let mut client = Client::new(
//! "TOKEN",
//! GatewayIntent::NON_PRIVILEGED
//! // for message commands
//! | GatewayIntent::MESSAGE_CONTENT,
//! "!", // default prefix for message command
//! )
//! .await;
//!
//! // register commands, events and slash commands manually
//! client.register_commands(vec![echo()]);
//! client.register_events(vec![ready()]);
//! client.register_slash_commands(vec![avatar()]).await;
//!
//!
//! // alternatively you can do this, this is neat but
//! // it is very counterintuitive since it read
//! // the files and find functions marked with
//! // proc macros
//!
//! // register_all!(client => ["src/main.rs", "src/file1.rs"]);
//!
//!
//! // start the bot!
//! client.login().await;
//! }
//!
//! // An event handler
//! #[descord::event] // Alternatively you can do `#[descord::event(ready)]`
//! async fn ready(data: ReadyData) {
//! println!(
//! "Logged in as {}#{}",
//! data.user.username, data.user.discriminator
//! )
//! }
//!
//! // A message command
//! //
//! // you can also do `#[descord::command(prefix = "new_prefix")]` to change
//! // the command prefix for this command to change
//! // the command prefix for this command
//! #[descord::command]
//! async fn echo(
//! /// information about the messgae
//! msg: Message,
//! /// some types can be parsed automatically
//! echo_what: String,
//! ) {
//! msg.reply(echo_what).await;
//! }
//!
//! // A slash command
//! #[descord::slash(description = "Get a user's avatar")]
//! async fn avatar(
//! interaction: Interaction,
//! #[doc = "User to fetch avatar from"] user: Option<User>,
//! ) {
//! let member = interaction.member.as_ref().unwrap();
//! let (username, avatar_url) = match user {
//! Some(user) => (
//! &user.username,
//! user.get_avatar_url(ImageFormat::WebP, None).unwrap(),
//! ),
//!
//! _ => (
//! &member.user.as_ref().unwrap().username,
//! member.get_avatar_url(ImageFormat::WebP, None).unwrap(),
//! ),
//! };
//!
//! // Creating an embed
//! let embed = EmbedBuilder::new()
//! .color(Color::Orange)
//! .title(&format!("{username}'s avatar"))
//! .image(avatar_url, None, None)
//! .build();
//!
//! interaction.reply(embed, false).await;
//! }
//! ```
pub use Client;
pub use color;
pub use intents;
pub use *;
pub use Event;
pub use Payload;
// TODO: change the error type
pub type DescordResult = ;
pub