loop command
This commit is contained in:
parent
9e30529981
commit
a4919e45bf
51
Cargo.lock
generated
51
Cargo.lock
generated
@ -120,6 +120,17 @@ dependencies = [
|
||||
"num-traits 0.2.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "audiopus"
|
||||
version = "0.2.0"
|
||||
@ -422,6 +433,19 @@ dependencies = [
|
||||
"num-traits 0.1.43",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17392a012ea30ef05a610aa97dfb49496e71c9f676b27879922ea5bdf60d9d3f"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"humantime",
|
||||
"log 0.4.14",
|
||||
"regex",
|
||||
"termcolor",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.0.19"
|
||||
@ -727,6 +751,12 @@ version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
version = "2.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||
|
||||
[[package]]
|
||||
name = "hyper"
|
||||
version = "0.14.2"
|
||||
@ -1879,9 +1909,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "soundfx-rs"
|
||||
version = "1.1.1"
|
||||
version = "1.2.0"
|
||||
dependencies = [
|
||||
"dotenv",
|
||||
"env_logger",
|
||||
"lazy_static",
|
||||
"log 0.4.14",
|
||||
"regex",
|
||||
@ -2154,6 +2185,15 @@ dependencies = [
|
||||
"winapi 0.2.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.23"
|
||||
@ -2669,6 +2709,15 @@ version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||
dependencies = [
|
||||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "soundfx-rs"
|
||||
version = "1.1.1"
|
||||
version = "1.2.0"
|
||||
authors = ["jellywx <judesouthworth@pm.me>"]
|
||||
edition = "2018"
|
||||
|
||||
@ -11,6 +11,7 @@ dotenv = "0.15"
|
||||
tokio = { version = "1.0", features = ["fs", "process", "io-util"] }
|
||||
lazy_static = "1.4"
|
||||
reqwest = "0.11"
|
||||
env_logger = "0.8"
|
||||
songbird = { git = "https://github.com/serenity-rs/songbird", branch = "current" }
|
||||
regex = "1.4"
|
||||
log = "0.4"
|
||||
|
62
src/main.rs
62
src/main.rs
@ -27,12 +27,7 @@ use serenity::{
|
||||
utils::shard_id,
|
||||
};
|
||||
|
||||
use songbird::{
|
||||
create_player,
|
||||
driver::{Config, CryptoMode, DecodeMode},
|
||||
error::JoinResult,
|
||||
Call, SerenityInit,
|
||||
};
|
||||
use songbird::{create_player, error::JoinResult, Call, SerenityInit};
|
||||
|
||||
use sqlx::mysql::MySqlPool;
|
||||
|
||||
@ -186,9 +181,14 @@ SELECT name, id, plays, public, server_id, uploader_id
|
||||
|
||||
let (handler, _) = join_channel(&ctx, guild, user_channel).await;
|
||||
|
||||
let _ =
|
||||
play_audio(&mut sound, guild_data, &mut handler.lock().await, pool)
|
||||
.await;
|
||||
let _ = play_audio(
|
||||
&mut sound,
|
||||
guild_data,
|
||||
&mut handler.lock().await,
|
||||
pool,
|
||||
false,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -202,13 +202,20 @@ async fn play_audio(
|
||||
guild: GuildData,
|
||||
call_handler: &mut MutexGuard<'_, Call>,
|
||||
mysql_pool: MySqlPool,
|
||||
loop_: bool,
|
||||
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
{
|
||||
let (track, track_handler) =
|
||||
create_player(sound.store_sound_source(mysql_pool.clone()).await?);
|
||||
create_player(sound.store_sound_source(mysql_pool.clone()).await?.into());
|
||||
|
||||
let _ = track_handler.set_volume(guild.volume as f32 / 100.0);
|
||||
|
||||
if loop_ {
|
||||
let _ = track_handler.enable_loop();
|
||||
} else {
|
||||
let _ = track_handler.disable_loop();
|
||||
}
|
||||
|
||||
call_handler.play(track);
|
||||
}
|
||||
|
||||
@ -247,6 +254,8 @@ async fn join_channel(
|
||||
// entry point
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
env_logger::init();
|
||||
|
||||
dotenv()?;
|
||||
|
||||
let token = env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment");
|
||||
@ -265,6 +274,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
.add_command("invite", &INFO_COMMAND)
|
||||
.add_command("donate", &INFO_COMMAND)
|
||||
// play commands
|
||||
.add_command("loop", &LOOP_PLAY_COMMAND)
|
||||
.add_command("play", &PLAY_COMMAND)
|
||||
.add_command("p", &PLAY_COMMAND)
|
||||
.add_command("stop", &STOP_PLAYING_COMMAND)
|
||||
@ -319,6 +329,16 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||
#[command]
|
||||
#[permission_level(Managed)]
|
||||
async fn play(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
play_cmd(ctx, msg, args, false).await
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[permission_level(Managed)]
|
||||
async fn loop_play(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
play_cmd(ctx, msg, args, true).await
|
||||
}
|
||||
|
||||
async fn play_cmd(ctx: &Context, msg: &Message, args: Args, loop_: bool) -> CommandResult {
|
||||
let guild = match msg.guild(&ctx.cache).await {
|
||||
Some(guild) => guild,
|
||||
|
||||
@ -367,7 +387,7 @@ async fn play(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
|
||||
let mut lock = call_handler.lock().await;
|
||||
|
||||
play_audio(sound, guild_data, &mut lock, pool).await?;
|
||||
play_audio(sound, guild_data, &mut lock, pool, loop_).await?;
|
||||
}
|
||||
|
||||
msg.channel_id
|
||||
@ -396,6 +416,16 @@ async fn play(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[permission_level(Managed)]
|
||||
async fn stop_playing(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
|
||||
let voice_manager = songbird::get(ctx).await.unwrap();
|
||||
|
||||
let _ = voice_manager.leave(msg.guild_id.unwrap()).await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command]
|
||||
async fn help(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
|
||||
msg.channel_id
|
||||
@ -1098,16 +1128,6 @@ WHERE
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[permission_level(Managed)]
|
||||
async fn stop_playing(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
|
||||
let voice_manager = songbird::get(ctx).await.unwrap();
|
||||
|
||||
let _ = voice_manager.leave(msg.guild_id.unwrap()).await;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command]
|
||||
#[permission_level(Managed)]
|
||||
async fn allow_greet_sounds(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
|
||||
|
10
src/sound.rs
10
src/sound.rs
@ -4,8 +4,8 @@ use sqlx::mysql::MySqlPool;
|
||||
|
||||
use tokio::{fs::File, io::AsyncWriteExt, process::Command};
|
||||
|
||||
use songbird::ffmpeg;
|
||||
use songbird::input::Input;
|
||||
use songbird::input::restartable::Restartable;
|
||||
|
||||
use std::{env, path::Path};
|
||||
|
||||
pub struct Sound {
|
||||
@ -136,7 +136,7 @@ SELECT src
|
||||
pub async fn store_sound_source(
|
||||
&self,
|
||||
db_pool: MySqlPool,
|
||||
) -> Result<Input, Box<dyn std::error::Error + Send + Sync>> {
|
||||
) -> Result<Restartable, Box<dyn std::error::Error + Send + Sync>> {
|
||||
let caching_location = env::var("CACHING_LOCATION").unwrap_or(String::from("/tmp"));
|
||||
|
||||
let path_name = format!("{}/sound-{}", caching_location, self.id);
|
||||
@ -148,7 +148,9 @@ SELECT src
|
||||
file.write_all(&self.src(db_pool).await).await?;
|
||||
}
|
||||
|
||||
Ok(ffmpeg(path_name).await.expect("FFMPEG ERROR!"))
|
||||
Ok(Restartable::ffmpeg(path_name, false)
|
||||
.await
|
||||
.expect("FFMPEG ERROR!"))
|
||||
}
|
||||
|
||||
pub async fn count_user_sounds(
|
||||
|
Loading…
Reference in New Issue
Block a user