use serenity::model::channel::Message; use serenity::prelude::*; use serde::{Serialize, Deserialize}; extern crate reqwest; pub fn query_pacman(ctx: Context, msg: Message) { let mut args = msg.content.split_whitespace().collect::>(); // the !pacman args.remove(0); if args.len() == 0 { if let Err(cause) = msg.channel_id .say(ctx.http, "Error: expected at least 1 additional argument") { println!("Could not send message: {:?}", cause); } return; } let query = args.join(" "); match make_call(&query) { Err(err) => println!("{:?}", err), Ok(result) => { if let Err(_cause) = msg.channel_id.say(ctx.http, format!("{}: version {}", result.results[0].pkgname, result.results[0].pkgver)) { println!("asd"); } } } } fn make_call(query: &str) -> Result { let mut url = "https://www.archlinux.org/packages/search/json/?q=".to_owned(); url.push_str(&query); let resp = reqwest::get(&url)?.json::()?; println!("{:?}", &resp); Ok(resp) } #[derive(Serialize, Deserialize, Debug)] struct Response { version: i8, limit: i32, valid: bool, results: Vec, } #[derive(Serialize, Deserialize, Debug)] struct Package { pkgname: String, pkgbase: String, repo: String, pkgver: String, pkgdesc: String, url: String, compressed_size: i64, installed_size: i64, build_date: String, last_update: String, flag_date: Option, }