2018-11-14 14:29:58 +00:00
|
|
|
use super::super::prelude::*;
|
|
|
|
|
2020-03-09 12:00:04 +00:00
|
|
|
use rusqlite::params;
|
|
|
|
|
2019-07-12 08:39:03 +00:00
|
|
|
use serenity::prelude::*;
|
|
|
|
use serenity::{
|
|
|
|
framework::standard::{macros::command, Args, CommandResult},
|
|
|
|
model::channel::Message,
|
|
|
|
};
|
|
|
|
|
|
|
|
#[command]
|
2020-03-09 12:00:04 +00:00
|
|
|
fn list(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
|
2019-09-14 14:34:00 +00:00
|
|
|
if let Err(err) = channel_contains_author(ctx, msg) {
|
|
|
|
msg.channel_id.say(&ctx.http, err)?;
|
2019-07-12 08:39:03 +00:00
|
|
|
return Ok(());
|
2018-11-14 14:29:58 +00:00
|
|
|
}
|
|
|
|
|
2019-07-12 08:39:03 +00:00
|
|
|
let mut output = String::new();
|
|
|
|
|
|
|
|
let data = ctx.data.read();
|
2019-07-12 12:41:51 +00:00
|
|
|
let media = match data.get::<Media>() {
|
|
|
|
Some(media) => media,
|
|
|
|
None => {
|
2019-09-14 14:34:00 +00:00
|
|
|
msg.channel_id.say(&ctx.http, "could not find media data")?;
|
2018-11-23 12:18:07 +00:00
|
|
|
return Ok(());
|
|
|
|
}
|
2019-07-12 08:39:03 +00:00
|
|
|
};
|
2018-11-23 12:18:07 +00:00
|
|
|
|
2019-12-15 14:25:48 +00:00
|
|
|
let media_lock = media.lock().unwrap();
|
|
|
|
|
2020-03-09 12:00:04 +00:00
|
|
|
if args.len() == 0 {
|
|
|
|
let playlist = media_lock.playlist();
|
|
|
|
|
|
|
|
output += &format!(
|
|
|
|
"{} {} queued\n",
|
|
|
|
playlist.len(),
|
|
|
|
if playlist.len() == 1 { "song" } else { "songs" }
|
|
|
|
);
|
|
|
|
|
|
|
|
let max_output = 5;
|
|
|
|
|
|
|
|
for (i, song) in playlist.iter().enumerate() {
|
|
|
|
if i < max_output {
|
|
|
|
output += &format!("\t{}.\t{}\n", i + 1, song.name.clone());
|
|
|
|
} else {
|
|
|
|
output += &format!("\t... and {} more", playlist.len() - max_output);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
let first_arg = args.single::<String>()?;
|
|
|
|
|
|
|
|
if first_arg == "--tags" {
|
|
|
|
// check all tables for this entry
|
|
|
|
let mut stmt = match media_lock
|
|
|
|
.db()
|
|
|
|
.prepare("SELECT name FROM sqlite_master WHERE type='table'")
|
|
|
|
{
|
|
|
|
Ok(statement) => statement,
|
|
|
|
Err(_) => {
|
|
|
|
return Err(serenity::framework::standard::CommandError(
|
|
|
|
"failed preparing data base access".to_string(),
|
|
|
|
))
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let rows = match stmt.query_map(params![], |row| row.get(0) as rusqlite::Result<String>)
|
|
|
|
{
|
|
|
|
Ok(rows) => rows,
|
|
|
|
Err(_) => {
|
|
|
|
return Err(serenity::framework::standard::CommandError(
|
|
|
|
"failed querying rows".to_string(),
|
|
|
|
))
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let mut tag_names = Vec::new();
|
|
|
|
|
|
|
|
for row in rows {
|
|
|
|
let table_name = match row {
|
|
|
|
Ok(name) => name,
|
|
|
|
Err(_) => {
|
|
|
|
return Err(serenity::framework::standard::CommandError(
|
|
|
|
"failed getting name from row".to_string(),
|
|
|
|
))
|
|
|
|
}
|
|
|
|
};
|
2018-11-14 14:29:58 +00:00
|
|
|
|
2020-03-09 12:00:04 +00:00
|
|
|
if table_name != "Vulva3" {
|
|
|
|
tag_names.push(table_name);
|
|
|
|
}
|
|
|
|
}
|
2018-11-14 14:29:58 +00:00
|
|
|
|
2020-03-09 12:00:04 +00:00
|
|
|
output += &format!("{} available tags:", tag_names.len());
|
2018-11-17 18:59:10 +00:00
|
|
|
|
2020-03-09 12:00:04 +00:00
|
|
|
for tag in tag_names.iter() {
|
|
|
|
output += &format!("\n\t{}", tag);
|
|
|
|
}
|
2018-11-14 14:29:58 +00:00
|
|
|
}
|
2019-07-12 08:39:03 +00:00
|
|
|
}
|
2018-11-14 14:29:58 +00:00
|
|
|
|
2019-09-14 14:34:00 +00:00
|
|
|
msg.channel_id.say(&ctx.http, output)?;
|
2018-11-14 14:29:58 +00:00
|
|
|
|
2019-07-12 08:39:03 +00:00
|
|
|
Ok(())
|
2018-11-14 14:29:58 +00:00
|
|
|
}
|