From 66b4eeb985e242cc0ee2925d639e976187727409 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Wed, 9 Apr 2025 17:04:03 +0500 Subject: feat: methods for parting channels from events --- src/betterttv.rs | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'src/betterttv.rs') diff --git a/src/betterttv.rs b/src/betterttv.rs index 0dbd4a3..09f544c 100644 --- a/src/betterttv.rs +++ b/src/betterttv.rs @@ -169,8 +169,15 @@ impl BetterTTVWSClient { } pub fn join_channel(&mut self, twitch_id: usize) { - if self.awaiting_channels.contains(&twitch_id) || self.joined_channels.contains(&twitch_id) - { + if self.joined_channels.contains(&twitch_id) { + return; + } + + self.awaiting_channels.insert(twitch_id); + } + + pub fn part_channel(&mut self, twitch_id: usize) { + if !self.joined_channels.contains(&twitch_id) { return; } @@ -254,12 +261,25 @@ impl BetterTTVWSClient { async fn join_channels(&mut self, stream: &mut WebSocketStream>) { for id in &self.awaiting_channels { - let json = serde_json::json!({ - "name": "join_channel", - "data": { - "name": format!("twitch:{}", id) - } - }); + let json = if self.joined_channels.contains(id) { + self.joined_channels.remove(id); + + serde_json::json!({ + "name": "part_channel", + "data": { + "name": format!("twitch:{}", id) + } + }) + } else { + self.joined_channels.insert(*id); + + serde_json::json!({ + "name": "join_channel", + "data": { + "name": format!("twitch:{}", id) + } + }) + }; stream .send(Message::Text( @@ -268,9 +288,7 @@ impl BetterTTVWSClient { .into(), )) .await - .expect("Error sending join request"); - - self.joined_channels.insert(*id); + .expect("Error sending join/part request"); } self.awaiting_channels.clear(); -- cgit v1.2.3