bot: apply service filters
This commit is contained in:
parent
ad420dc874
commit
87604b38d3
13
src/bot.rs
13
src/bot.rs
|
@ -100,11 +100,18 @@ impl BadNewsBot {
|
||||||
const KEY_MESSAGE: &str = "MESSAGE";
|
const KEY_MESSAGE: &str = "MESSAGE";
|
||||||
|
|
||||||
if let Some(unit) = record.get(KEY_UNIT) {
|
if let Some(unit) = record.get(KEY_UNIT) {
|
||||||
if !self.config.units.iter().map(|u| &u.name).any(|name| name == unit) {
|
let unit_config = match self.config.units.iter().find(|u| &u.name == unit) {
|
||||||
return;
|
Some(config) => config,
|
||||||
}
|
None => return,
|
||||||
|
};
|
||||||
|
|
||||||
let message = record.get(KEY_MESSAGE);
|
let message = record.get(KEY_MESSAGE);
|
||||||
|
if let Some(filter) = &unit_config.filter {
|
||||||
|
if message.is_none() || !filter.is_match(message.unwrap()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let message = format!(
|
let message = format!(
|
||||||
"[{}] {}",
|
"[{}] {}",
|
||||||
unit.strip_suffix(".service").unwrap_or(unit),
|
unit.strip_suffix(".service").unwrap_or(unit),
|
||||||
|
|
|
@ -24,12 +24,12 @@ pub struct Config {
|
||||||
/// invitations to this room.
|
/// invitations to this room.
|
||||||
pub room_id: RoomId,
|
pub room_id: RoomId,
|
||||||
/// Units to watch for logs
|
/// Units to watch for logs
|
||||||
|
#[serde(deserialize_with = "list_of_units")]
|
||||||
pub units: Vec<Unit>,
|
pub units: Vec<Unit>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Holds a single unit's configuration.
|
/// Holds a single unit's configuration.
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
#[serde(from = "SerializedUnit")]
|
|
||||||
pub struct Unit {
|
pub struct Unit {
|
||||||
/// Can be serialized from a string only instead of a map.
|
/// Can be serialized from a string only instead of a map.
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
@ -67,6 +67,14 @@ impl FromStr for Unit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn list_of_units<'de, D>(deserializer: D) -> Result<Vec<Unit>, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let units: Vec<SerializedUnit> = Deserialize::deserialize(deserializer)?;
|
||||||
|
Ok(units.into_iter().map(From::from).collect())
|
||||||
|
}
|
||||||
|
|
||||||
fn unit_name_or_struct<'de, T, D>(deserializer: D) -> Result<T, D::Error>
|
fn unit_name_or_struct<'de, T, D>(deserializer: D) -> Result<T, D::Error>
|
||||||
where
|
where
|
||||||
T: Deserialize<'de> + FromStr<Err = Void>,
|
T: Deserialize<'de> + FromStr<Err = Void>,
|
||||||
|
|
Loading…
Reference in a new issue