46次发布
0.16.0-rc.1 | 2024年2月21日 |
---|---|
0.15.3 | 2023年9月10日 |
0.15.1 | 2023年2月26日 |
0.14.0 | 2022年11月14日 |
0.2.1 | 2020年11月2日 |
#99 in HTTP客户端
每月 355 次下载
在 twilight 中使用
1.5MB
32K SLoC
twilight-lavalink
twilight-lavalink
是Twilight生态系统中的Lavalink客户端。
它包括支持管理多个节点,一个玩家管理器,方便使用玩家发送事件并获取每个公会的信息,以及一个HTTP模块,用于使用http
crate创建请求并提供模型以反序列化其响应。它将通过处理事件(通过客户端的process
方法,您必须对每个收到的Voice State Update和Voice Server Update进行调用)自动处理向Lavalink发送语音频道更新的操作。
特性
http支持
http支持
特性为http
crate添加了对请求类型的支持。默认启用。
TLS
twilight-lavalink
具有启用tokio-websockets
TLS功能的特性。这些特性互斥。默认启用rustls-native-roots
。
原生TLS
native-tls
功能启用 tokio-websockets
的 native-tls
功能。
要启用 native-tls
,在你的 Cargo.toml
文件中做如下设置
[dependencies]
twilight-lavalink = { default-features = false, features = ["native-tls"], version = "0.2" }
rustls-native-roots
rustls-native-roots
功能启用 tokio-websockets
的 rustls-native-roots
功能,该功能使用 rustls
作为 TLS 后端,并使用 rustls-native-certs
作为根证书。
默认情况下启用此功能。
rustls-webpki-roots
rustls-webpki-roots
功能启用 tokio-websockets
的 rustls-webpki-roots
功能,该功能使用 rustls
作为 TLS 后端,并使用 webpki-roots
作为根证书。
在基于 scratch
的 Docker 容器中,应优先使用此功能而非 rustls-native-roots
。
示例
创建一个 客户端,添加一个 节点,并将事件传递给客户端以 处理 事件
use std::{
env,
future::Future,
net::SocketAddr,
str::FromStr,
};
use twilight_gateway::{Event, EventTypeFlags, Intents, Shard, ShardId, StreamExt as _};
use twilight_http::Client as HttpClient;
use twilight_lavalink::{http::LoadedTracks, model::Play, Lavalink};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Initialize the tracing subscriber.
tracing_subscriber::fmt::init();
let token = env::var("DISCORD_TOKEN")?;
let lavalink_host = SocketAddr::from_str(&env::var("LAVALINK_HOST")?)?;
let lavalink_auth = env::var("LAVALINK_AUTHORIZATION")?;
let shard_count = 1u32;
let http = HttpClient::new(token.clone());
let user_id = http.current_user().await?.model().await?.id;
let lavalink = Lavalink::new(user_id, shard_count);
lavalink.add(lavalink_host, lavalink_auth).await?;
let intents = Intents::GUILD_MESSAGES | Intents::GUILD_VOICE_STATES;
let mut shard = Shard::new(ShardId::ONE, token, intents);
while let Some(item) = shard.next_event(EventTypeFlags::all()).await {
let Ok(event) = item else {
tracing::warn!(source = ?item.unwrap_err(), "error receiving event");
continue;
};
lavalink.process(&event).await?;
}
Ok(())
}
基本机器人的示例位于 twilight
仓库的根目录。
依赖关系
~7–20MB
~284K SLoC