Add ephemeral message and use it for most music command answers
Signed-off-by: trivernis <trivernis@protonmail.com>pull/12/head
parent
eede854ad4
commit
bbf9f1ef93
@ -0,0 +1,56 @@
|
||||
use crate::core::MessageHandle;
|
||||
use crate::error::SerenityUtilsResult;
|
||||
use serenity::builder::CreateMessage;
|
||||
use serenity::http::Http;
|
||||
use serenity::model::channel::Message;
|
||||
use serenity::model::id::ChannelId;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
pub struct EphemeralMessage;
|
||||
|
||||
impl EphemeralMessage {
|
||||
/// Ensures that an already existing message is
|
||||
/// deleted after a certain amount of time
|
||||
pub async fn create_from_message(
|
||||
http: &Arc<Http>,
|
||||
message: &Message,
|
||||
timeout: Duration,
|
||||
) -> SerenityUtilsResult<()> {
|
||||
log::debug!("Creating ephemeral message from existing message");
|
||||
let handle = MessageHandle::new(message.channel_id, message.id);
|
||||
let http = Arc::clone(&http);
|
||||
|
||||
log::debug!("Starting delete task");
|
||||
tokio::spawn(async move {
|
||||
log::debug!("Waiting for timeout to pass");
|
||||
tokio::time::sleep(timeout).await;
|
||||
log::debug!("Deleting ephemeral message");
|
||||
if let Err(e) = http
|
||||
.delete_message(handle.channel_id, handle.message_id)
|
||||
.await
|
||||
{
|
||||
log::error!("Failed to delete ephemeral message {:?}: {}", handle, e);
|
||||
}
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Creates a new message that is deleted after a certain amount of time
|
||||
pub async fn create<'a, F>(
|
||||
http: &Arc<Http>,
|
||||
channel_id: ChannelId,
|
||||
timeout: Duration,
|
||||
f: F,
|
||||
) -> SerenityUtilsResult<Message>
|
||||
where
|
||||
F: for<'b> FnOnce(&'b mut CreateMessage<'a>) -> &'b mut CreateMessage<'a>,
|
||||
{
|
||||
log::debug!("Creating new ephemeral message");
|
||||
let msg = channel_id.send_message(http, f).await?;
|
||||
Self::create_from_message(http, &msg, timeout).await?;
|
||||
|
||||
Ok(msg)
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
pub mod core;
|
||||
pub mod error;
|
||||
pub mod menu;
|
||||
pub mod ephemeral_message;
|
||||
|
Loading…
Reference in New Issue