pub fn is_group_msg(event:&serde_json::Value) -> bool {
let post_type_json = &event["post_type"];
if let Some(post_type) = post_type_json.as_str() {
if post_type == "message" {
let message_type_json = &event["message_type"];
if let Some(message_type) = message_type_json.as_str() {
if message_type == "group" {
return true;
}
}
}
}
return false;
}
pub fn is_private_msg(event:&serde_json::Value) -> bool {
let post_type_json = &event["post_type"];
if let Some(post_type) = post_type_json.as_str() {
if post_type == "message" {
let message_type_json = &event["message_type"];
if let Some(message_type) = message_type_json.as_str() {
if message_type == "private" {
return true;
}
}
}
}
return false;
}
fn _get_cq_message(event:&serde_json::Value) -> Option<String> {
let message_json = &event["message"];
if let Some(message) = message_json.as_str() {
return Some(message.to_string());
} else if message_json.is_array() {
if let Ok(message) = cqtool::to_str_msg(message_json) {
return Some(message);
}
}
return None;
}
pub fn full_match(event:&serde_json::Value,key:&str) -> bool {
if let Some(cq_message) = _get_cq_message(event) {
if cq_message == key {
return true;
}
}
return false;
}
pub fn fuzzy_match(event:&serde_json::Value,key:&str) -> bool {
if let Some(cq_message) = _get_cq_message(event) {
if cq_message.contains(key) {
return true;
}
}
return false;
}
pub fn regex_match(event:&serde_json::Value,regex:&str) -> Vec<Vec<String>> {
if let Some(cq_message) = _get_cq_message(event) {
let re = fancy_regex::Regex::new(regex).unwrap();
let mut result = Vec::new();
for cap_result in re.captures_iter(&cq_message) {
if let Ok(cap) = cap_result {
let mut group = Vec::new();
for i in 0..cap.len() {
if let Some(m) = cap.get(i) {
group.push(m.as_str().to_string());
}
}
result.push(group);
}
}
return result;
}
return Vec::new();
}
pub fn prefix_match(event:&serde_json::Value,key:&str) -> Option<String> {
if let Some(cq_message) = _get_cq_message(event) {
if cq_message.starts_with(key) {
return Some(cq_message[key.len()..].to_owned());
}
}
return None;
}
pub fn group_regex_match(event:&serde_json::Value,regex:&str) -> Vec<Vec<String>> {
if !is_group_msg(event) {
return Vec::new();
}
return regex_match(event,regex);
}
pub fn group_prefix_match(event:&serde_json::Value,key:&str) -> Option<String> {
if !is_group_msg(event) {
return None;
}
return prefix_match(event,key);
}
pub fn group_fuzzy_match(event:&serde_json::Value,key:&str) -> bool {
if !is_group_msg(event) {
return false;
}
return fuzzy_match(event,key);
}
pub fn private_regex_match(event:&serde_json::Value,regex:&str) -> Vec<Vec<String>> {
if !is_private_msg(event) {
return Vec::new();
}
return regex_match(event,regex);
}
pub fn private_prefix_match(event:&serde_json::Value,key:&str) -> Option<String> {
if !is_private_msg(event) {
return None;
}
return prefix_match(event,key);
}
pub fn private_fuzzy_match(event:&serde_json::Value,key:&str) -> bool {
if !is_private_msg(event) {
return false;
}
return fuzzy_match(event,key);
}
pub fn group_full_macth(event:&serde_json::Value,key:&str) -> bool {
if !is_group_msg(event) {
return false;
}
return full_match(event,key);
}
pub fn private_full_macth(event:&serde_json::Value,key:&str) -> bool {
if !is_private_msg(event) {
return false;
}
return full_match(event,key);
}
pub fn auto_gen_reply(event:&serde_json::Value,msg:&str) -> Result<serde_json::Value,Box<dyn std::error::Error>> {
if is_group_msg(event) {
return Ok(serde_json::json!({
"action": "send_group_msg",
"params": {
"group_id": event["group_id"],
"message": msg
}
}));
} else if is_private_msg(event) {
return Ok(serde_json::json!({
"action": "send_private_msg",
"params": {
"user_id": event["user_id"],
"message": msg
}
}));
}
return Err("unsupport message_type".into());
}