Example #1
0
 public void Init(long _userId, Vk _vkApi, UserManager _userManager)
 {
     m_vkApi         = _vkApi ?? throw new ArgumentNullException(nameof(_vkApi));
     m_userManager   = _userManager ?? throw new ArgumentNullException(nameof(_userManager));
     m_userId        = _userId;
     m_generalMarkup = KeyBoardBuilder.BuildMarkupKeyboard(new string[] { "Добавить группу", "Удалить группу" });
 }
Example #2
0
        public Response OnMessage(string _message)
        {
            try
            {
                var user = m_userManager.GetUser(m_userId.ToString());

                if (user == null)
                {
                    return(new Response("Ты еще не зарегистрирован!"));
                }

                if (_message == Command)
                {
                    return(new Response("Выбирай команду:", m_generalMarkup));
                }

                if (_message == "Добавить группу")
                {
                    var builder = new StringBuilder();

                    builder.AppendLine("Пришли мне ID группы для добавления из списка ниже");

                    m_rawGroups = m_vkApi.GetGroups(user.Token, 100);

                    foreach (var userGroup in user.Groups)
                    {
                        var existed = m_rawGroups.FirstOrDefault(_rawGroup => _rawGroup.Id == userGroup.GroupId);

                        if (existed != null)
                        {
                            m_rawGroups.Remove(existed);
                        }
                    }

                    for (int i = 0; i < m_rawGroups.Count; i++)
                    {
                        var group = m_rawGroups[i];
                        builder.AppendLine($"ID: {i}. Имя: {group.Name}");
                    }

                    m_waitingGroupNum    = true;
                    m_waitingGroupPeriod = false;
                    m_waitingGroupRemove = false;


                    return(new Response(builder.ToString()));
                }

                if (_message == "Удалить группу")
                {
                    var builder = new StringBuilder();

                    builder.AppendLine("Пришли мне ID группы для удаления из списка ниже");

                    if (user.Groups.Any())
                    {
                        for (int i = 0; i < user.Groups.Length; i++)
                        {
                            var group = user.Groups[i];
                            builder.AppendLine($"ID: {i}. Имя: {group.Name}");
                        }

                        m_waitingGroupNum    = false;
                        m_waitingGroupPeriod = false;
                        m_waitingGroupRemove = true;

                        return(new Response(builder.ToString()));
                    }

                    return(new Response("Список групп пуст!", m_generalMarkup));
                }

                if (m_waitingGroupRemove)
                {
                    m_waitingGroupRemove = false;

                    if (int.TryParse(_message, out var removeIndex) && removeIndex >= 0 && user.Groups.Length - 1 >= removeIndex)
                    {
                        m_userManager.RemoveGroupFromUser(user.Key, user.Groups[removeIndex]);

                        return(new Response("Удалено!", m_generalMarkup));
                    }

                    return(new Response("Некорректный ID", m_generalMarkup));
                }

                if (m_waitingGroupNum)
                {
                    m_waitingGroupNum = false;

                    if (int.TryParse(_message, out var groupNum) && groupNum >= 0 && m_rawGroups.Count - 1 >= groupNum)
                    {
                        m_selectedGroup = m_rawGroups[groupNum];

                        m_waitingGroupPeriod = true;

                        return(new Response("Почти все! Выбери период обновления",
                                            KeyBoardBuilder.BuildMarkupKeyboard(new string[] { "00:15:00", "00:30:00", "01:00:00", "01:30:00", "02:00:00" })));
                    }

                    return(new Response("Некорректный ID", m_generalMarkup));
                }

                if (m_waitingGroupPeriod)
                {
                    m_waitingGroupPeriod = false;

                    if (TimeSpan.TryParse(_message, out var span) &&
                        span >= TimeSpan.FromMinutes(15))
                    {
                        m_userManager.AddGroupToUser(user.Key,
                                                     new VkGrabber.Group(m_selectedGroup.Id, span, m_selectedGroup.Name));

                        return(new Response("Добавлено!", m_generalMarkup));
                    }

                    return(new Response("Некорректный период обновления!", m_generalMarkup));
                }

                return(null);
            }
            catch
            {
                WorkCompleteEventHandler?.Invoke(m_userId);

                return(new Response("Что-то пошло не так"));
            }
        }