#discord #gateway #spectacles #shard #distributed #message

spectacles-gateway

用于Spectacles的分布式Discord网关接口

4个版本

0.3.0 2019年4月13日
0.2.3 2019年3月24日
0.2.1 2019年3月17日
0.2.0 2019年3月11日

#8 in #shard


spectacles 中使用

MIT 许可证

130KB
2.5K SLoC

crates-io-badge Downloads docs-badge

Spectacles Gateway

用于Rust的丰富Spectacles网关客户端。

关于

此包允许您与Discord网关交互。有关如何使用此包的更多信息,请参阅Discord网关文档

功能

  • 异步WebSocket消息处理。
  • 零停机时间分片创建。
  • 与spectacles-brokers包无缝集成。

示例 - 基础分片器

use std::env::var;
use spectacles_gateway::{ShardManager, ShardStrategy};
use spectacles_model::gateway::ReceivePacket;
use futures::future::Future;

fn main() {
    let token = var("DISCORD_TOKEN").expect("No Discord Token was provided.");
    // tokio.run() boostraps our Tokio application.
    tokio::run(ShardManager::new(token, ShardStrategy::Recommended)
        .map(|mut manager| {
            // The start_spawn() method returns a tuple of async streams, for handling spawned shards and shard events.
            let (spawner, events) = manager.start_spawn();
            // Now, we poll the streams concurrently in separate threads.
            tokio::spawn(spawner.for_each(|shard| {
                println!("Shard {:?} has successfully spawned.", shard.lock().info);
            
                Ok(())
            }));
            tokio::spawn(events.for_each(|event| {
                if let Some(evt) = event.packet.t {
                    println!("Received event from Shard {:?}: {:?}", event.shard.lock().info, evt);
                };
            
                Ok(())
            }));
        })
        .map_err(|err| {
            eprintln!("Failed to bootstrap sharding manager. {:?}", err);
        })
    );
}

依赖项

~19–30MB
~543K SLoC