47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{
|
|
commands::todo::show_todo_page,
|
|
utils::{Extract, Recordable},
|
|
Context, Error,
|
|
};
|
|
|
|
#[derive(Serialize, Deserialize, Extract)]
|
|
pub struct Options;
|
|
|
|
impl Recordable for Options {
|
|
async fn run(self, ctx: Context<'_>) -> Result<(), Error> {
|
|
let values = sqlx::query!(
|
|
"
|
|
SELECT id, value FROM todos
|
|
WHERE guild_id = ?
|
|
",
|
|
ctx.guild_id().unwrap().get(),
|
|
)
|
|
.fetch_all(&ctx.data().database)
|
|
.await
|
|
.unwrap()
|
|
.iter()
|
|
.map(|row| (row.id as usize, row.value.clone()))
|
|
.collect::<Vec<(usize, String)>>();
|
|
|
|
let resp = show_todo_page(&values, 0, None, None, ctx.guild_id().map(|g| g.get()));
|
|
|
|
ctx.send(resp).await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
/// View and remove from the server todo list
|
|
#[poise::command(
|
|
slash_command,
|
|
rename = "view",
|
|
guild_only = true,
|
|
identifying_name = "todo_guild_view",
|
|
default_member_permissions = "MANAGE_GUILD"
|
|
)]
|
|
pub async fn view(ctx: Context<'_>) -> Result<(), Error> {
|
|
(Options {}).run(ctx).await
|
|
}
|