87 lines
2.1 KiB
Rust
87 lines
2.1 KiB
Rust
use crate::commands::*;
|
|
use serde::{Deserialize, Serialize};
|
|
use serenity::model::channel::Message;
|
|
use std::fmt;
|
|
|
|
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 {
|
|
send(
|
|
msg.channel_id,
|
|
"Error: expected at least 1 additional argument",
|
|
&ctx,
|
|
);
|
|
return;
|
|
}
|
|
if args.len() == 1 {
|
|
// try by full package name
|
|
let response: Response = search(
|
|
&format!(
|
|
"https://www.archlinux.org/packages/search/json/?name={}",
|
|
&args[0]
|
|
),
|
|
EMPTY_RESULT,
|
|
);
|
|
// this is 1 for most packages and 2 if there’s a second version in testing
|
|
if response.results.len() != 0 {
|
|
respond_with_results(msg.channel_id, &response.results, &ctx);
|
|
return;
|
|
}
|
|
}
|
|
let query = args.join(" ");
|
|
let response: Response = search(
|
|
&format!(
|
|
"https://www.archlinux.org/packages/search/json/?q={}",
|
|
&query
|
|
),
|
|
EMPTY_RESULT,
|
|
);
|
|
if response.results.len() == 0 {
|
|
send(msg.channel_id, "No results", &ctx);
|
|
return;
|
|
}
|
|
respond_with_results(msg.channel_id, &response.results, &ctx);
|
|
}
|
|
|
|
const EMPTY_RESULT: Response = Response {
|
|
version: 0,
|
|
limit: 0,
|
|
valid: false,
|
|
results: Vec::new(),
|
|
};
|
|
|
|
#[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>,
|
|
}
|
|
|
|
impl fmt::Display for Package {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
write!(
|
|
f,
|
|
"{}/{} {}\n {}",
|
|
self.repo, self.pkgname, self.pkgver, self.pkgdesc
|
|
)
|
|
}
|
|
}
|