use vector_sdk::{BotEvent, VectorBot};
const BANNED_WORDS: &[&str] = &["spamword", "scamlink", "verboten"];
#[tokio::main]
async fn main() -> vector_sdk::Result<()> {
let nsec = std::env::var("VECTOR_NSEC").expect("set VECTOR_NSEC to your bot's nsec");
let bot = VectorBot::builder().nsec(nsec).public().build().await?;
println!("Moderation bot online as {}", bot.npub());
bot.on_event(|bot, event| async move {
match event {
BotEvent::MemberJoin { channel_id, npub } => {
let who = &npub[..npub.len().min(12)];
let _ = bot.channel(channel_id).send(&format!("👋 Welcome, {who}!")).await;
}
BotEvent::Message(msg) if msg.is_group && !msg.is_mine() => {
let lower = msg.text().to_lowercase();
if !BANNED_WORDS.iter().any(|w| lower.contains(w)) {
return;
}
if let Some(member) = msg.member() {
if member.is_admin() {
return; }
match member.ban().await {
Ok(()) => println!("Banned {} for a banned word", member.npub()),
Err(e) => eprintln!("Couldn't ban {}: {e}", member.npub()),
}
}
}
_ => {}
}
})
.await?;
Ok(())
}