Esempio n. 1
0
        public List <string> OnChannelMessage(IrcBot ircBot, string server, string channel, IrcMessage m)
        {
            var key          = server + channel;
            var message      = m.Text;
            var botName      = ircBot.Nickname;
            var botNameMatch = string.Format("^{0}[:,;]", botName);

            if (!_brains.ContainsKey(key))
            {
                _brains.Add(key, new Chain(_settings.WindowSize));
            }
            var brain = _brains[key];

            if (Regex.IsMatch(message, botNameMatch))
            {
                var regex = new Regex(botNameMatch);

                message = regex.Replace(message, "");

                var response = TextSanitizer.FixInputEnds(brain.GenerateSentenceFromSentence(message));

                if (!string.IsNullOrWhiteSpace(response))
                {
                    return(new List <string> {
                        response
                    });
                }

                response = RandomResponse.Reponse(m.Sender);
                return(new List <string> {
                    response
                });
            }

            if (message.Split(' ').Length > _settings.WindowSize)
            {
                message = TextSanitizer.SanitizeInput(message);
                brain.Learn(message);

                SaveLine(key, message);
            }


            return(null);
        }
        public async Task Message(string message, SocketMessage m)
        {
            if (_brain == null)
            {
                return;
            }
            var brain = _brain;

            bool mentioned = false;

            foreach (var user in m.MentionedUsers)
            {
                if (user.Id == DiscordClient.CurrentUser.Id)
                {
                    mentioned = true;
                }
            }

            if (mentioned)
            {
                TextSanitizer.FixMiscelanious(message = Regex.Replace(message, "<.+>", ""));
                var response = TextSanitizer.FixInputEnds(brain.GenerateSentenceFromSentence(message));

                if (!string.IsNullOrWhiteSpace(response))
                {
                    await m.Channel.SendMessageAsync(response);

                    return;
                }

                response = RandomResponse.Reponse(m.Author.Username);
                await m.Channel.SendMessageAsync(response);

                return;
            }

            if (message[0] != ClientConfig.CommandSymbol && message.Split(' ').Length > _settings.WindowSize)
            {
                message = TextSanitizer.SanitizeInput(message);
                brain.Learn(message);

                SaveLine(message);
            }
        }
        private void LoadBrain()
        {
            using (var stream = new FileStream(BrainPath, FileMode.Open))
                using (var reader = new StreamReader(stream))
                {
                    var    brain = new Chain(_settings.WindowSize);
                    string line;

                    var i = 0;

                    while ((line = reader.ReadLine()) != null)
                    {
                        brain.Learn(TextSanitizer.SanitizeInput(line));
                        i++;
                    }

                    _brain = brain;
                    Log.Information("Patternspider - Sentience: Loaded Brain, Parsed {i} Lines", i);
                }
        }
Esempio n. 4
0
        private void LoadBrains()
        {
            var brainFiles = Directory.EnumerateFiles(BrainPath, "*.brain");

            foreach (var brainfile in brainFiles)
            {
                var    sr    = new StreamReader(brainfile);
                var    brain = new Chain(_settings.WindowSize);
                string line;

                var key = brainfile.Replace(".brain", "");
                key = key.Replace(BrainPath, "");

                while ((line = sr.ReadLine()) != null)
                {
                    brain.Learn(TextSanitizer.SanitizeInput(line));
                }

                _brains.Add(key, brain);
                sr.Close();
                Console.WriteLine("Sentience: Loaded {0}", key);
            }
        }