public override ProcessResult ProcessMessage(int userid, string text) { // Обработка сообщений с обучением if (Trainers.Contains(userid)) { return(ProcessMessageFromTrainer(userid, text)); } // Обработка команды начала обучения else if (text.ToLower() == "учить") { Trainers.Add(userid); CallUsersGridUpdate(new UsersGridUpdateEventArgs("LearningNow", userid, "Yes")); vk.SendMessage(userid, "Добро пожаловать в режим обучения бота.\n" + "В данном режиме вы можете научить меня отвечать на различные сообщения.\n" + "Чтобы добавить фразы, которыми я буду отвечать на определённое сообщение, " + "пришлите мне сообщение в виде: ШАБЛОН *перенос строки* ОТВЕТ. " + "Ответов можно добавлять несколько, разделяя их так же переносом строки.\n" + "Пример:\n\nЗДРАВСТВУЙ\nПриветик\nДобрый день\nХей! Как делишки?\n\n" + "Таким образом бот будет отвечать на сообщение с текстом \"здравствуй\" одной из трёх фраз.\n" + "Так же вы можете дать ответ на одну из фраз, которую писали боту, на которую он не смог ответить сам," + "тем самым так же пополнив его базу данных. Для получения случайной фразы, на которую нужно дать ответ, напишите ОТВЕТ" + "Ближайшее время будет добавлена возможность вводить шаблоны в виде регулярных выражений.\n" + "Для выхода из режима обучения пожалуйста напишите ОТМЕНА\n\n" + "Надеюсь Вы научите меня правильно отвечать. Пожалуйста, не вставляйте различные ссылки/рекламу в ответы," + "или же сообщения не по теме. Злоупотребление данной функцией может привести к вашей блокировке. <3"); return(ProcessResult.Processed); } // Ответ на фразу, ответ на которую существует else if (CustomAnswers.ContainsKey(text.ToLower()) || CustomAnswers.ContainsKey(text.ToLower() + '?') || CustomAnswers.ContainsKey(text.ToLower().Trim(new[] { ' ', '.', '?', '!' }))) { text = text.ToLower(); var answers = CustomAnswers.ContainsKey(text) ? CustomAnswers[text] : (CustomAnswers.ContainsKey(text + '?') ? CustomAnswers[text + '?'] : CustomAnswers[text.Trim(new[] { ' ', '.', '?', '!' })]); var i = rnd.Next(answers.Count); vk.SendMessage(userid, answers[i]); return(ProcessResult.Processed); } // Добавление фразы в неотвеченные NotAnswered.Add(text); Tab.Invoke((Action)(() => Tab.listBoxNotAnswered.Items.Add(text))); return(ProcessResult.Skipped); }
private ProcessResult AddAnswer(string pattern, IEnumerable <string> answers, int userid) { pattern = pattern.ToLower(); List <string> existed = new List <string>(); if (CustomAnswers.ContainsKey(pattern)) { foreach (var ss in answers.Select(s => s.Trim()).ToArray()) { if (CustomAnswers[pattern].Select(s => s.ToLower()).Contains(ss.ToLower())) { existed.Add(ss); } else { CustomAnswers[pattern].Add(ss); } } if (existed.Count > 0) { vk.SendMessage(userid, $"К ответам на фразу \"{pattern}\" добавлено {answers.Count() - existed.Count} ответов.\nТекущее количество ответов на фразу = {CustomAnswers[pattern].Count}\n\nСледующие ответы не были добавлены, т.к. уже существуют:\n" + string.Join(", ", existed)); } else { vk.SendMessage(userid, $"Спасибо, теперь я умею отвечать на фразу \"{pattern}\"\nНа данную фразу у меня уже {CustomAnswers[pattern].Count} ответов!"); } return(ProcessResult.Processed); } else { Tab.Invoke((Action)(() => Tab.listBox1.Items.Add(pattern))); CustomAnswers[pattern] = answers.Select(s => s.Trim()).ToList(); vk.SendMessage(userid, $"Спасибо, теперь я умею отвечать на фразу \"{pattern}\""); return(ProcessResult.Processed); } }