Gateway: Generic Shard and Twilight v0.8 Support (#109)
This PR adds support for twilight v0.8, mainly adapting to significant API changes introduced by v0.7. As a result of these, twilight no longer accepts arbitrary JSON input, so it seemed sensible to adapt our `Shard` design to no longer require the same. Adding to this, I've added in a trait to allow an arbitrary `Shard` to be installed, given only an implementation of a method to send a `VoiceStateUpdate`. Together, `Sharder::Generic` (songbird::shards::VoiceUpdate) and `Shard::Generic` (songbird::shards::GenericSharder) should allow any library to be hooked in to Songbird. This PR was tested using `cargo make ready` and by manually testing `examples/twilight`.
This commit is contained in:
@@ -30,14 +30,13 @@ use std::{collections::HashMap, env, error::Error, future::Future, sync::Arc};
|
||||
use tokio::sync::RwLock;
|
||||
use twilight_gateway::{Cluster, Event, Intents};
|
||||
use twilight_http::Client as HttpClient;
|
||||
use twilight_model::{channel::Message, gateway::payload::MessageCreate, id::GuildId};
|
||||
use twilight_model::{channel::Message, gateway::payload::incoming::MessageCreate, id::GuildId};
|
||||
use twilight_standby::Standby;
|
||||
|
||||
type State = Arc<StateRef>;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct StateRef {
|
||||
cluster: Cluster,
|
||||
http: HttpClient,
|
||||
trackdata: RwLock<HashMap<GuildId, TrackHandle>>,
|
||||
songbird: Songbird,
|
||||
@@ -69,12 +68,11 @@ async fn main() -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
|
||||
let (cluster, events) = Cluster::new(token, intents).await?;
|
||||
cluster.up().await;
|
||||
|
||||
let songbird = Songbird::twilight(cluster.clone(), user_id);
|
||||
let songbird = Songbird::twilight(Arc::new(cluster), user_id);
|
||||
|
||||
(
|
||||
events,
|
||||
Arc::new(StateRef {
|
||||
cluster,
|
||||
http,
|
||||
trackdata: Default::default(),
|
||||
songbird,
|
||||
|
||||
Reference in New Issue
Block a user