protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            using var db = new DatabaseContext();
            var uid = db.Admins.FirstOrDefault(x => x.UserId == request.FromId &&
                                               x.GroupId == state.User.GroupId);

            if (uid != null)
            {
                db.Admins.Remove(uid);
            }
            state.User.GroupId       = null;
            state.User.Group         = null;
            state.User.IsSignedGroup = false;

            db.Users.Update(state.User);

            db.SaveChanges();

            state.Step = Step.None;
            return(new ApiResponse
            {
                Text = "Все выполнено",
                UserId = request.PeerId
            });
        }
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            using var db = new DatabaseContext();
            var CurrentGroup = db.Groups.Where(x => x.Name == request.Text).FirstOrDefault();

            if (CurrentGroup == null)
            {
                return(new ApiResponse
                {
                    Text = "Такой группы не существует\n" +
                           "Повторите попытку...\n\n" +
                           "Для отмены напишите команду \"Отмена\"",
                    UserId = request.PeerId
                });
            }
            state.User.Group         = CurrentGroup;
            state.User.IsSignedGroup = true;
            db.Update(state.User);
            db.SaveChanges();
            state.Step = Step.None;
            return(new ApiResponse
            {
                Text = $"Вы вступили в группу \"{request.Text}\"",
                UserId = request.PeerId
            });
        }
Beispiel #3
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            if (!state.User.IsSignedGroup)
            {
                return(new ApiResponse
                {
                    Text = "Вы не состоите в группе",
                    UserId = request.PeerId
                });
            }

            if (!state.User.Group.Admins.Any(x => x.UserId == request.FromId))
            {
                return(new ApiResponse
                {
                    Text = "Вы не можете пользоваться этой командой",
                    UserId = request.PeerId
                });
            }



            state.Step = Step.AwaitAddNewAdmin;
            return(new ApiResponse
            {
                Text = "Уважаемый пользователь, чтоб добавить нового администратора группы, необходимо его существование в вашей группе.\n" +
                       "Итак, введите ID пользователя или напишите команду \"Список группы\" чтобы узнать кто подключен к вашей группе",
                UserId = request.PeerId,
                KeyBoard = GenerateKeyBoard(Keyboards.ListGroup)
            });
        }
Beispiel #4
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            if (state.User.IsSignedGroup == false)
            {
                return(new ApiResponse
                {
                    Text = $"Вы не состоите ни в какой группе\n" +
                           $"Для того, чтобы вступить введите \"Вступить в группу\"",
                    UserId = request.PeerId,
                });
            }

            if (state.User.Group.Admins.Any(x => x.UserId == request.FromId) && state.User.Group.Admins.Count == 1)
            {
                return(new ApiResponse
                {
                    Text = $"Вы единственный администратор группы, прежде чем выйти с беседы, добавьте другого администратора",
                    UserId = request.PeerId,
                });
            }

            state.Step = Step.AwaitLeaveGroup;
            return(new ApiResponse
            {
                Text = "Вы точно хотите выйти с группы?\n\n" +
                       "Ответьте \"Да\" или \"Нет\"",
                UserId = request.PeerId
            });
        }
Beispiel #5
0
        internal ApiResponse HandleRequest(SimleApiRequest apiRequest)
        {
            ApiResponse response = null;

            if (!Modifiers.Any(modifier => modifier.Run(apiRequest, _state, out response)))
            {
                throw new NotSupportedException("No default modifier");
            }
            return(response);
        }
Beispiel #6
0
 protected override ApiResponse Respont(SimleApiRequest request, State state)
 {
     return(new ApiResponse
     {
         Text = "Список команд:\n" +
                "1. \"Вступить в группу\"\n" +
                "2. \"Создать группу\"",
         UserId = request.PeerId,
         KeyBoard = GenerateKeyBoard(Keyboards.HelpKeyboard)
     });
 }
Beispiel #7
0
 protected override ApiResponse Respont(SimleApiRequest request, State state)
 {
     return(new ApiResponse
     {
         Text = "Я вас не понимаю.\nПожалуйста посмотрите список команд\n\n" +
                "Вы можете посмотреть список команд\n" +
                "Напишите команду \"помощь\"",
         UserId = request.PeerId,
         KeyBoard = GenerateKeyBoard(Keyboards.HelpKeyboard)
     });
 }
Beispiel #8
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            state.Step = Step.None;

            return(new ApiResponse
            {
                Text = "Вы отменили свой запрос",
                UserId = request.PeerId,
                KeyBoard = GenerateKeyBoard(Keyboards.HelpKeyboard)
            });
        }
Beispiel #9
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            long value = 0;
            var  ch    = long.TryParse(request.Text, out value);

            if (ch && value != 0)
            {
                using var db = new DatabaseContext();
                var checkuser = db.Users.Where(x => x.Id == value).Select(x => x.Group.Name == state.User.Group.Name).FirstOrDefault();

                if (!checkuser)
                {
                    return(new ApiResponse
                    {
                        Text = "Вы не можете добавить этого пользователя, так как он не состоит в группе",
                        UserId = request.PeerId,
                        KeyBoard = GenerateKeyBoard(Keyboards.ListGroup)
                    });
                }

                if (db.Admins.Any(x => x.UserId == value))
                {
                    return(new ApiResponse
                    {
                        Text = "Такой пользователь уже есть в админах",
                        UserId = request.PeerId,
                    });
                }

                state.User.Group.Admins.Add(new Admin
                {
                    UserId = value
                });

                db.Update(state.User);
                db.SaveChanges();

                state.Step = Step.None;
                return(new ApiResponse
                {
                    Text = "Пользователь успешно добавлен в администраторы",
                    UserId = request.PeerId,
                    KeyBoard = GenerateKeyBoard(Keyboards.HelpKeyboard)
                });
            }

            return(new ApiResponse
            {
                Text = "Я не могу распознать ID\n\n" +
                       "Повторите попытку",
                UserId = request.PeerId
            });
        }
Beispiel #10
0
        private void NewMessage(ApiRequest apiRequest)
        {
            var simpleApiRequest = new SimleApiRequest
            {
                Text   = apiRequest.Object.Message.Text,
                FromId = apiRequest.Object.Message.FromId,
                PeerId = apiRequest.Object.Message.PeerId,
            };

            var userId = simpleApiRequest.FromId;

            var session = Sessions.GetOrAdd(userId, uid => new UserSession(uid));

            var apiResponse = session.HandleRequest(simpleApiRequest);

            SendMessage(apiResponse);
        }
Beispiel #11
0
        public bool Run(SimleApiRequest request, State state, out ApiResponse response)
        {
            if (!Check(request, state))
            {
                response = null;
                return(false);
            }
            var simple = Respont(request, state);

            response = new ApiResponse
            {
                Text     = simple.Text,
                UserId   = simple.UserId,
                KeyBoard = simple?.KeyBoard
            };
            return(true);
        }
Beispiel #12
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            using var db = new DatabaseContext();
            var usersId = db.Users.Where(x => x.Group == state.User.Group).ToList();

            Task <string> result      = GetUserInfo(usersId);
            var           finalResult = result.Result;

            state.Step = Step.AwaitAddNewAdmin;

            return(new ApiResponse
            {
                Text = finalResult + "\n\n" +
                       "Введите Id пользователя",
                UserId = request.PeerId
            });
        }
Beispiel #13
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            if (state.User.IsSignedGroup == true)
            {
                return(new ApiResponse
                {
                    Text = $"Вы уже состоите в группе \"{state.User.Group.Name}\"",
                    UserId = request.PeerId,
                });
            }

            state.Step = Step.AwaitJoinGroup;
            return(new ApiResponse
            {
                Text = "Введите название группы",
                UserId = request.PeerId
            });
        }
Beispiel #14
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            if (state.User.IsSignedGroup)
            {
                return(new ApiResponse
                {
                    Text = $"Вы уже состоите в группе \"{state.User.Group.Name}\"\n" +
                           $"Для этого удалите выйдите с существующей группы",
                    UserId = request.PeerId
                });
            }

            state.Step = Step.CreateNewGroup;
            return(new ApiResponse
            {
                Text = "Введите название группы",
                UserId = request.PeerId
            });
        }
Beispiel #15
0
        protected override ApiResponse Respont(SimleApiRequest request, State state)
        {
            using var db = new DatabaseContext();

            if (!db.Groups.Any(u => u.Name == request.Text))
            {
                var admin = new Admin {
                    UserId = request.FromId
                };
                var group = new Group
                {
                    Admins = new List <Admin> {
                        admin
                    },
                    Name = request.Text,
                };

                db.Groups.Add(group);
                db.SaveChanges();

                state.User.Group         = group;
                state.User.IsSignedGroup = true;
                db.Update(state.User);
                db.SaveChanges();

                state.Step = Step.None;
                return(new ApiResponse
                {
                    Text = $"Группа \"{request.Text}\" успешно создана",
                    UserId = request.PeerId
                });
            }

            return(new ApiResponse
            {
                Text = $"Группа \"{request.Text}\" уже существует\n" +
                       "Введите другое название группы",
                UserId = request.PeerId
            });
        }
Beispiel #16
0
 protected abstract bool Check(SimleApiRequest request, State state);
Beispiel #17
0
 private bool CheckTokens(SimleApiRequest request)
 {
     return(CheckTokens(request.Text.Split(" "), Keywords.ToArray()));
 }
Beispiel #18
0
 protected override bool Check(SimleApiRequest request, State state)
 {
     return(state.Step == Step.CreateNewGroup);
 }
 protected override bool Check(SimleApiRequest request, State state)
 {
     return(state.Step == Step.AwaitJoinGroup);
 }
Beispiel #20
0
 protected override bool Check(SimleApiRequest request, State state)
 {
     return(state.Step == Step.AwaitAddNewAdmin);
 }
Beispiel #21
0
 protected override bool Check(SimleApiRequest request, State state)
 {
     return(CheckState(state) && CheckTokens(request));
 }
Beispiel #22
0
 protected abstract ApiResponse Respont(SimleApiRequest request, State state);
Beispiel #23
0
 protected override bool Check(SimleApiRequest request, State state)
 {
     return(true);
 }