Make Weather command input locations

This commit is contained in:
Darren VanBuren 2016-07-28 02:23:43 -07:00
parent f450366777
commit 3d97df6f57
3 changed files with 29 additions and 8 deletions

1
Cargo.lock generated
View file

@ -4,6 +4,7 @@ version = "0.1.0"
dependencies = [
"hyper 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
"irc 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.73 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
]

View file

@ -8,3 +8,4 @@ irc = "0.11"
hyper = "0.9"
rustc-serialize = "0.3"
regex = "0.1"
lazy_static = "0.2"

View file

@ -2,6 +2,7 @@ extern crate irc;
extern crate hyper;
extern crate rustc_serialize;
extern crate regex;
#[macro_use] extern crate lazy_static;
use std::io::Read;
use irc::client::prelude::*;
@ -16,21 +17,21 @@ fn main() {
let server = IrcServer::new("config.json").unwrap();
server.identify().unwrap();
let my_nick = server.current_nickname();
let mentions_regex = Regex::new(&format!("({}(:|,) )(.+)$", my_nick)).unwrap();
for message in server.iter() {
let message = message.unwrap();
//println!("Received message: {}", message);
match message.command {
Command::PRIVMSG(ref target, ref msg) => handle_privmsg(target, msg, &message, &server),
Command::PRIVMSG(ref target, ref msg) => handle_privmsg(target, msg, &message, &mentions_regex, &server),
_ => (),
}
}
}
fn handle_privmsg(target: &String, message_body: &String, message_obj: &Message, server: &IrcServer) {
fn handle_privmsg(target: &String, message_body: &String, message_obj: &Message, mentions_regex: &Regex, server: &IrcServer) {
println!("Received message in {} from {}: {}", target, message_obj.source_nickname().unwrap(), message_body);
let source_nick = message_obj.source_nickname().unwrap();
let my_nick = server.current_nickname();
let mentions_regex = Regex::new(&format!("({}(:|,) )(.+)$", my_nick)).unwrap();
let mut inner_message = String::new();
match mentions_regex.captures(message_body) {
Some(capture) => match capture.at(3) {
@ -44,11 +45,30 @@ fn handle_privmsg(target: &String, message_body: &String, message_obj: &Message,
if inner_message == String::from("test") {
server.send_privmsg(target, &format!("{}: Hello!", source_nick)).unwrap();
} else if inner_message.starts_with("weather") {
// Weather
lazy_static! {static ref WEATHER_REGEX: Regex = Regex::new("(weather )(.+), (\\w+)$").unwrap(); }
match server.config().options {
None => println!("Options not configured!"),
Some(ref options) => match options.get("wunderground_api_key") {
None => println!("wunderground_api_key not configured!"),
Some(api_key) => server.send_privmsg(target, &format!("{}: {}", source_nick, &test_get_weather(api_key))).unwrap(),
Some(api_key) => {
let mut location_city = String::new();
let mut location_area = String::new();
match WEATHER_REGEX.captures(&inner_message) {
Some(capture) => {match capture.at(2) {
Some(city_match) => location_city = String::from(city_match),
None => (),
};
match capture.at(3) {
Some(area_match) => location_area = String::from(area_match),
None => (),
};
server.send_privmsg(target, &format!("{}: {}", source_nick, &test_get_weather(api_key, &location_city, &location_area))).unwrap();
},
None => (),
}
},
}
}
} else if message_body.contains("bot-quit") {
@ -56,11 +76,10 @@ fn handle_privmsg(target: &String, message_body: &String, message_obj: &Message,
}
}
fn test_get_weather(api_key: &String) -> String {
fn test_get_weather(api_key: &String, location_city: &String, location_area: &String) -> String {
let client = Client::new();
let data_type = "conditions";
let location = "WA/Maple_Valley";
let url = &format!("{}{}/{}/q/{}.json", WEATHER_API_BASE, api_key, data_type, location);
let url = &format!("{}{}/{}/q/{}/{}.json", WEATHER_API_BASE, api_key, data_type, location_area, location_city);
println!("Attempting to fetch {}", url);
let mut response = match client.get(url).send() {
Ok(response) => response,