3 Коміти 22185b9328 ... 1d1fa3b97c

Автор SHA1 Опис Дата
  Frans Bergman 1d1fa3b97c Do not count bot user when voting to skip 10 місяців тому
  Frans Bergman 4b11202152 Update serenity to 0.12 10 місяців тому
  Frans Bergman 22185b9328 WIP: Update serenity to 0.12 10 місяців тому
5 змінених файлів з 116 додано та 13 видалено
  1. 104 0
      Cargo.lock
  2. 6 2
      Cargo.toml
  3. 1 1
      src/audio/audio.rs
  4. 2 4
      src/audio/audio_state.rs
  5. 3 6
      src/audio/subprocess.rs

+ 104 - 0
Cargo.lock

@@ -520,6 +520,12 @@ dependencies = [
  "version_check",
 ]
 
+[[package]]
+name = "extended"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365"
+
 [[package]]
 name = "fastrand"
 version = "2.1.1"
@@ -1180,6 +1186,7 @@ dependencies = [
  "serde_json",
  "serenity",
  "songbird",
+ "symphonia",
  "symphonia-core",
  "tokio",
 ]
@@ -2198,10 +2205,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "815c942ae7ee74737bb00f965fa5b5a2ac2ce7b6c01c0cc169bbeaf7abd5f5a9"
 dependencies = [
  "lazy_static",
+ "symphonia-bundle-flac",
+ "symphonia-codec-adpcm",
+ "symphonia-codec-pcm",
+ "symphonia-codec-vorbis",
  "symphonia-core",
+ "symphonia-format-mkv",
+ "symphonia-format-ogg",
+ "symphonia-format-riff",
  "symphonia-metadata",
 ]
 
+[[package]]
+name = "symphonia-bundle-flac"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72e34f34298a7308d4397a6c7fbf5b84c5d491231ce3dd379707ba673ab3bd97"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-codec-adpcm"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c94e1feac3327cd616e973d5be69ad36b3945f16b06f19c6773fc3ac0b426a0f"
+dependencies = [
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-pcm"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f395a67057c2ebc5e84d7bb1be71cce1a7ba99f64e0f0f0e303a03f79116f89b"
+dependencies = [
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-vorbis"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a98765fb46a0a6732b007f7e2870c2129b6f78d87db7987e6533c8f164a9f30"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-utils-xiph",
+]
+
 [[package]]
 name = "symphonia-core"
 version = "0.5.4"
@@ -2215,6 +2272,43 @@ dependencies = [
  "log",
 ]
 
+[[package]]
+name = "symphonia-format-mkv"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb43471a100f7882dc9937395bd5ebee8329298e766250b15b3875652fe3d6f"
+dependencies = [
+ "lazy_static",
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-format-ogg"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ada3505789516bcf00fc1157c67729eded428b455c27ca370e41f4d785bfa931"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-format-riff"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f7be232f962f937f4b7115cbe62c330929345434c834359425e043bfd15f50"
+dependencies = [
+ "extended",
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
 [[package]]
 name = "symphonia-metadata"
 version = "0.5.4"
@@ -2227,6 +2321,16 @@ dependencies = [
  "symphonia-core",
 ]
 
+[[package]]
+name = "symphonia-utils-xiph"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "484472580fa49991afda5f6550ece662237b00c6f562c7d9638d1b086ed010fe"
+dependencies = [
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
 [[package]]
 name = "syn"
 version = "1.0.109"

+ 6 - 2
Cargo.toml

@@ -11,7 +11,11 @@ futures = "0.3.5"
 lazy_static = "1.4.0"
 rand = "0.8.3"
 serenity = {version = "0.12", features = ["standard_framework", "voice", "rustls_backend", "cache", "framework"] }
-songbird = {version = "0.4.3", features = ["serenity", "driver"]}
-symphonia-core = "0.5.4"
+songbird = {version = "0.4.3", features = ["serenity", "driver", "builtin-queue"]}
 tokio = { version = "1.0", features = ["macros", "rt-multi-thread", "time", "sync"] }
 serde_json = "1.0.81"
+symphonia-core = "0.5"
+
+[dependencies.symphonia]
+version = "0.5"
+features = ["pcm"]

+ 1 - 1
src/audio/audio.rs

@@ -192,7 +192,7 @@ async fn skip(ctx: &Context, msg: &Message) -> CommandResult {
         let guild = msg.guild(&ctx.cache).ok_or("aaa".to_string())?;
         let state = guild.voice_states.get(&msg.author.id).ok_or("aaa")?;
         let channel = guild.channels.get(&state.channel_id.unwrap());
-        channel.unwrap().members(&ctx.cache).unwrap().len()
+        channel.unwrap().members(&ctx.cache).unwrap().len() - 1 // Do not count bot user
     };
 
     if let Err(why) = AudioState::vote_skip(audio_state, msg.author.clone(), total_users).await {

+ 2 - 4
src/audio/audio_state.rs

@@ -8,7 +8,7 @@ use serenity::{
     prelude::Mutex as SerenityMutex,
 };
 use songbird::{
-    input::{Input, RawAdapter},
+    input::RawAdapter,
     tracks::TrackHandle,
     Call, Event, EventContext, EventHandler as VoiceEventHandler, TrackEvent,
 };
@@ -102,13 +102,11 @@ impl AudioState {
             }
         };
         let source = RawAdapter::new(source, 48000, 2);
-        let input: Input = source.into();
-        let input = input.make_live_async().await.expect("Should work?");
 
         let handler = state.handler.clone();
         let mut handler = handler.lock().await;
 
-        let handle = handler.play_input(input);
+        let handle = handler.play_input(source.into());
         if let Err(e) = handle.set_volume(state.volume) {
             println!("{}", e);
         }

+ 3 - 6
src/audio/subprocess.rs

@@ -1,9 +1,6 @@
 use serde_json::Value;
 use symphonia_core::io::{MediaSourceStream, MediaSourceStreamOptions};
-use std::{
-    io::BufReader,
-    process::{Command, Stdio},
-};
+use std::process::{Command, Stdio};
 use symphonia_core::io::ReadOnlySource;
 use tokio::process::Command as TokioCommand;
 
@@ -54,8 +51,8 @@ pub async fn ffmpeg_pcm(url: &str) -> Result<MediaSourceStream, String> {
         .arg("pcm_f32le")
         .arg("pipe:1")
         .stdout(Stdio::piped())
-        .stderr(Stdio::inherit());
-    println!("{:?}", cmd.get_args());
+        .stderr(Stdio::null());
+
     let child = match cmd.spawn() {
         Ok(child) => child,
         Err(error) => {