use std::cell::{Cell, RefCell}; use std::collections::HashSet; use hexavalent::event::print::ChannelMessage; use hexavalent::hook::{Eat, Priority}; use hexavalent::str::HexStr; use hexavalent::{export_plugin, Plugin, PluginHandle}; #[derive(Default)] struct SimplePlugin { count: Cell, nicks: RefCell>, } impl SimplePlugin { fn message_cb( &self, _ph: PluginHandle<'_, Self>, [nick, _text, _mode, _ident]: [&HexStr; 4], ) -> Eat { self.count.set(self.count.get() + 1); self.nicks.borrow_mut().insert(nick.to_string()); Eat::None } } impl Plugin for SimplePlugin { fn init(&self, ph: PluginHandle<'_, Self>) { ph.hook_print(ChannelMessage, Priority::Normal, Self::message_cb); ph.hook_command( c"count", c"Usage: COUNT, print message count", Priority::Normal, |plugin, ph, _words| { let count = plugin.count.get(); let nicks = plugin.nicks.borrow().len(); ph.print(format!( "Received {} messages from {} unique nicks.", count, nicks )); Eat::All }, ); ph.print(c"Plugin loaded successfully!"); } fn deinit(&self, ph: PluginHandle<'_, Self>) { ph.print(c"Unloading plugin..."); } } export_plugin!( SimplePlugin, "Simple Example", "Just counts messages, try /count", "1.0.0" );