3 个版本

0.1.2 2019 年 4 月 16 日
0.1.1 2019 年 4 月 16 日
0.1.0 2019 年 4 月 13 日

#58 in #discord-api

MIT 许可证

150KB
3K SLoC

crates-io-badge Downloads docs-badge

眼镜 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