Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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()
            });
        }
Beispiel #4
0
        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()
            });
        }
Beispiel #5
0
 public void GetResponseTo_Success_StandardUserEmptyMessage()
 {
     //Arrange
     var prefs = new List <UserPreference>
     {
         new () { User = new User() },
         new () { User = new User() },
         new () { User = new User() },
     }.AsQueryable();
Beispiel #6
0
        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()
            });
        }
Beispiel #7
0
        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()
            });
        }
Beispiel #8
0
        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()
            });
        }
Beispiel #9
0
        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
            });
        }
Beispiel #10
0
        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()
                });
            }
        }
Beispiel #11
0
        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()
            });
        }
Beispiel #12
0
        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()
            });
        }
Beispiel #13
0
 protected TelegramUserMessage FailWithText(long chatId, User user, string text)
 {
     user.State = ChatState.Standrard;
     _db.SaveChanges();
     return(GetDefaultResponse(chatId, text));
 }
Beispiel #14
0
 public abstract TelegramUserMessage GetResponseTo(Message inputMessage, User user);