#discord #twilight #discord-api #lavalink #api-bindings #send-event

twilight-lavalink

Twilight生态系统中的Lavalink客户端

46次发布

0.16.0-rc.12024年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客户端

Download history 309/week @ 2024-04-14 6/week @ 2024-04-21 5/week @ 2024-04-28 355/week @ 2024-07-28

每月 355 次下载
twilight 中使用

ISC 许可证

1.5MB
32K SLoC

twilight-lavalink

codecov badge discord badge github badge license badge rust badge

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-websocketsnative-tls 功能。

要启用 native-tls,在你的 Cargo.toml 文件中做如下设置

[dependencies]
twilight-lavalink = { default-features = false, features = ["native-tls"], version = "0.2" }

rustls-native-roots

rustls-native-roots 功能启用 tokio-websocketsrustls-native-roots 功能,该功能使用 rustls 作为 TLS 后端,并使用 rustls-native-certs 作为根证书。

默认情况下启用此功能。

rustls-webpki-roots

rustls-webpki-roots 功能启用 tokio-websocketsrustls-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