示例#1
0
        public override TelegramUserMessage GetResponseTo(Message inputMessage, Core.Models.Database.User user)
        {
            try
            {
                return(new TelegramUserMessage()
                {
                    ChatId = inputMessage.Chat.Id,
                    Text = @$ "Данный бот поможет вам следить за группами вк без лишних телодвижений.🦾" +

                           "\r\n\r\nНапример, вы занимаетесь ремонтом в Москве и ищете клиентов. Пусть бот это делает за вас! Подпишитесь на группы \"Подслушано\" вашего района, " +
                           "укажите слова \"_ремонт, сантехника, специалист, электрика_\".Как только в группах появятся новые посты с ключевыми словами," +
                           "вы уже будете об этом знать и клиент будет ваш!" +

                           "\r\n\r\nДругой сценарий - вы хотите подешевле снять хорошую однушку на севере Москвы.🏡 Но как назло все самые вкусные объявления уже сданы. Не время опускать руки! Скажите боту мониторить слова \"_однушка, однокомнатная_\" в группах недвижимости САО. И всё! Следующее объявление о сдаче нужной квартиры точно не пройдёт мимо." +

                           "\r\n\r\nВы всегда будете в курсе нужных вам групп, а бот сэкономит вам кучу времени. Это ли не счастье? ",
                    //   File = tgFile,
                    ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup()
                });
            }
            catch (Exception ex)
            {
                return(new TelegramUserMessage()
                {
                    ChatId = inputMessage.Chat.Id,
                    Text = $"Произошла ошибка: {ex.Message}, Ошибка: {ex}",
                    ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup()
                });
            }
        }
 public static OutputUserMessage GetDefaultResponse(long chatId, string additionalText = "")
 {
     return(new OutputUserMessage()
     {
         ChatId = chatId,
         Text = $"{additionalText}\nВыбери что тебе нужно сделать:",
         ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup()
     });
 }
示例#3
0
        public void GetReplyKeyboardForGroups_Success_Empty()
        {
            //Arrange
            var preferences = new List <UserPreference>();

            //Act
            var resultKeyboard = MessageMarkupUtilities.GetReplyKeyboardForGroups(preferences);

            //Assert
            Assert.That(resultKeyboard, Is.Empty);
        }
示例#4
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()
            });
        }
示例#5
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()
            });
        }
示例#6
0
        public override OutputUserMessage GetResponseTo(Message inputMessage, User user)
        {
            if (string.IsNullOrEmpty(inputMessage.Text))
            {
                return(GetDefaultResponse(inputMessage.Chat.Id, "Пустой текст не является ключевым словом"));
            }

            if (user.CurrentGroupId == null)
            {
                user.CurrentGroupId   = null;
                user.CurrentGroupName = null;
                user.State            = ChatState.Standrard;
                _db.SaveChanges();
                return(GetDefaultResponse(inputMessage.Chat.Id, @"Что-то пошло не так\. Попробуйте ещё раз"));
            }

            var userPrefs = _db.Preferences.Where(pref => pref.User.Id == user.Id && pref.GroupId == user.CurrentGroupId).FirstOrDefault();

            if (userPrefs == null)
            {
                userPrefs = new UserPreference()
                {
                    User      = user,
                    GroupId   = user.CurrentGroupId.Value,
                    GroupName = user.CurrentGroupName,
                    Keyword   = inputMessage.Text
                };
                _db.Preferences.Add(userPrefs);
            }
            else
            {
                userPrefs.Keyword = inputMessage.Text;
            }

            user.CurrentGroupId   = null;
            user.CurrentGroupName = null;
            user.State            = ChatState.Standrard;
            _db.SaveChanges();

            return(new OutputUserMessage()
            {
                ChatId = inputMessage.Chat.Id,
                Text = @$ "Отлично. Слова записаны. Когда в группе *{userPrefs.GroupName}* (id:_{userPrefs.GroupId}_) появятся новые посты со следюующими словами: _{inputMessage.Text}_ Вы получите уведомление сюда",
                ReplyMarkup = MessageMarkupUtilities.GetDefaultMarkup()
            });
        }
示例#7
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()
            });
        }
示例#8
0
        public void GetReplyKeyboardForGroups_Success_NotEmpty()
        {
            //Arrange
            var preferences = new List <UserPreference>()
            {
                new() { TargetId = 111, TargetName = "First group" },
                new() { TargetId = 222, TargetName = "Вторая группа" },
            };

            //Act
            var resultKeyboard = MessageMarkupUtilities.GetReplyKeyboardForGroups(preferences);

            //Assert
            Assert.That(resultKeyboard, Is.Not.Empty);
            Assert.That(resultKeyboard.Count, Is.EqualTo(2));
            Assert.That(resultKeyboard[0][0].Text, Is.EqualTo("First group (id: 111)"));
            Assert.That(resultKeyboard[1][0].Text, Is.EqualTo("Вторая группа (id: 222)"));
        }
示例#9
0
        public override OutputUserMessage 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 OutputUserMessage()
            {
                ChatId = inputMessage.Chat.Id,
                Text = TgBotText.EditCurrentSubscriptionsLink,
                ReplyMarkup = replyMarkup
            });
        }
示例#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()
                });
            }
        }
示例#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()
            });
        }