protected virtual void RememberMessage(string channel, LastMessage message) { List <LastMessage> lastMessages; if (!ChannelToLastMessages.TryGetValue(channel, out lastMessages)) { lastMessages = new List <LastMessage>(); ChannelToLastMessages[channel] = lastMessages; } lastMessages.Insert(0, message); while (lastMessages.Count > Config.RememberLastMessages && lastMessages.Count > 0) { lastMessages.RemoveAt(lastMessages.Count - 1); } }
protected virtual bool HandleReplacementCommand(IChannelMessageEventArgs e) { List <ITransformCommand> transformations = Parser.ParseSubCommands(e.Message); if (transformations == null) { // something that didn't even look like sed commands return(false); } if (transformations.Count == 0) { // something that looked like sed commands but didn't work return(true); } // find the message to perform a replacement in List <LastMessage> lastMessages; if (!ChannelToLastMessages.TryGetValue(e.Channel, out lastMessages)) { // no last bodies for this channel; never mind return(true); } bool foundAny = false; foreach (LastMessage lastMessage in lastMessages) { string replaced = lastMessage.Body; foreach (ITransformCommand transformation in transformations) { replaced = transformation.Transform(replaced); } if (replaced != lastMessage.Body) { // success! if (Config.MaxResultLength >= 0 && replaced.Length > Config.MaxResultLength) { replaced = Config.ResultTooLongMessage; } if (lastMessage.Type == LastMessageType.ChannelMessage) { ConnectionManager.SendChannelMessage(e.Channel, replaced); } else if (lastMessage.Type == LastMessageType.ChannelAction) { ConnectionManager.SendQueryAction(e.Channel, replaced); } foundAny = true; break; } } if (!foundAny) { Logger.LogInformation("no recent messages found to match transformations {TransformationsString}", e.Message); } return(true); }