Add loop mode to soundboard
This commit is contained in:
parent
1a1b1b8144
commit
e30a08e019
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="dataSourceStorageLocal" created-in="CL-231.8109.174">
|
<component name="dataSourceStorageLocal" created-in="CL-231.9161.40">
|
||||||
<data-source name="MySQL for 5.1 - soundfx@localhost" uuid="1067c1d0-1386-4a39-b3f5-6d48d6f279eb">
|
<data-source name="MySQL for 5.1 - soundfx@localhost" uuid="1067c1d0-1386-4a39-b3f5-6d48d6f279eb">
|
||||||
<database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="MYSQL" exact-version="0" />
|
<database-info product="" version="" jdbc-version="" driver-name="" driver-version="" dbms="MYSQL" exact-version="0" />
|
||||||
<secret-storage>master_key</secret-storage>
|
<secret-storage>master_key</secret-storage>
|
||||||
|
@ -30,7 +30,10 @@ suggests = "mysql-server-8.0"
|
|||||||
maintainer-scripts = "debian"
|
maintainer-scripts = "debian"
|
||||||
assets = [
|
assets = [
|
||||||
["target/release/soundfx-rs", "usr/bin/soundfx-rs", "755"],
|
["target/release/soundfx-rs", "usr/bin/soundfx-rs", "755"],
|
||||||
["conf/default.env", "etc/soundfx-rs/default.env", "600"]
|
["conf/default.env", "etc/soundfx-rs/config.env", "600"]
|
||||||
|
]
|
||||||
|
conf-files = [
|
||||||
|
"/etc/soundfx-rs/config.env",
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.metadata.deb.systemd-units]
|
[package.metadata.deb.systemd-units]
|
||||||
|
4
debian/postinst
vendored
4
debian/postinst
vendored
@ -4,10 +4,6 @@ set -e
|
|||||||
|
|
||||||
id -u soundfx &>/dev/null || useradd -r -M soundfx
|
id -u soundfx &>/dev/null || useradd -r -M soundfx
|
||||||
|
|
||||||
if [ ! -f /etc/soundfx-rs/config.env ]; then
|
|
||||||
cp /etc/soundfx-rs/default.env /etc/soundfx-rs/config.env
|
|
||||||
fi
|
|
||||||
|
|
||||||
chown soundfx /etc/soundfx-rs/config.env
|
chown soundfx /etc/soundfx-rs/config.env
|
||||||
|
|
||||||
#DEBHELPER#
|
#DEBHELPER#
|
||||||
|
4
debian/postrm
vendored
4
debian/postrm
vendored
@ -4,8 +4,4 @@ set -e
|
|||||||
|
|
||||||
id -u soundfx &>/dev/null || userdel soundfx
|
id -u soundfx &>/dev/null || userdel soundfx
|
||||||
|
|
||||||
if [ -f /etc/soundfx-rs/config.env ]; then
|
|
||||||
rm /etc/soundfx-rs/config.env
|
|
||||||
fi
|
|
||||||
|
|
||||||
#DEBHELPER#
|
#DEBHELPER#
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use poise::serenity_prelude::{
|
use poise::serenity_prelude::{
|
||||||
builder::CreateActionRow, model::application::component::ButtonStyle, GuildChannel,
|
builder::CreateActionRow, model::application::component::ButtonStyle, GuildChannel,
|
||||||
|
ReactionType,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -372,7 +373,33 @@ pub async fn soundboard(
|
|||||||
c.add_action_row(action_row);
|
c.add_action_row(action_row);
|
||||||
}
|
}
|
||||||
|
|
||||||
c
|
c.create_action_row(|r| {
|
||||||
|
r.create_button(|b| {
|
||||||
|
b.label("Stop")
|
||||||
|
.emoji(ReactionType::Unicode("⏹".to_string()))
|
||||||
|
.style(ButtonStyle::Danger)
|
||||||
|
.custom_id("#stop")
|
||||||
|
})
|
||||||
|
.create_button(|b| {
|
||||||
|
b.label("Mode:")
|
||||||
|
.style(ButtonStyle::Secondary)
|
||||||
|
.disabled(true)
|
||||||
|
.custom_id("#mode")
|
||||||
|
})
|
||||||
|
.create_button(|b| {
|
||||||
|
b.label("Instant")
|
||||||
|
.emoji(ReactionType::Unicode("▶".to_string()))
|
||||||
|
.style(ButtonStyle::Secondary)
|
||||||
|
.disabled(true)
|
||||||
|
.custom_id("#instant")
|
||||||
|
})
|
||||||
|
.create_button(|b| {
|
||||||
|
b.label("Loop")
|
||||||
|
.emoji(ReactionType::Unicode("🔁".to_string()))
|
||||||
|
.style(ButtonStyle::Secondary)
|
||||||
|
.custom_id("#loop")
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -6,7 +6,7 @@ use poise::serenity_prelude::{
|
|||||||
channel::Channel,
|
channel::Channel,
|
||||||
},
|
},
|
||||||
utils::shard_id,
|
utils::shard_id,
|
||||||
Activity, Context,
|
ActionRowComponent, Activity, Context, CreateActionRow, CreateComponents,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -137,23 +137,118 @@ SELECT name, id, public, server_id, uploader_id
|
|||||||
if let Some(guild_id) = component.guild_id {
|
if let Some(guild_id) = component.guild_id {
|
||||||
if let Ok(()) = SoundPager::handle_interaction(ctx, &data, component).await {
|
if let Ok(()) = SoundPager::handle_interaction(ctx, &data, component).await {
|
||||||
} else {
|
} else {
|
||||||
component
|
let mode = component.data.custom_id.as_str();
|
||||||
.create_interaction_response(ctx, |r| {
|
match mode {
|
||||||
r.kind(InteractionResponseType::DeferredUpdateMessage)
|
"#stop" => {
|
||||||
})
|
component
|
||||||
.await
|
.create_interaction_response(ctx, |r| {
|
||||||
.unwrap();
|
r.kind(InteractionResponseType::DeferredUpdateMessage)
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
play_from_query(
|
let songbird = songbird::get(ctx).await.unwrap();
|
||||||
&ctx,
|
let call_opt = songbird.get(guild_id);
|
||||||
&data,
|
|
||||||
guild_id.to_guild_cached(&ctx).unwrap(),
|
if let Some(call) = call_opt {
|
||||||
component.user.id,
|
let mut lock = call.lock().await;
|
||||||
None,
|
|
||||||
&component.data.custom_id,
|
lock.stop();
|
||||||
false,
|
}
|
||||||
)
|
}
|
||||||
.await;
|
|
||||||
|
"#loop" | "#queue" | "#instant" => {
|
||||||
|
component
|
||||||
|
.create_interaction_response(ctx, |r| {
|
||||||
|
r.kind(InteractionResponseType::UpdateMessage)
|
||||||
|
.interaction_response_data(|d| {
|
||||||
|
let mut c: CreateComponents = Default::default();
|
||||||
|
|
||||||
|
for action_row in &component.message.components {
|
||||||
|
let mut a: CreateActionRow = Default::default();
|
||||||
|
// These are always buttons
|
||||||
|
for component in &action_row.components {
|
||||||
|
match component {
|
||||||
|
ActionRowComponent::Button(button) => {
|
||||||
|
a.create_button(|b| {
|
||||||
|
if let Some(label) =
|
||||||
|
&button.label
|
||||||
|
{
|
||||||
|
b.label(label);
|
||||||
|
}
|
||||||
|
if let Some(emoji) =
|
||||||
|
&button.emoji
|
||||||
|
{
|
||||||
|
b.emoji(emoji.clone());
|
||||||
|
}
|
||||||
|
if let Some(custom_id) =
|
||||||
|
&button.custom_id
|
||||||
|
{
|
||||||
|
if custom_id
|
||||||
|
.starts_with('#')
|
||||||
|
{
|
||||||
|
b.custom_id(custom_id)
|
||||||
|
.disabled(
|
||||||
|
custom_id
|
||||||
|
== "#mode"
|
||||||
|
|| custom_id
|
||||||
|
== mode,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
b.custom_id(format!(
|
||||||
|
"{}{}",
|
||||||
|
custom_id
|
||||||
|
.split('#')
|
||||||
|
.next()
|
||||||
|
.unwrap(),
|
||||||
|
mode
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b.style(button.style);
|
||||||
|
|
||||||
|
b
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.add_action_row(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
d.set_components(c)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
id_mode => {
|
||||||
|
component
|
||||||
|
.create_interaction_response(ctx, |r| {
|
||||||
|
r.kind(InteractionResponseType::DeferredUpdateMessage)
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut it = id_mode.split('#');
|
||||||
|
let id = it.next().unwrap();
|
||||||
|
let mode = it.next().unwrap_or("instant");
|
||||||
|
|
||||||
|
play_from_query(
|
||||||
|
&ctx,
|
||||||
|
&data,
|
||||||
|
guild_id.to_guild_cached(&ctx).unwrap(),
|
||||||
|
component.user.id,
|
||||||
|
None,
|
||||||
|
id.split('#').next().unwrap(),
|
||||||
|
mode == "loop",
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user