pacbot/src/commands/pacman.rs

57 lines
1.5 KiB
Rust

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::<Vec<_>>();
// 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<Response, reqwest::Error> {
let mut url = "https://www.archlinux.org/packages/search/json/?q=".to_owned();
url.push_str(&query);
let resp = reqwest::get(&url)?.json::<Response>()?;
println!("{:?}", &resp);
Ok(resp)
}
#[derive(Serialize, Deserialize, Debug)]
struct Response {
version: i8,
limit: i32,
valid: bool,
results: Vec<Package>,
}
#[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<String>,
}