3 个版本
0.1.2 | 2019 年 4 月 16 日 |
---|---|
0.1.1 | 2019 年 4 月 16 日 |
0.1.0 | 2019 年 4 月 13 日 |
#58 in #discord-api
150KB
3K SLoC
眼镜 REST 客户端
此包提供了一种丰富的方式来在您的应用程序中向 Discord API 发送 REST 请求。
功能
- 完全覆盖 Discord API。
- 使用 reqwest 库进行异步、非阻塞的 HTTP 请求。
- 内部速率限制,支持外部 HTTP 代理。
有关 Discord OAuth 的几个端点可能被省略。
lib.rs
:
眼镜 REST
眼镜 REST 提供了一个简单易用的客户端,用于向 Discord API 发送 HTTP 请求。所有 HTTP 请求都是异步的,并且永远不会阻塞线程,这得益于 Tokio 运行时。
创建客户端
负责执行所有请求的 RestClient
可以通过 new
函数轻松构建。
use spectacles_rest::RestClient;
let token = std::env::var("DISCORD_TOKEN").expect("Failed to parse token");
let rest = RestClient::new(token, true);
客户端接受一个布尔值作为第二个参数,该参数确定是否在每个请求上使用内部速率限制器。
视图
客户端附带了三个用于 Discord API 特定端点的视图。
ChannelView
提供了一组与 Discord 频道交互的方法。
GuildView
提供了一组与 Discord 公会或“服务器”交互的方法。
WebhookView
提供了一组与 Discord Webhook 交互的方法。
以下是一个使用 ChannelView 向 Discord 频道发送消息的简要示例。
use tokio::prelude::*;
use spectacles_rest::RestClient;
use spectacles_model::Snowflake;
fn main() {
// Initialize the Rest Client, with a token.
let rest = RestClient::new(token, true);
tokio::run(rest.channel(&Snowflake(CHANNEL_ID_HERE)).create_message("Hello World")
.map(|message| println!("Message Sent: {:?}", message))
.map_err(|err| {
eprintln!("Error whilst attempting to send message. {:?}", err);
})
);
}
速率限制
如前所述,该库包括一个内存中的速率限制器桶系统,用于预先管理 Discord 速率限制。如果您不打算从单个服务器访问 Discord API,则这已足够。如果您计划分布式请求,则需要使用外部状态来跟踪速率限制。
该库目前支持使用 Spectacles 客户端中的自定义 Discord 代理作为处理请求的中心枢纽。
use spectacles_rest::RestClient;
let proxy = std::env::var("PROXY").expect("Failed to parse proxy URL.");
let rest = RestClient::new(token, false) // false tells the client to skip the default in memory rate limiter.
.set_proxy(proxy);
未来将考虑更多的速率限制策略。
安装
只需将包添加到您的 Cargo.toml 文件中。
[dependencies]
spectacles-rest = "0.1.0"
依赖项
~21–31MB
~539K SLoC