maybe fix bot leaving too early, and playing multiple sounds at once
parent
cd4de895eb
commit
0e6bc2d3dd
|
@ -639,7 +639,7 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
|||
|
||||
[[package]]
|
||||
name = "memejoin-rs"
|
||||
version = "0.1.0-alpha"
|
||||
version = "0.1.1-alpha"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "memejoin-rs"
|
||||
version = "0.1.0-alpha"
|
||||
version = "0.1.1-alpha"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
@ -9,7 +9,7 @@ edition = "2021"
|
|||
serde = "1.0.152"
|
||||
serde_json = "1.0.93"
|
||||
serenity = { version = "0.11.5", default-features = false, features = ["client", "gateway", "rustls_backend", "model", "cache", "voice"] }
|
||||
songbird = "0.3.0"
|
||||
songbird = { version = "0.3.0", features = [ "builtin-queue" ] }
|
||||
tokio = { version = "1.25.0", features = ["rt-multi-thread", "macros", "signal"] }
|
||||
tracing = "0.1.37"
|
||||
tracing-subscriber = "0.3.16"
|
||||
|
|
|
@ -35,15 +35,18 @@
|
|||
packages = with pkgs; flake-utils.lib.flattenTree rec {
|
||||
default = rustPlatform.buildRustPackage rec {
|
||||
name = "memejoin-rs";
|
||||
version = "0.1.0-alpha";
|
||||
version = "0.1.1-alpha";
|
||||
src = self;
|
||||
cargoSha256 = "dGc6db0A7Tp+ZnsPAPCUbmmbNq/N/1DhKOb2gRPisN0=";
|
||||
nativeBuildInputs = [ local-rust cmake gcc libopus ];
|
||||
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
};
|
||||
};
|
||||
|
||||
docker = dockerTools.buildImage {
|
||||
name = "memejoin-rs";
|
||||
tag = "0.1.0.alpha";
|
||||
tag = "0.1.1.alpha";
|
||||
copyToRoot = buildEnv {
|
||||
name = "image-root";
|
||||
paths = [ default ffmpeg libopus youtube-dl ];
|
||||
|
|
31
src/main.rs
31
src/main.rs
|
@ -28,18 +28,21 @@ impl songbird::EventHandler for TrackEventHandler {
|
|||
&'a self,
|
||||
ctx: &'b songbird::EventContext<'c>,
|
||||
) -> Option<songbird::Event> {
|
||||
if let songbird::EventContext::Track(track) = ctx {
|
||||
if let Some(context) = track.get(0) {
|
||||
if context.0.playing == songbird::tracks::PlayMode::End
|
||||
|| context.0.playing == songbird::tracks::PlayMode::Stop
|
||||
{
|
||||
if let songbird::EventContext::Track(tracks) = ctx {
|
||||
for (track_state, _track_handle) in tracks.iter() {
|
||||
// If any track is still playing, don't leave the channel yet
|
||||
// there are more sounds to be played (I think)
|
||||
if track_state.playing == songbird::tracks::PlayMode::Play {
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let manager = songbird::get(&self.ctx).await.expect("should get manager");
|
||||
if let Err(err) = manager.leave(self.guild_id).await {
|
||||
error!("Failed to leave voice channel: {err:?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
}
|
||||
|
@ -89,6 +92,10 @@ impl EventHandler for Handler {
|
|||
async fn voice_state_update(&self, ctx: Context, old: Option<VoiceState>, new: VoiceState) {
|
||||
if old.is_none() {
|
||||
if let (Some(member), Some(channel_id)) = (new.member, new.channel_id) {
|
||||
if member.user.name == "MemeJoin" {
|
||||
return;
|
||||
}
|
||||
|
||||
info!(
|
||||
"{}#{} joined voice channel {:?} in {:?}",
|
||||
member.user.name,
|
||||
|
@ -100,10 +107,6 @@ impl EventHandler for Handler {
|
|||
.unwrap_or("no_guild_name".to_string())
|
||||
);
|
||||
|
||||
if member.user.name == "MemeJoin" {
|
||||
return;
|
||||
}
|
||||
|
||||
let settings = {
|
||||
let data_read = ctx.data.read().await;
|
||||
|
||||
|
@ -151,8 +154,8 @@ impl EventHandler for Handler {
|
|||
}
|
||||
};
|
||||
|
||||
let track_handle = handler.play_source(source);
|
||||
if let Err(err) = track_handle.add_event(
|
||||
let track_handler = handler.enqueue_source(source);
|
||||
if let Err(err) = track_handler.add_event(
|
||||
songbird::Event::Track(songbird::TrackEvent::End),
|
||||
TrackEventHandler {
|
||||
ctx,
|
||||
|
|
Loading…
Reference in New Issue