working on time parser
This commit is contained in:
parent
d097f36313
commit
c1a4092e3c
@ -149,7 +149,7 @@ async fn pause(ctx: &Context, msg: &Message, args: String) -> CommandResult {
|
|||||||
let pool = ctx.data.read().await
|
let pool = ctx.data.read().await
|
||||||
.get::<SQLPool>().cloned().expect("Could not get SQLPool from data");
|
.get::<SQLPool>().cloned().expect("Could not get SQLPool from data");
|
||||||
|
|
||||||
let channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), pool.clone()).await.unwrap(),
|
let channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), pool.clone()).await.unwrap();
|
||||||
|
|
||||||
channel.commit_changes(pool).await;
|
channel.commit_changes(pool).await;
|
||||||
|
|
||||||
|
@ -47,6 +47,15 @@ SELECT id, guild, name, prefix FROM guilds WHERE guild = ?
|
|||||||
.await?)
|
.await?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn commit_changes(&self, pool: MySqlPool) {
|
||||||
|
sqlx::query!(
|
||||||
|
"
|
||||||
|
UPDATE guilds SET name = ?, prefix = ? WHERE id = ?
|
||||||
|
", self.name, self.prefix, self.id)
|
||||||
|
.execute(&pool)
|
||||||
|
.await.unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ChannelData {
|
pub struct ChannelData {
|
||||||
|
@ -4,6 +4,8 @@ use std::time::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use chrono_tz::Tz;
|
use chrono_tz::Tz;
|
||||||
|
use chrono::offset::Utc;
|
||||||
|
use chrono::{Timelike, Datelike, TimeZone};
|
||||||
|
|
||||||
enum ParseType {
|
enum ParseType {
|
||||||
Explicit,
|
Explicit,
|
||||||
@ -42,17 +44,18 @@ impl TimeParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn timestamp(&self) -> i32 {
|
pub fn timestamp(&self) -> i32 {
|
||||||
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn displacement(&self) -> i32 {
|
pub fn displacement(&self) -> i32 {
|
||||||
|
0
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process(&self) -> i32 {
|
fn process(&self) -> i32 {
|
||||||
match self.parse_type {
|
match self.parse_type {
|
||||||
ParseType::Explicit => {
|
ParseType::Explicit => {
|
||||||
self.process_explicit()
|
// TODO remove unwrap from here
|
||||||
|
self.process_explicit().unwrap()
|
||||||
},
|
},
|
||||||
|
|
||||||
ParseType::Displacement => {
|
ParseType::Displacement => {
|
||||||
@ -61,50 +64,51 @@ impl TimeParser {
|
|||||||
.duration_since(UNIX_EPOCH)
|
.duration_since(UNIX_EPOCH)
|
||||||
.expect("Time calculated as going backwards. Very bad");
|
.expect("Time calculated as going backwards. Very bad");
|
||||||
|
|
||||||
since_epoch.as_secs() + self.process_displacement()
|
since_epoch.as_secs() as i32 + self.process_displacement()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_explicit(&self) -> i32 {
|
fn process_explicit(&self) -> Result<i32, Box<dyn std::error::Error>> {
|
||||||
|
let dt = self.timezone.datetime_from_str(self.time_string.as_str(), "%d/%m/%Y-%H:%M:%S")?;
|
||||||
|
|
||||||
0
|
Ok(dt.timestamp() as i32)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn process_displacement(&self) -> i32 {
|
fn process_displacement(&self) -> i32 {
|
||||||
let mut current_buffer = "0".to_string();
|
let mut current_buffer = "0".to_string();
|
||||||
|
|
||||||
let mut seconds = 0;
|
let mut seconds = 0 as i32;
|
||||||
let mut minutes = 0;
|
let mut minutes = 0 as i32;
|
||||||
let mut hours = 0;
|
let mut hours = 0 as i32;
|
||||||
let mut days = 0;
|
let mut days = 0 as i32;
|
||||||
|
|
||||||
for character in self.time_string.chars() {
|
for character in self.time_string.chars() {
|
||||||
match character {
|
match character {
|
||||||
|
|
||||||
's' => {
|
's' => {
|
||||||
seconds = current_buffer.parse::<u32>().unwrap();
|
seconds = current_buffer.parse::<i32>().unwrap();
|
||||||
current_buffer = String::from("0");
|
current_buffer = String::from("0");
|
||||||
},
|
},
|
||||||
|
|
||||||
'm' => {
|
'm' => {
|
||||||
minutes = current_buffer.parse::<u32>().unwrap();
|
minutes = current_buffer.parse::<i32>().unwrap();
|
||||||
current_buffer = String::from("0");
|
current_buffer = String::from("0");
|
||||||
},
|
},
|
||||||
|
|
||||||
'h' => {
|
'h' => {
|
||||||
hours = current_buffer.parse::<u32>().unwrap();
|
hours = current_buffer.parse::<i32>().unwrap();
|
||||||
current_buffer = String::from("0");
|
current_buffer = String::from("0");
|
||||||
},
|
},
|
||||||
|
|
||||||
'd' => {
|
'd' => {
|
||||||
days = current_buffer.parse::<u32>().unwrap();
|
days = current_buffer.parse::<i32>().unwrap();
|
||||||
current_buffer = String::from("0");
|
current_buffer = String::from("0");
|
||||||
},
|
},
|
||||||
|
|
||||||
c => {
|
c => {
|
||||||
if c.is_digit(10) {
|
if c.is_digit(10) {
|
||||||
current_buffer += c.as_str();
|
current_buffer += &c.to_string();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// raise exception
|
// raise exception
|
||||||
@ -113,7 +117,7 @@ impl TimeParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let full = seconds + (minutes * 60) + (hours * 3600) + (days * 86400) + current_buffer.parse::<u32>() *
|
let full = seconds + (minutes * 60) + (hours * 3600) + (days * 86400) + current_buffer.parse::<i32>().unwrap() *
|
||||||
if self.inverted { -1 } else { 1 };
|
if self.inverted { -1 } else { 1 };
|
||||||
|
|
||||||
full
|
full
|
||||||
|
Loading…
Reference in New Issue
Block a user