internal ChatClient(Plugin plugin, ServerCfg configuration) { this.plugin = plugin; this.configuration = configuration; StatsDatabase = new StatsDatabaseManager(ConnectDatabase(configuration.Backend)); var handlers = new List <ChatClientEventHandler> { // This handler binds ChatUsers to database users and should therefore run first new BindHandler(), // Logs client events to stdout and optionally the log file new LogHandler(), // Generates statistics new StatsHandler(), // Performs channel-administrative actions new AdministrationHandler(), // Processes commands new CommandHandler() }; foreach (var handler in handlers) { handler.BindClient(this); handler.Initialise(); } var eventManager = new ChatClientEventManager(handlers); AttachEventHandlers(eventManager); }
private void AttachEventHandlers(ChatClientEventManager eventManager) { plugin.OnMessageReceived += message => eventManager.HandleMessage(new MessageEvent(message, reply => Reply(message.Channel, message.Sender, reply), reply => SendMessage(message.Channel, reply))); plugin.OnNameChange += (oldName, newName) => eventManager.HandleNameChange(new NameChangeEvent(oldName, newName)); plugin.OnKick += (kickee, channel, kicker, reason) => eventManager.HandleKick(new KickEvent(kickee, channel, kicker, reason)); plugin.OnKicked += (channel, kicker, reason) => eventManager.HandleKicked(new KickedEvent(channel, kicker, reason)); plugin.OnJoin += (user, channel) => eventManager.HandleJoin(new JoinEvent(user, channel)); plugin.OnPart += (user, channel) => eventManager.HandlePart(new PartEvent(user, channel)); plugin.OnQuit += (user, reason) => eventManager.HandleQuit(new QuitEvent(user, reason)); }