added better formatting to del and look outputs. removed a now useless model

This commit is contained in:
jude 2020-10-10 17:29:32 +01:00
parent 8d5ce121d3
commit d3f28ce539
2 changed files with 54 additions and 32 deletions

View File

@ -27,14 +27,13 @@ use crate::{
ChannelData, ChannelData,
GuildData, GuildData,
UserData, UserData,
Reminder,
Timer, Timer,
}, },
SQLPool, SQLPool,
time_parser::TimeParser, time_parser::TimeParser,
framework::SendIterator, framework::SendIterator,
check_subscription_on_message, check_subscription_on_message,
shorthand_displacement, shorthand_displacement, longhand_displacement
}; };
use chrono::{NaiveDateTime, offset::TimeZone}; use chrono::{NaiveDateTime, offset::TimeZone};
@ -276,18 +275,13 @@ impl LookFlags {
new_flags new_flags
} }
}
pub fn display_time(&self, timestamp: u64) -> String { struct LookReminder {
match self.time_display { id: u32,
TimeDisplayType::Absolute => { time: u32,
timestamp.to_string() content: String,
}, channel: u64,
TimeDisplayType::Relative => {
timestamp.to_string()
},
}
}
} }
#[command] #[command]
@ -305,16 +299,20 @@ async fn look(ctx: &Context, msg: &Message, args: String) -> CommandResult {
let reminders = if let Some(guild_id) = msg.guild_id.map(|f| f.as_u64().to_owned()) { let reminders = if let Some(guild_id) = msg.guild_id.map(|f| f.as_u64().to_owned()) {
let channel_id = flags.channel_id.unwrap_or_else(|| msg.channel_id.as_u64().to_owned()); let channel_id = flags.channel_id.unwrap_or_else(|| msg.channel_id.as_u64().to_owned());
sqlx::query_as!(Reminder, sqlx::query_as!(LookReminder,
" "
SELECT SELECT
reminders.id, reminders.time, reminders.name, reminders.channel_id reminders.id, reminders.time, channels.channel, messages.content
FROM FROM
reminders reminders
INNER JOIN INNER JOIN
channels channels
ON ON
reminders.channel_id = channels.id reminders.channel_id = channels.id
INNER JOIN
messages
ON
messages.id = reminders.message_id
WHERE WHERE
channels.guild_id = (SELECT id FROM guilds WHERE guild = ?) AND channels.guild_id = (SELECT id FROM guilds WHERE guild = ?) AND
channels.channel = ? AND channels.channel = ? AND
@ -326,14 +324,22 @@ LIMIT
.await .await
} }
else { else {
sqlx::query_as!(Reminder, sqlx::query_as!(LookReminder,
" "
SELECT SELECT
id, time, name, channel_id reminders.id, reminders.time, messages.content, channels.channel
FROM FROM
reminders reminders
INNER JOIN
channels
ON
channels.id = reminders.channel_id
INNER JOIN
messages
ON
messages.id = reminders.message_id
WHERE WHERE
reminders.channel_id = (SELECT id FROM channels WHERE channel = ?) AND channels.channel = ? AND
FIND_IN_SET(reminders.enabled, ?) FIND_IN_SET(reminders.enabled, ?)
LIMIT LIMIT
? ?
@ -350,7 +356,18 @@ LIMIT
let display = reminders let display = reminders
.iter() .iter()
.map(|reminder| format!("'{}' *{}* **{}**", reminder.name, &inter, flags.display_time(reminder.time as u64))); .map(|reminder| {
let time_display = match flags.time_display {
TimeDisplayType::Absolute => {
user_data.timezone().timestamp(reminder.time as i64, 0).format("%Y-%m-%D %H:%M:%S").to_string()
},
TimeDisplayType::Relative => {
longhand_displacement(reminder.time as u64)
},
};
format!("'{}' *{}* **{}**", reminder.content, &inter, time_display)
});
let _ = msg.channel_id.say_lines(&ctx, display).await; let _ = msg.channel_id.say_lines(&ctx, display).await;
} }
@ -369,16 +386,20 @@ async fn delete(ctx: &Context, msg: &Message, _args: String) -> CommandResult {
let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "del/listing").await).await; let _ = msg.channel_id.say(&ctx, user_data.response(&pool, "del/listing").await).await;
let reminders = if let Some(guild_id) = msg.guild_id.map(|f| f.as_u64().to_owned()) { let reminders = if let Some(guild_id) = msg.guild_id.map(|f| f.as_u64().to_owned()) {
sqlx::query_as!(Reminder, sqlx::query_as!(LookReminder,
" "
SELECT SELECT
reminders.id, reminders.time, reminders.name, reminders.channel_id reminders.id, reminders.time, messages.content, channels.channel
FROM FROM
reminders reminders
INNER JOIN INNER JOIN
channels channels
ON ON
reminders.channel_id = channels.id reminders.channel_id = channels.id
INNER JOIN
messages
ON
reminders.message_id = messages.id
WHERE WHERE
channels.guild_id = (SELECT id FROM guilds WHERE guild = ?) channels.guild_id = (SELECT id FROM guilds WHERE guild = ?)
", guild_id) ", guild_id)
@ -386,14 +407,22 @@ WHERE
.await .await
} }
else { else {
sqlx::query_as!(Reminder, sqlx::query_as!(LookReminder,
" "
SELECT SELECT
id, time, name, channel_id reminders.id, reminders.time, messages.content, channels.channel
FROM FROM
reminders reminders
INNER JOIN
messages
ON
reminders.message_id = messages.id
INNER JOIN
channels
ON
channels.id = reminders.channel_id
WHERE WHERE
channel_id = (SELECT id FROM channels WHERE channel = ?) channels.channel = ?
", msg.channel_id.as_u64()) ", msg.channel_id.as_u64())
.fetch_all(&pool) .fetch_all(&pool)
.await .await
@ -409,7 +438,7 @@ WHERE
let time = user_data.timezone().timestamp(reminder.time as i64, 0); let time = user_data.timezone().timestamp(reminder.time as i64, 0);
// todo show reminder message instead of name // todo show reminder message instead of name
format!("**{}**: '{}' *{}* at {}", count + 1, reminder.name, reminder.channel_id, time.format("%Y-%m-%D %H:%M:%S")) format!("**{}**: '{}' *<#{}>* at {}", count + 1, reminder.content, reminder.channel, time.format("%Y-%m-%D %H:%M:%S"))
}); });
let _ = msg.channel_id.say_lines(&ctx, enumerated_reminders).await; let _ = msg.channel_id.say_lines(&ctx, enumerated_reminders).await;

View File

@ -229,13 +229,6 @@ SELECT value FROM strings WHERE (language = ? OR language = 'EN') AND name = ? O
} }
} }
pub struct Reminder {
pub id: u32,
pub name: String,
pub time: u32,
pub channel_id: u32,
}
pub struct Timer { pub struct Timer {
pub name: String, pub name: String,
pub start_time: NaiveDateTime, pub start_time: NaiveDateTime,