turned models into module

This commit is contained in:
2021-07-16 21:28:51 +01:00
parent ea2b0f4b0a
commit 1556318d07
12 changed files with 475 additions and 565 deletions

View File

@ -1,18 +1,22 @@
use regex_command_attr::command;
use serenity::{client::Context, model::channel::Message};
use serenity::{builder::CreateEmbedFooter, client::Context, model::channel::Message};
use chrono::offset::Utc;
use crate::{
command_help, consts::DEFAULT_PREFIX, get_ctx_data, language_manager::LanguageManager,
models::UserData, FrameworkCtx, THEME_COLOR,
command_help,
consts::DEFAULT_PREFIX,
get_ctx_data,
language_manager::LanguageManager,
models::{user_data::UserData, CtxGuildData},
FrameworkCtx, THEME_COLOR,
};
use crate::models::CtxGuildData;
use serenity::builder::CreateEmbedFooter;
use std::sync::Arc;
use std::time::{SystemTime, UNIX_EPOCH};
use std::{
sync::Arc,
time::{SystemTime, UNIX_EPOCH},
};
#[command]
#[can_blacklist(false)]
@ -202,7 +206,6 @@ async fn clock(ctx: &Context, msg: &Message, _args: String) {
let language = UserData::language_of(&msg.author, &pool).await;
let timezone = UserData::timezone_of(&msg.author, &pool).await;
let meridian = UserData::meridian_of(&msg.author, &pool).await;
let now = Utc::now().with_timezone(&timezone);
@ -212,7 +215,7 @@ async fn clock(ctx: &Context, msg: &Message, _args: String) {
.channel_id
.say(
&ctx,
clock_display.replacen("{}", &now.format(meridian.fmt_str()).to_string(), 1),
clock_display.replacen("{}", &now.format("%H:%M").to_string(), 1),
)
.await;
}

View File

@ -24,11 +24,10 @@ use crate::{
consts::{REGEX_ALIAS, REGEX_CHANNEL, REGEX_COMMANDS, REGEX_ROLE, THEME_COLOR},
framework::SendIterator,
get_ctx_data,
models::{ChannelData, GuildData, UserData},
models::{channel_data::ChannelData, guild_data::GuildData, user_data::UserData, CtxGuildData},
FrameworkCtx, PopularTimezones,
};
use crate::models::CtxGuildData;
use std::{collections::HashMap, iter};
#[command]
@ -113,11 +112,7 @@ async fn timezone(ctx: &Context, msg: &Message, args: String) {
let content = lm
.get(&user_data.language, "timezone/set_p")
.replacen("{timezone}", &user_data.timezone, 1)
.replacen(
"{time}",
&now.format(user_data.meridian().fmt_str_short()).to_string(),
1,
);
.replacen("{time}", &now.format("%H:%M").to_string(), 1);
let _ =
msg.channel_id
@ -154,10 +149,7 @@ async fn timezone(ctx: &Context, msg: &Message, args: String) {
tz.to_string(),
format!(
"🕗 `{}`",
Utc::now()
.with_timezone(tz)
.format(user_data.meridian().fmt_str_short())
.to_string()
Utc::now().with_timezone(tz).format("%H:%M").to_string()
),
true,
)
@ -211,10 +203,7 @@ async fn timezone(ctx: &Context, msg: &Message, args: String) {
t.to_string(),
format!(
"🕗 `{}`",
Utc::now()
.with_timezone(t)
.format(user_data.meridian().fmt_str_short())
.to_string()
Utc::now().with_timezone(t).format("%H:%M").to_string()
),
true,
)
@ -252,49 +241,6 @@ async fn timezone(ctx: &Context, msg: &Message, args: String) {
}
}
#[command("meridian")]
async fn change_meridian(ctx: &Context, msg: &Message, args: String) {
let (pool, lm) = get_ctx_data(&ctx).await;
let mut user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
if &args == "12" {
user_data.meridian_time = true;
user_data.commit_changes(&pool).await;
let _ = msg
.channel_id
.send_message(&ctx, |m| {
m.embed(|e| {
e.title(lm.get(&user_data.language, "meridian/title"))
.color(*THEME_COLOR)
.description(lm.get(&user_data.language, "meridian/12"))
})
})
.await;
} else if &args == "24" {
user_data.meridian_time = false;
user_data.commit_changes(&pool).await;
let _ = msg
.channel_id
.send_message(&ctx, |m| {
m.embed(|e| {
e.title(lm.get(&user_data.language, "meridian/title"))
.color(*THEME_COLOR)
.description(lm.get(&user_data.language, "meridian/24"))
})
})
.await;
} else {
let prefix = ctx.prefix(msg.guild_id).await;
command_help(ctx, msg, lm, &prefix, &user_data.language, "meridian").await;
}
}
#[command("lang")]
async fn language(ctx: &Context, msg: &Message, args: String) {
let (pool, lm) = get_ctx_data(&ctx).await;

View File

@ -24,11 +24,14 @@ use crate::{
},
framework::SendIterator,
get_ctx_data,
models::{ChannelData, CtxGuildData, GuildData, Timer, UserData},
models::{
channel_data::ChannelData, guild_data::GuildData, timer::Timer, user_data::UserData,
CtxGuildData,
},
time_parser::{natural_parser, TimeParser},
};
use chrono::{offset::TimeZone, NaiveDateTime};
use chrono::NaiveDateTime;
use rand::{rngs::OsRng, seq::IteratorRandom};
@ -136,7 +139,6 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
let language = UserData::language_of(&msg.author, &pool).await;
let timezone = UserData::timezone_of(&msg.author, &pool).await;
let meridian = UserData::meridian_of(&msg.author, &pool).await;
let mut channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), &pool)
.await
@ -172,13 +174,9 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
channel.commit_changes(&pool).await;
let content = lm.get(&language, "pause/paused_until").replace(
"{}",
&timezone
.timestamp(timestamp, 0)
.format(meridian.fmt_str())
.to_string(),
);
let content = lm
.get(&language, "pause/paused_until")
.replace("{}", &format!("<t:{}:D>", timestamp));
let _ = msg.channel_id.say(&ctx, content).await;
}
@ -864,7 +862,6 @@ impl ReminderScope {
#[derive(PartialEq, Eq, Hash, Debug)]
enum ReminderError {
LongTime,
LongInterval,
PastTime,
ShortInterval,
@ -891,7 +888,6 @@ trait ToResponse {
impl ToResponse for ReminderError {
fn to_response(&self) -> &'static str {
match self {
Self::LongTime => "remind/long_time",
Self::LongInterval => "interval/long_interval",
Self::PastTime => "remind/past_time",
Self::ShortInterval => "interval/short_interval",
@ -904,7 +900,6 @@ impl ToResponse for ReminderError {
fn to_response_natural(&self) -> &'static str {
match self {
Self::LongTime => "natural/long_time",
Self::InvalidTime => "natural/invalid_time",
_ => self.to_response(),
}
@ -1601,7 +1596,7 @@ async fn create_reminder<'a, U: Into<u64>, T: TryInto<i64>>(
expires_parser: Option<T>,
interval: Option<i64>,
content: &mut Content,
) -> Result<(), ReminderError> {
) -> Result<String, ReminderError> {
let user_id = user_id.into();
if let Some(g_id) = guild_id {
@ -1681,11 +1676,10 @@ async fn create_reminder<'a, U: Into<u64>, T: TryInto<i64>>(
.as_secs() as i64;
if time >= unix_time - 10 {
if time > unix_time + *MAX_TIME {
Err(ReminderError::LongTime)
} else {
sqlx::query!(
"
let uid = generate_uid();
sqlx::query!(
"
INSERT INTO reminders (
uid,
content,
@ -1710,23 +1704,22 @@ INSERT INTO reminders (
(SELECT id FROM users WHERE user = ? LIMIT 1)
)
",
generate_uid(),
content.content,
content.tts,
content.attachment,
content.attachment_name,
db_channel_id,
time as u32,
expires,
interval,
user_id
)
.execute(pool)
.await
.unwrap();
uid,
content.content,
content.tts,
content.attachment,
content.attachment_name,
db_channel_id,
time,
expires,
interval,
user_id
)
.execute(pool)
.await
.unwrap();
Ok(())
}
Ok(uid)
} else if time < 0 {
// case required for if python returns -1
Err(ReminderError::InvalidTime)

View File

@ -12,8 +12,10 @@ use serenity::{
use std::fmt;
use crate::models::CtxGuildData;
use crate::{command_help, get_ctx_data, models::UserData};
use crate::{
command_help, get_ctx_data,
models::{user_data::UserData, CtxGuildData},
};
use sqlx::MySqlPool;
use std::convert::TryFrom;