From c14904124c0d3bc13b8f0739eb174ee5aa7c8b50 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Mon, 23 Aug 2021 14:57:59 +0200 Subject: feat: reserve a study hour --- src/browser/mod.rs | 10 ++++++++++ src/browser/web_browser.rs | 21 +++++++++++++++++++++ src/callbacks.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) (limited to 'src') diff --git a/src/browser/mod.rs b/src/browser/mod.rs index 4c7ef8e..528849d 100644 --- a/src/browser/mod.rs +++ b/src/browser/mod.rs @@ -72,3 +72,13 @@ pub async unsafe fn get_timetable() -> WebDriverResult WebDriverResult { + if let Some(driver) = &WEB_BROWSER { + let result = driver.select_timetable_row(index).await?; + + return Ok(result); + } + + Ok(false) +} diff --git a/src/browser/web_browser.rs b/src/browser/web_browser.rs index 5a855d5..10dacb7 100644 --- a/src/browser/web_browser.rs +++ b/src/browser/web_browser.rs @@ -188,6 +188,27 @@ impl Browser { Ok(None) } + + // Select the row for the timetable booking + pub async unsafe fn select_timetable_row(&self, index: &str) -> WebDriverResult { + if let Some(_d) = &self.driver { + _d.find_element(By::Css( + &format!("#slotContainerTable tr:nth-child({}) td", index).to_owned()[..], + )) + .await? + .click() + .await?; + thread::sleep(time::Duration::from_millis(2000)); + _d.find_element(By::Css("#partialQuestionYesNoConfirmButton:last-child")) + .await? + .click() + .await?; + + return Ok(true); + } + + Ok(false) + } } /// The static unsafe variable used to open a web browser diff --git a/src/callbacks.rs b/src/callbacks.rs index 53ae07c..8b4e846 100644 --- a/src/callbacks.rs +++ b/src/callbacks.rs @@ -91,6 +91,34 @@ pub async fn handler( } } }, + "timetable" => unsafe { + match browser::select_table_row(call[2]).await { + Ok(result) => { + if result { + cx.requester + .edit_message_text( + chat_id.to_string(), + cx.update.message.clone().unwrap().id, + "Reservation made! ✅", + ) + .await?; + return Ok(true); + } else { + cx.requester + .edit_message_text( + chat_id.to_string(), + cx.update.message.clone().unwrap().id, + "Error, try again! ⚠️", + ) + .await?; + return Ok(false); + } + } + Err(_) => { + return Ok(false); + } + } + }, _ => Ok(false), } } -- cgit v1.2.3-18-g5258