public void GetResponseTo_Success_CorrectUrlNotEmptyMessage() { //Arrange var user = new User { SubscriptionStatus = UserType.StandardUser, State = ChatState.Standrard }; _mockVk .Setup(vk => vk.GetObjIdIdByLink(It.IsAny <Uri>())) .Returns((true, 122121, "Group name", PreferenceType.VkGroup)); var addNewAlarms = new Step2InputGroup(_mockDb.Object, _mockVk.Object); var userMessage = new Message { Chat = new Chat { Id = 123 }, Text = "https://vk.com/21jqofa" }; //Act var response = addNewAlarms.GetResponseTo(userMessage, user); //Assert Assert.That(response, Is.Not.Null); Assert.That(response.ChatId, Is.EqualTo(123)); Assert.That(response.Text, Is.EqualTo("Введите слова или фразы через запятую, какие следует искать в этой группе. Например _однушка, перекопка, торты, аквариум, аренда_.")); Assert.That(response.ReplyMarkup.GetType(), Is.EqualTo(typeof(ReplyKeyboardRemove))); Assert.That(user.State, Is.EqualTo(ChatState.NewWordToGroupAdd)); }
public void GetResponseTo_Fails_CannotGetGroupId() { //Arrange var user = new User { SubscriptionStatus = UserType.StandardUser, State = ChatState.Standrard }; _mockVk .Setup(vk => vk.GetObjIdIdByLink(It.IsAny <Uri>())) .Returns((false, 0, null, PreferenceType.WrongLink)); var addNewAlarms = new Step2InputGroup(_mockDb.Object, _mockVk.Object); var userMessage = new Message { Chat = new Chat { Id = 123 }, Text = "https://vk.com/21jqofa" }; //Act var response = addNewAlarms.GetResponseTo(userMessage, user); //Assert Assert.That(response, Is.Not.Null); Assert.That(response.ChatId, Is.EqualTo(123)); Assert.That(response.Text, Is.EqualTo("Не удалось получть id группы\nВыбери что тебе нужно сделать:")); Assert.That(response.ReplyMarkup.GetType(), Is.EqualTo(typeof(ReplyKeyboardMarkup))); Assert.That(user.State, Is.EqualTo(ChatState.Standrard)); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { var prefs = _db.Preferences.Where(pref => pref.User == user); if (user.SubscriptionStatus == UserType.StandardUser && prefs.Count() >= _settings.Vkontakte.BaseSubscriptionsLimit) { return(FailWithText(inputMessage.Chat.Id, user, $"На данный момент лимит подписок ограничивается {_settings.Vkontakte.BaseSubscriptionsLimit}" + $" группами. Для того, чтобы подписаться на новые уведомления групп, отпишитесь от старых.")); } if (user.SubscriptionStatus == UserType.ExtendedUser && prefs.Count() >= _settings.Vkontakte.ExtendedSubscriptionsLimit) { return(FailWithText(inputMessage.Chat.Id, user, $"На данный момент ваш лимит подписок ограничивается {_settings.Vkontakte.ExtendedSubscriptionsLimit}" + $" группами. Для того, чтобы подписаться на новые уведомления групп, отпишитесь от старых.")); } user.State = ChatState.NewGroupToAdd; _db.SaveChanges(); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = TgBotText.ReplyInputIdOrLink, ReplyMarkup = new ReplyKeyboardRemove() }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { if (inputMessage.Text == TgBotText.Cancel) { return(FailWithText(inputMessage.Chat.Id, user, "Ну передумал и передумал.")); } if (!inputMessage.Text.Contains("(id: ")) { return(FailWithText(inputMessage.Chat.Id, user, "Не удалось получить id группы")); } var idStr = inputMessage.Text.Split("(id: ", StringSplitOptions.RemoveEmptyEntries).Last(); idStr = idStr.Split(")", StringSplitOptions.RemoveEmptyEntries).First(); idStr = new string(idStr.Where(char.IsDigit).ToArray()); if (!long.TryParse(idStr, out long groupId)) { return(FailWithText(inputMessage.Chat.Id, user, "Не удалось получить id группы")); } user.CurrentTargetId = groupId; user.State = ChatState.NewWordToGroupAdd; _db.SaveChanges(); var currentText = _db.Preferences.Where(pref => pref.User.Id == user.Id && pref.TargetId == groupId).FirstOrDefault(); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"Текущие ключевые слова группы: _{currentText.Keyword}_. Укажите новые ключевые слова у группы:", ReplyMarkup = new ReplyKeyboardRemove() }); }
public void GetResponseTo_Success_StandardUserEmptyMessage() { //Arrange var prefs = new List <UserPreference> { new () { User = new User() }, new () { User = new User() }, new () { User = new User() }, }.AsQueryable();
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { if (string.IsNullOrEmpty(inputMessage.Text)) { return(FailWithText(inputMessage.Chat.Id, user, "Пустой текст не является ключевым словом")); } if (inputMessage.Text.Length > _settings.Vkontakte.KeywordCharacterLimit) { return(FailWithText(inputMessage.Chat.Id, user, $"Введён слишком длинный текст. Текущий лимит {_settings.Vkontakte.KeywordCharacterLimit} символов.")); } if (user.CurrentTargetId == null) { user.CurrentTargetId = null; user.CurrentTargetName = null; return(FailWithText(inputMessage.Chat.Id, user, @"Что-то пошло не так\. Попробуйте ещё раз или позже")); } var userPrefs = _db.Preferences.Where(pref => pref.User.Id == user.Id && pref.TargetId == user.CurrentTargetId).FirstOrDefault(); if (userPrefs == null) { userPrefs = new UserPreference() { User = user, TargetId = user.CurrentTargetId.Value, TargetName = user.CurrentTargetName, Keyword = inputMessage.Text, LastNotifiedPostTime = DateTime.MinValue, TargetType = user.CurrentTargetType.Value }; _db.Preferences.Add(userPrefs); } else { userPrefs.Keyword = inputMessage.Text; } user.CurrentTargetId = null; user.CurrentTargetName = null; user.CurrentTargetType = null; user.State = ChatState.Standrard; _db.SaveChanges(); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = @$ "Отлично. Слова записаны. Когда в группе *{userPrefs.TargetName}* (id:_{userPrefs.TargetId}_) появятся новые посты со следюующими словами: _{inputMessage.Text}_ Вы получите уведомление сюда", ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, Wbcl.Core.Models.Database.User user) { var sb = new StringBuilder(); foreach (var dbUser in _db.Users) { sb.AppendLine(FormatExtensions.ToShortString(dbUser)); } return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"Список пользователей: {Environment.NewLine} {sb}", ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, Wbcl.Core.Models.Database.User user) { var result = string.Empty; var commandLine = inputMessage.Text.Replace(UsedUserInput, string.Empty); var commandParams = commandLine.Split(" ", StringSplitOptions.RemoveEmptyEntries); if (commandParams.Length != 4) { return(GetDefaultResponse(inputMessage.Chat.Id, "Incorect input provided. Expected 3 parameters after command")); } if (!int.TryParse(commandParams[1], out int userID)) { return(GetDefaultResponse(inputMessage.Chat.Id, $"Incorect input provided. Cannot convert 1st parameter {commandParams[1]}")); } if (!int.TryParse(commandParams[2], out int userStatus)) { return(GetDefaultResponse(inputMessage.Chat.Id, $"Incorect input provided. Cannot convert 2nd parameter {commandParams[2]}")); } if (!DateTime.TryParse(commandParams[3], out DateTime endDate)) { return(GetDefaultResponse(inputMessage.Chat.Id, $"Incorect input provided. Cannot convert 3rd parameter {commandParams[3]}")); } var neededUser = _db.Users.FirstOrDefault(usr => usr.Id == userID); if (neededUser == null) { return(GetDefaultResponse(inputMessage.Chat.Id, $"Canot find a user with id {userID}")); } neededUser.SubscriptionStatus = (UserType)userStatus; neededUser.EndOfAdvancedSubscription = endDate; _db.SaveChanges(); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"New user info: {neededUser.ToShortString()}", ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { var currentSubscriptions = _db.Preferences.Where(pref => pref.User.Id == user.Id); var keyboard = MessageMarkupUtilities.GetReplyKeyboardForGroups(currentSubscriptions); keyboard.Add(new List <KeyboardButton> { new KeyboardButton(TgBotText.Cancel) }); user.State = ChatState.EditExistingGroup; _db.SaveChanges(); var replyMarkup = new ReplyKeyboardMarkup(keyboard, resizeKeyboard: true, oneTimeKeyboard: true); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = TgBotText.EditCurrentSubscriptionsLink, ReplyMarkup = replyMarkup }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, Wbcl.Core.Models.Database.User user) { try { //var dbFilePath = IUsersContext.GetDbFilePath(); //string dbCopyFileName = "users-copy.db"; //string currentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); //var tempFile = Path.Combine(currentPath, dbCopyFileName); //if (System.IO.File.Exists(dbCopyFileName)) //{ // System.IO.File.Delete(dbCopyFileName); //} //System.IO.File.Copy(dbFilePath, dbCopyFileName); //var file = System.IO.File.OpenRead(dbCopyFileName); //var tgFile = new InputOnlineFile(file, "users.db"); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"Функци не реализована!", // File = tgFile, ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); } catch (Exception ex) { return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"Произошла ошибка: {ex.Message}, Ошибка: {ex}", ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); } }
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { if (inputMessage.Text == TgBotText.Cancel) { return(FailWithText(inputMessage.Chat.Id, user, "Ну передумал и передумал.")); } if (!inputMessage.Text.Contains("(id: ")) { return(FailWithText(inputMessage.Chat.Id, user, "Не удалось получить id группы")); } var idStr = inputMessage.Text.Split("(id: ", StringSplitOptions.RemoveEmptyEntries).Last(); idStr = idStr.Split(")", StringSplitOptions.RemoveEmptyEntries).First(); idStr = new string(idStr.Where(char.IsDigit).ToArray()); if (!long.TryParse(idStr, out long groupId)) { return(FailWithText(inputMessage.Chat.Id, user, "Не удалось получить id группы")); } var groupsToRemove = _db.Preferences.Where(pref => pref.User.Id == user.Id && pref.TargetId == groupId); if (groupsToRemove == null || !groupsToRemove.Any()) { return(FailWithText(inputMessage.Chat.Id, user, $"Группа с указанным id:{groupId} не найдена в подписках")); } var groupName = groupsToRemove.First().TargetName; _db.Preferences.RemoveRange(groupsToRemove); user.State = ChatState.Standrard; _db.SaveChanges(); return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = $"Подписки на ключевые слова группы *{groupName}* успешно удалены", ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup() }); }
public override TelegramUserMessage GetResponseTo(Message inputMessage, User user) { if (string.IsNullOrEmpty(inputMessage.Text)) { return(FailWithText(inputMessage.Chat.Id, user, "Введено пустое слово")); } var inputText = inputMessage.Text; if (!Uri.TryCreate(inputText, UriKind.Absolute, out Uri uriResult)) { return(FailWithText(inputMessage.Chat.Id, user, "Введён некорректный URL")); } var getGroupIdResult = _vk.GetObjIdIdByLink(uriResult); if (!getGroupIdResult.Success) { return(FailWithText(inputMessage.Chat.Id, user, "Не удалось получть id группы")); } user.CurrentTargetId = getGroupIdResult.Id; user.CurrentTargetName = getGroupIdResult.Name; user.CurrentTargetType = getGroupIdResult.LinkType; user.State = ChatState.NewWordToGroupAdd; _db.SaveChanges(); var messageText = $"Введите слова или фразы через запятую, какие следует искать {_resultText[getGroupIdResult.LinkType]}. Например _однушка, перекопка, торты, аквариум, аренда_."; return(new TelegramUserMessage() { ChatId = inputMessage.Chat.Id, Text = messageText, ReplyMarkup = new ReplyKeyboardRemove() }); }
protected TelegramUserMessage FailWithText(long chatId, User user, string text) { user.State = ChatState.Standrard; _db.SaveChanges(); return(GetDefaultResponse(chatId, text)); }
public abstract TelegramUserMessage GetResponseTo(Message inputMessage, User user);