57 lines
1.5 KiB
Rust
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>,
|
|
}
|