CreateMessageExt
This commit is contained in:
parent
35ef3832de
commit
b21fcc65f3
|
@ -19,7 +19,7 @@ mod utils;
|
||||||
mod youtube;
|
mod youtube;
|
||||||
|
|
||||||
use crate::utils::{message::embed_response, permissions::has_permission};
|
use crate::utils::{message::embed_response, permissions::has_permission};
|
||||||
use utils::embed_song;
|
use utils::CreateMessageExt;
|
||||||
|
|
||||||
use self::utils::{can_use_voice_command, is_mute};
|
use self::utils::{can_use_voice_command, is_mute};
|
||||||
|
|
||||||
|
@ -38,10 +38,7 @@ impl songbird::EventHandler for TrackStartNotifier {
|
||||||
let metadata = np.metadata();
|
let metadata = np.metadata();
|
||||||
if let Err(why) = self
|
if let Err(why) = self
|
||||||
.chan_id
|
.chan_id
|
||||||
.send_message(&self.http, |m| {
|
.send_message(&self.http, |m| m.embed_song("Now playing", metadata, None))
|
||||||
embed_song(m, "Now playing", metadata, None);
|
|
||||||
m
|
|
||||||
})
|
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
error!("Error sending message: {:?}", why);
|
error!("Error sending message: {:?}", why);
|
||||||
|
@ -67,6 +64,7 @@ struct Music;
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
#[description("Join the channel you are connected")]
|
#[description("Join the channel you are connected")]
|
||||||
|
#[aliases("j")]
|
||||||
async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
let guild = match msg.guild(&ctx.cache).await {
|
let guild = match msg.guild(&ctx.cache).await {
|
||||||
Some(guild) => guild,
|
Some(guild) => guild,
|
||||||
|
@ -154,6 +152,7 @@ async fn join(ctx: &Context, msg: &Message) -> CommandResult {
|
||||||
&format!("Joined channel {}", connect_to.mention()),
|
&format!("Joined channel {}", connect_to.mention()),
|
||||||
Some(&member),
|
Some(&member),
|
||||||
)
|
)
|
||||||
|
.add_music_buttons()
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
} else {
|
} else {
|
||||||
|
@ -441,8 +440,7 @@ async fn play(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
let author = msg.member(&ctx).await?;
|
let author = msg.member(&ctx).await?;
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
.send_message(&ctx.http, |m| {
|
.send_message(&ctx.http, |m| {
|
||||||
embed_song(
|
m.embed_song(
|
||||||
m,
|
|
||||||
if handler.queue().len() == 1 {
|
if handler.queue().len() == 1 {
|
||||||
"Now playing"
|
"Now playing"
|
||||||
} else {
|
} else {
|
||||||
|
@ -715,7 +713,7 @@ async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
handler.queue().skip()?;
|
handler.queue().skip()?;
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
.send_message(&ctx.http, |m| {
|
.send_message(&ctx.http, |m| {
|
||||||
embed_song(m, "Removed", track.metadata(), Some(&member))
|
m.embed_song("Removed", track.metadata(), Some(&member))
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
@ -732,7 +730,7 @@ async fn remove(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||||
Some(q) => {
|
Some(q) => {
|
||||||
msg.channel_id
|
msg.channel_id
|
||||||
.send_message(&ctx.http, |m| {
|
.send_message(&ctx.http, |m| {
|
||||||
embed_song(m, "Removed", q.metadata(), Some(&member))
|
m.embed_song("Removed", q.metadata(), Some(&member))
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,9 +3,10 @@ use serenity::{
|
||||||
client::Context,
|
client::Context,
|
||||||
framework::standard::CommandResult,
|
framework::standard::CommandResult,
|
||||||
model::{
|
model::{
|
||||||
channel::Message,
|
channel::{Message, ReactionType},
|
||||||
guild::{Member, PartialMember},
|
guild::{Member, PartialMember},
|
||||||
id::GuildId,
|
id::GuildId,
|
||||||
|
interactions::ButtonStyle,
|
||||||
Permissions,
|
Permissions,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -18,49 +19,6 @@ use crate::{
|
||||||
|
|
||||||
use super::error::UseVoiceError;
|
use super::error::UseVoiceError;
|
||||||
|
|
||||||
pub(crate) fn embed_song<'a, 'b>(
|
|
||||||
msg: &'a mut CreateMessage<'b>,
|
|
||||||
title: &str,
|
|
||||||
metadata: &Metadata,
|
|
||||||
author: Option<&Member>,
|
|
||||||
) -> &'a mut CreateMessage<'b> {
|
|
||||||
msg.embed(|e| {
|
|
||||||
e.title(title);
|
|
||||||
|
|
||||||
if let Some(title) = &metadata.title {
|
|
||||||
e.field("Title", title, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(url) = &metadata.source_url {
|
|
||||||
e.url(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(duration) = &metadata.duration {
|
|
||||||
let seconds = duration.as_secs();
|
|
||||||
|
|
||||||
let hours = seconds / (60 * 60);
|
|
||||||
let min = (seconds - (hours * 60 * 60)) / 60;
|
|
||||||
let seconds = seconds - (hours * 3600) - (min * 60);
|
|
||||||
|
|
||||||
e.field(
|
|
||||||
"Duration",
|
|
||||||
if hours > 0 {
|
|
||||||
format!("{}:{:02}:{:02}", hours, min, seconds)
|
|
||||||
} else {
|
|
||||||
format!("{}:{:02}", min, seconds)
|
|
||||||
},
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(img) = &metadata.thumbnail {
|
|
||||||
e.image(img);
|
|
||||||
}
|
|
||||||
|
|
||||||
embed_author(e, author).colour((247, 76, 0))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) async fn is_mute(
|
pub(crate) async fn is_mute(
|
||||||
ctx: &Context,
|
ctx: &Context,
|
||||||
member: &PartialMember,
|
member: &PartialMember,
|
||||||
|
@ -121,3 +79,90 @@ pub(crate) async fn can_use_voice_command(
|
||||||
Err(UseVoiceError::Unknown)
|
Err(UseVoiceError::Unknown)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) trait CreateMessageExt {
|
||||||
|
fn embed_song(
|
||||||
|
&mut self,
|
||||||
|
title: &str,
|
||||||
|
metadata: &Metadata,
|
||||||
|
author: Option<&Member>,
|
||||||
|
) -> &mut Self;
|
||||||
|
fn add_music_buttons(&mut self) -> &mut Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> CreateMessageExt for CreateMessage<'a> {
|
||||||
|
fn embed_song<'b>(
|
||||||
|
&'b mut self,
|
||||||
|
title: &str,
|
||||||
|
metadata: &Metadata,
|
||||||
|
author: Option<&Member>,
|
||||||
|
) -> &'b mut CreateMessage<'a> {
|
||||||
|
self.embed(|e| {
|
||||||
|
e.title(title);
|
||||||
|
|
||||||
|
if let Some(title) = &metadata.title {
|
||||||
|
e.field("Title", title, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(url) = &metadata.source_url {
|
||||||
|
e.url(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(duration) = &metadata.duration {
|
||||||
|
let seconds = duration.as_secs();
|
||||||
|
|
||||||
|
let hours = seconds / (60 * 60);
|
||||||
|
let min = (seconds - (hours * 60 * 60)) / 60;
|
||||||
|
let seconds = seconds - (hours * 3600) - (min * 60);
|
||||||
|
|
||||||
|
e.field(
|
||||||
|
"Duration",
|
||||||
|
if hours > 0 {
|
||||||
|
format!("{}:{:02}:{:02}", hours, min, seconds)
|
||||||
|
} else {
|
||||||
|
format!("{}:{:02}", min, seconds)
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(img) = &metadata.thumbnail {
|
||||||
|
e.image(img);
|
||||||
|
}
|
||||||
|
|
||||||
|
embed_author(e, author).colour((247, 76, 0))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_music_buttons<'b>(&'b mut self) -> &'b mut Self {
|
||||||
|
self.components(|comp| {
|
||||||
|
comp.create_action_row(|row| {
|
||||||
|
row.create_button(|but| {
|
||||||
|
but.style(ButtonStyle::Primary)
|
||||||
|
.emoji(ReactionType::Unicode("⏮️".to_string()))
|
||||||
|
.custom_id("music_previous_button")
|
||||||
|
})
|
||||||
|
.create_button(|but| {
|
||||||
|
but.style(ButtonStyle::Primary)
|
||||||
|
.emoji(ReactionType::Unicode("⏹️".to_string()))
|
||||||
|
.custom_id("music_stop_button")
|
||||||
|
})
|
||||||
|
.create_button(|but| {
|
||||||
|
but.style(ButtonStyle::Primary)
|
||||||
|
.emoji(ReactionType::Unicode("⏯️".to_string()))
|
||||||
|
.custom_id("music_play_pause_button")
|
||||||
|
})
|
||||||
|
.create_button(|but| {
|
||||||
|
but.style(ButtonStyle::Primary)
|
||||||
|
.emoji(ReactionType::Unicode("⏏️".to_string()))
|
||||||
|
.custom_id("music_leave_button")
|
||||||
|
})
|
||||||
|
.create_button(|but| {
|
||||||
|
but.style(ButtonStyle::Primary)
|
||||||
|
.emoji(ReactionType::Unicode("⏭".to_string()))
|
||||||
|
.custom_id("music_next_button")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue