Files
s3bot/src/bot/handlers/fun/rotator.rs
Pavel Kirilin 90ac6d77aa Added new handle.
Signed-off-by: Pavel Kirilin <win10@list.ru>
2024-04-04 03:02:57 +02:00

50 lines
1.4 KiB
Rust

use std::time::Duration;
use grammers_client::{types::Message, Client, InputMessage, Update};
use crate::{bot::handlers::Handler, utils::messages::get_message};
#[derive(Clone)]
pub struct Rotator;
async fn rotator(replied_message: Message, text: String) {
let mut skip = 1;
let start = std::time::SystemTime::now();
let mut current = std::time::SystemTime::now();
while current
.duration_since(start)
.map(|dur| dur.as_secs())
.unwrap_or(100)
< 10
{
let rotated = text
.chars()
.cycle()
.skip(skip)
.take(text.len())
.collect::<String>();
skip += 1;
if skip == rotated.len() {
skip = 1;
}
replied_message.edit(rotated).await.ok();
current = std::time::SystemTime::now();
tokio::time::sleep(Duration::from_millis(200)).await;
}
replied_message.delete().await.ok();
}
#[async_trait::async_trait]
impl Handler for Rotator {
async fn react(&self, _: &Client, update: &Update) -> anyhow::Result<()> {
let Some(message) = get_message(update) else {
return Ok(());
};
if let Some(text) = message.text().strip_prefix(".rl").map(str::trim) {
let replied_message = message.reply(InputMessage::from(text).silent(true)).await?;
tokio::spawn(rotator(replied_message, text.to_string()));
}
Ok(())
}
}