From f716ecd319977aea7773dc689592fc8193c609f1 Mon Sep 17 00:00:00 2001 From: Jokler Date: Wed, 6 Dec 2017 03:45:10 +0100 Subject: Add KeepNick plugin --- src/plugins/keepnick.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/plugins/keepnick.rs (limited to 'src/plugins/keepnick.rs') diff --git a/src/plugins/keepnick.rs b/src/plugins/keepnick.rs new file mode 100644 index 0000000..5f5d92c --- /dev/null +++ b/src/plugins/keepnick.rs @@ -0,0 +1,51 @@ +use irc::client::prelude::*; +use irc::error::Error as IrcError; + +use plugin::*; + +#[derive(PluginName, Debug)] +pub struct KeepNick; + +impl KeepNick { + pub fn new() -> KeepNick { + KeepNick {} + } + + fn check_nick(&self, server: &IrcServer) -> Result<(), IrcError> { + let cfg_nick = match server.config().nickname { + Some(ref nick) => nick.clone(), + None => return Ok(()), + }; + + let server_nick = server.current_nickname(); + + if server_nick != cfg_nick { + info!("Trying to switch nick from {} to {}", server_nick, cfg_nick); + server.send(Command::NICK(cfg_nick)) + + } else { + Ok(()) + } + } +} + +impl Plugin for KeepNick { + fn is_allowed(&self, _: &IrcServer, message: &Message) -> bool { + match message.command { + Command::QUIT(_) => true, + _ => false, + } + } + + fn execute(&self, server: &IrcServer, _: &Message) -> Result<(), IrcError> { + self.check_nick(server) + } + + fn command(&self, server: &IrcServer, command: PluginCommand) -> Result<(), IrcError> { + server.send_notice(&command.source, + "This Plugin does not implement any commands.") + } +} + +#[cfg(test)] +mod tests {} -- cgit v1.2.3-70-g09d2