removed all remaining instances of UserData::response. languagemanager now loads from string compiled into executable. languagemanager falls back properly. removed unnecessary param from language_of

This commit is contained in:
2020-11-22 01:31:50 +00:00
parent 6a7491d094
commit d8bf0240e4
9 changed files with 371 additions and 346 deletions

View File

@ -50,6 +50,7 @@ use std::{
time::{SystemTime, UNIX_EPOCH},
};
use crate::language_manager::LanguageManager;
use regex::RegexBuilder;
fn shorthand_displacement(seconds: u64) -> String {
@ -113,13 +114,19 @@ async fn create_webhook(
#[supports_dm(false)]
#[permission_level(Restricted)]
async fn pause(ctx: &Context, msg: &Message, args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
let mut channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), &pool)
@ -135,19 +142,16 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
if channel.paused {
let _ = msg
.channel_id
.say(
&ctx,
user_data.response(&pool, "pause/paused_indefinite").await,
)
.say(&ctx, lm.get(&user_data.language, "pause/paused_indefinite"))
.await;
} else {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "pause/unpaused").await)
.say(&ctx, lm.get(&user_data.language, "pause/unpaused"))
.await;
}
} else {
let parser = TimeParser::new(args, user_data.timezone.parse().unwrap());
let parser = TimeParser::new(args, user_data.timezone());
let pause_until = parser.timestamp();
match pause_until {
@ -159,17 +163,14 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
channel.commit_changes(&pool).await;
let content = user_data
.response(&pool, "pause/paused_until")
.await
.replace(
"{}",
&user_data
.timezone()
.timestamp(timestamp, 0)
.format("%Y-%m-%d %H:%M:%S")
.to_string(),
);
let content = lm.get(&user_data.language, "pause/paused_until").replace(
"{}",
&user_data
.timezone()
.timestamp(timestamp, 0)
.format("%Y-%m-%d %H:%M:%S")
.to_string(),
);
let _ = msg.channel_id.say(&ctx, content).await;
}
@ -177,7 +178,7 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
Err(_) => {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "pause/invalid_time").await)
.say(&ctx, lm.get(&user_data.language, "pause/invalid_time"))
.await;
}
}
@ -187,20 +188,26 @@ async fn pause(ctx: &Context, msg: &Message, args: String) {
#[command]
#[permission_level(Restricted)]
async fn offset(ctx: &Context, msg: &Message, args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
if args.is_empty() {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "offset/help").await)
.say(&ctx, lm.get(&user_data.language, "offset/help"))
.await;
} else {
let parser = TimeParser::new(args, user_data.timezone());
@ -237,7 +244,7 @@ UPDATE reminders SET `time` = `time` + ? WHERE reminders.channel_id = ?
.unwrap();
}
let response = user_data.response(&pool, "offset/success").await.replacen(
let response = lm.get(&user_data.language, "offset/success").replacen(
"{}",
&displacement.to_string(),
1,
@ -247,7 +254,7 @@ UPDATE reminders SET `time` = `time` + ? WHERE reminders.channel_id = ?
} else {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "offset/invalid_time").await)
.say(&ctx, lm.get(&user_data.language, "offset/invalid_time"))
.await;
}
}
@ -256,13 +263,19 @@ UPDATE reminders SET `time` = `time` + ? WHERE reminders.channel_id = ?
#[command]
#[permission_level(Restricted)]
async fn nudge(ctx: &Context, msg: &Message, args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
let mut channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), &pool)
@ -270,9 +283,8 @@ async fn nudge(ctx: &Context, msg: &Message, args: String) {
.unwrap();
if args.is_empty() {
let content = user_data
.response(&pool, "nudge/no_argument")
.await
let content = lm
.get(&user_data.language, "nudge/no_argument")
.replace("{nudge}", &format!("{}s", &channel.nudge.to_string()));
let _ = msg.channel_id.say(&ctx, content).await;
@ -285,14 +297,14 @@ async fn nudge(ctx: &Context, msg: &Message, args: String) {
if displacement < i16::MIN as i64 || displacement > i16::MAX as i64 {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "nudge/invalid_time").await)
.say(&ctx, lm.get(&user_data.language, "nudge/invalid_time"))
.await;
} else {
channel.nudge = displacement as i16;
channel.commit_changes(&pool).await;
let response = user_data.response(&pool, "nudge/success").await.replacen(
let response = lm.get(&user_data.language, "nudge/success").replacen(
"{}",
&displacement.to_string(),
1,
@ -305,7 +317,7 @@ async fn nudge(ctx: &Context, msg: &Message, args: String) {
Err(_) => {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "nudge/invalid_time").await)
.say(&ctx, lm.get(&user_data.language, "nudge/invalid_time"))
.await;
}
}
@ -399,13 +411,19 @@ impl LookReminder {
#[command("look")]
#[permission_level(Managed)]
async fn look(ctx: &Context, msg: &Message, args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
@ -531,10 +549,10 @@ LIMIT
if reminders.is_empty() {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "look/no_reminders").await)
.say(&ctx, lm.get(&user_data.language, "look/no_reminders"))
.await;
} else {
let inter = user_data.response(&pool, "look/inter").await;
let inter = lm.get(&user_data.language, "look/inter");
let display = reminders.iter().map(|reminder| {
let time_display = match flags.time_display {
@ -568,19 +586,25 @@ LIMIT
#[command("del")]
#[permission_level(Managed)]
async fn delete(ctx: &Context, msg: &Message, _args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "del/listing").await)
.say(&ctx, lm.get(&user_data.language, "del/listing"))
.await;
let reminders = if let Some(guild_id) = msg.guild_id.map(|f| f.as_u64().to_owned()) {
@ -658,7 +682,7 @@ WHERE
let _ = msg.channel_id.say_lines(&ctx, enumerated_reminders).await;
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "del/listed").await)
.say(&ctx, lm.get(&user_data.language, "del/listed"))
.await;
let reply = msg
@ -721,7 +745,7 @@ INSERT INTO events (event_name, bulk_count, guild_id, user_id) VALUES ('delete',
.await;
}
let content = user_data.response(&pool, "del/count").await.replacen(
let content = lm.get(&user_data.language, "del/count").replacen(
"{}",
&count_row.count.to_string(),
1,
@ -729,9 +753,8 @@ INSERT INTO events (event_name, bulk_count, guild_id, user_id) VALUES ('delete',
let _ = msg.channel_id.say(&ctx, content).await;
} else {
let content = user_data
.response(&pool, "del/count")
.await
let content = lm
.get(&user_data.language, "del/count")
.replacen("{}", "0", 1);
let _ = msg.channel_id.say(&ctx, content).await;
@ -757,15 +780,21 @@ async fn timer(ctx: &Context, msg: &Message, args: String) {
format!("{:02}:{:02}:{:02}", hours, minutes, seconds)
}
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let language = UserData::language_of(&msg.author, &pool).await;
let mut args_iter = args.splitn(2, ' ');
@ -796,7 +825,7 @@ async fn timer(ctx: &Context, msg: &Message, args: String) {
if count >= 25 {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/limit").await)
.say(&ctx, lm.get(&language, "timer/limit"))
.await;
} else {
let name = args_iter
@ -808,7 +837,7 @@ async fn timer(ctx: &Context, msg: &Message, args: String) {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/success").await)
.say(&ctx, lm.get(&language, "timer/success"))
.await;
}
}
@ -839,18 +868,18 @@ DELETE FROM timers WHERE owner = ? AND name = ?
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/deleted").await)
.say(&ctx, lm.get(&language, "timer/deleted"))
.await;
} else {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/not_found").await)
.say(&ctx, lm.get(&language, "timer/not_found"))
.await;
}
} else {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/help").await)
.say(&ctx, lm.get(&language, "timer/help"))
.await;
}
}
@ -858,7 +887,7 @@ DELETE FROM timers WHERE owner = ? AND name = ?
_ => {
let _ = msg
.channel_id
.say(&ctx, user_data.response(&pool, "timer/help").await)
.say(&ctx, lm.get(&language, "timer/help"))
.await;
}
}
@ -1026,13 +1055,19 @@ async fn remind_command(ctx: &Context, msg: &Message, args: String, command: Rem
}
}
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
@ -1092,9 +1127,8 @@ async fn remind_command(ctx: &Context, msg: &Message, args: String, command: Rem
.flatten()
.unwrap_or(0) as u64;
let str_response = user_data
.response(&pool, &response.to_response())
.await
let str_response = lm
.get(&user_data.language, &response.to_response())
.replace(
"{prefix}",
&GuildData::prefix_from_id(msg.guild_id, &pool).await,
@ -1110,13 +1144,19 @@ async fn remind_command(ctx: &Context, msg: &Message, args: String, command: Rem
#[command("natural")]
#[permission_level(Managed)]
async fn natural(ctx: &Context, msg: &Message, args: String) {
let pool = ctx
.data
.read()
.await
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
let pool;
let lm;
{
let data = ctx.data.read().await;
pool = data
.get::<SQLPool>()
.cloned()
.expect("Could not get SQLPool from data");
lm = data.get::<LanguageManager>().cloned().unwrap();
}
let now = SystemTime::now();
let since_epoch = now
@ -1125,9 +1165,9 @@ async fn natural(ctx: &Context, msg: &Message, args: String) {
let user_data = UserData::from_user(&msg.author, &ctx, &pool).await.unwrap();
let send_str = user_data.response(&pool, "natural/send").await;
let to_str = user_data.response(&pool, "natural/to").await;
let every_str = user_data.response(&pool, "natural/every").await;
let send_str = lm.get(&user_data.language, "natural/send");
let to_str = lm.get(&user_data.language, "natural/to");
let every_str = lm.get(&user_data.language, "natural/every");
let mut args_iter = args.splitn(2, &send_str);
@ -1241,9 +1281,8 @@ async fn natural(ctx: &Context, msg: &Message, args: String) {
let offset = timestamp as u64 - since_epoch.as_secs();
let str_response = user_data
.response(&pool, &res.to_response_natural())
.await
let str_response = lm
.get(&user_data.language, &res.to_response_natural())
.replace(
"{prefix}",
&GuildData::prefix_from_id(msg.guild_id, &pool).await,
@ -1275,9 +1314,8 @@ async fn natural(ctx: &Context, msg: &Message, args: String) {
}
}
let content = user_data
.response(&pool, "natural/bulk_set")
.await
let content = lm
.get(&user_data.language, "natural/bulk_set")
.replace("{}", &ok_count.to_string());
let _ = msg.channel_id.say(&ctx, content).await;
@ -1291,9 +1329,8 @@ async fn natural(ctx: &Context, msg: &Message, args: String) {
} else {
let prefix = GuildData::prefix_from_id(msg.guild_id, &pool).await;
let resp = user_data
.response(&pool, "natural/no_argument")
.await
let resp = lm
.get(&user_data.language, "natural/no_argument")
.replace("{prefix}", &prefix);
let _ = msg