use nagisa_types::prelude::*;
use tokio::sync::mpsc;
fn is_superseded_frame(event: &Event) -> bool {
matches!(event, Event::Raw(r) if r.kind == "lifecycle_connect")
}
pub(crate) use nagisa_core::wire::log_wire;
fn normalize_at_names(event: &mut Event, vendor: nagisa_types::vendor::Vendor) {
if vendor != nagisa_types::vendor::Vendor::LagrangeOneBot {
return;
}
if let Event::Message(m) = event {
for seg in &mut m.content {
if let Segment::Mention { name: Some(n), .. } = seg {
if let Some(rest) = n.strip_prefix('@') {
*n = rest.to_string();
}
}
}
}
}
pub(crate) fn prepare_inbound(mut event: Event, vendor: nagisa_types::vendor::Vendor) -> Option<Event> {
if is_superseded_frame(&event) {
return None;
}
normalize_at_names(&mut event, vendor);
Some(event)
}
pub(crate) async fn dispatch_event(
sink: &mpsc::Sender<Event>,
event: Event,
vendor: nagisa_types::vendor::Vendor,
) -> bool {
if let Some(event) = prepare_inbound(event, vendor) {
if sink.send(event).await.is_err() {
tracing::warn!("event sink closed");
return true;
}
}
false
}