コード例 #1
0
ファイル: SedPlugin.cs プロジェクト: detmach/SharpIrcBot
        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);
            }
        }
コード例 #2
0
ファイル: SedPlugin.cs プロジェクト: detmach/SharpIrcBot
        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);
        }