Ejemplo n.º 1
0
        public async Task SendMessage_ExistConversation()
        {
            //Arrange
            var input = new SendMessageInput()
            {
                Message          = "message",
                ReceiverUserName = "******"
            };
            var existsConversation = new ConversationModel()
            {
                Id = new ObjectId()
            };

            _mockRepository.Get(Arg.Any <Expression <Func <ConversationModel, bool> > >())
            .ReturnsForAnyArgs(existsConversation);

            //Act
            await _messageService.SendMessage(input);

            //Assert
            await _mockRepository.Received().Update(Arg.Is(existsConversation.Id.ToString()),
                                                    Arg.Is <ConversationModel>(x =>
                                                                               x.Messages.Any(m => m.MessageText == input.Message &&
                                                                                              m.ReceiverUserName == input.ReceiverUserName &&
                                                                                              m.SenderUserName == _loggedUser.UserName)));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <MessageDto> > SendMessage([FromBody] SendMessageInput parameters)
        {
            var validationTasks = new List <Task <bool> >
            {
                IsContactValid(parameters.SenderId),
                IsContactValid(parameters.RecipientId),
            };

            await Task.WhenAll(validationTasks);

            if (validationTasks.Any(t => !t.Result))
            {
                return(BadRequest());
            }

            try
            {
                var message =
                    await _messageService.SendMessage(parameters.SenderId, parameters.RecipientId, parameters.Text);

                await _context.SaveChangesAsync();

                var messageDto = _mapper.Map <Message, MessageDto>(message);
                return(CreatedAtAction("GetMessage", new { id = messageDto.Id }, messageDto));
            }
            catch (DbUpdateException)
            {
                return(BadRequest());
            }
        }
Ejemplo n.º 3
0
        public async Task SendMessage(SendMessageInput input)
        {
            if (!input.From.HasValue || !input.To.HasValue)
            {
                throw new UserFriendlyException(L("NoUserDetected"));
            }

            var from = await UserManager.GetUserByIdAsync(input.From.Value);

            var to = await UserManager.GetUserByIdAsync(input.To.Value);

            var id = await _chatManager.CreateConversation(from, to, AbpSession.TenantId);

            var conversation = _chatManager.Conversations.FirstOrDefault(a => a.Id == id);

            var msId = await _chatManager.AddMessage(conversation, from, input.Message);

            if (msId != 0)
            {
                await _chatMessageSender.PublishMessage(
                    new ChatData(from.MapTo <UserOutput>(),
                                 to.MapTo <UserOutput>(),
                                 id,
                                 input.Message));
            }
        }
Ejemplo n.º 4
0
        public IRestResponse <SendMessageResponse> SendMessage(SendMessageInput input)
        {
            try
            {
                LogInput(input);

                var req = new RestRequest("sendMessage", Method.POST);
                req.AddParameter("chat_id", input.ChatId);
                req.AddParameter("type", input.MessageType);
                req.AddParameter("data", input.Data);
                req.AddParameter("reply_keyboard", input.ReplyKeyboard);
                req.AddParameter("inline_keyboard", input.InlineKeyboard);
                req.AddParameter("form", input.Form);

                var response = RestApi.Execute <SendMessageResponse>(req);

                LogOutput(response, new
                {
                    hasData = response.Data != null,
                    method  = "SendMessage",
                    input.ChatId
                });

                return(response);
            }
            catch (Exception ex)
            {
                Logger.Log("SendMessage", LogErrorLevel.Error, ex);
                return(null);
            }
        }
Ejemplo n.º 5
0
        private async Task <(SendMessageInput model, bool toast)> InvalidCommand(SendMessageInput model, long stateId, string text = null)
        {
            var info = await _userInfoService.GetUserInfo(model.ChatId);

            model.Keypad = await _keypadService.GenerateButtonsAsync(stateId, info);

            model.Text = text ?? Messages.InvalidCommand;
            return(model, true);
        }
Ejemplo n.º 6
0
        public ApiResult SendRaw([FromBody] SendMessageInput messageInput)
        {
            if (!this.IsFormValid())
            {
                return(ApiResult.Failure(this.FormInvalidReason()));
            }
            var result = Resolve <ISmsService>().SendRaw(messageInput.Mobile, messageInput.Content, AutoModel.UserId);

            return(ToResult(result));
        }
Ejemplo n.º 7
0
        public async Task <IResponseOutput> SendMessageAsync(SendMessageInput input)
        {
            var content = new StringContent($"text={input.Text}&desp={input.Desc}");

            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");

            using var client = _httpClient.CreateClient();
            await client.PostAsync($"{_ftqqOptions.ApiUrl}/{_ftqqOptions.Token}.send", content);

            return(ResponseOutput.Ok(content));
        }
Ejemplo n.º 8
0
        public void SendMessage_EmptyReceiverUserName_ThrowError()
        {
            //Arrange
            var input = new SendMessageInput()
            {
                Message          = "b",
                ReceiverUserName = string.Empty
            };

            //Act && Assert
            _messageService.SendMessage(input).ShouldThrow <ArgumentNullException>();
        }
Ejemplo n.º 9
0
        public async Task <SendMessagesOutput> SendMessage(SendMessageInput model)
        {
            try
            {
                return(await _apiService.PostAsync <SendMessagesOutput>(Variables.BotApi, new { method = "sendMessage", data = model }, _botHeader));
            }
            catch (Exception e)
            {
                await _exceptionLogService.LogException(e, model.ChatId, "SendMessage");

                return(null);
            }
        }
Ejemplo n.º 10
0
        public async Task SendMessage_Fail_WrongSender()
        {
            var message = new SendMessageInput()
            {
                SenderId    = Guid.Empty,
                RecipientId = DestinatairePredefinedIds.ContactIds.AndrejStajerId,
                Text        = "Lorem ipsum",
            };
            var response = await Client.PostAsync("/Messages",
                                                  new StringContent(JsonConvert.SerializeObject(message), Encoding.UTF8, "application/json"));

            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
Ejemplo n.º 11
0
        public async Task <BlogResponse> SendMessageAsync(SendMessageInput input)
        {
            var response = new BlogResponse();

            var content = new StringContent($"text={input.Text}&desp={input.Desc}");

            content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

            using var client = _httpClient.CreateClient();
            await client.PostAsync("https://sc.ftqq.com/SCU60393T5a94df1d5a9274125293f34a6acf928f5d78f551cf6d6.send", content);

            return(response);
        }
Ejemplo n.º 12
0
        public async Task <BlogResponse> SendMessageAsync(SendMessageInput input)
        {
            var response = new BlogResponse();

            var content = new StringContent($"text={input.Text}&desp={input.Desc}");

            content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

            using var client = _httpClient.CreateClient();
            await client.PostAsync($"https://sc.ftqq.com/{_appOptions.ScKey}.send", content);

            return(response);
        }
        public async Task <IActionResult> Post(SendMessageInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            _logger.LogInformation("Mesaj gonderilecek");
            await _messageService.SendMessage(input);

            _logger.LogInformation("Mesaj Gonderdildi.");

            return(Ok());
        }
Ejemplo n.º 14
0
        public async Task <int> CreateConversation(SendMessageInput input)
        {
            if (!input.From.HasValue || !input.To.HasValue)
            {
                throw new UserFriendlyException(L("NoUserDetected"));
            }
            var from = await UserManager.GetUserByIdAsync(input.From.Value);

            var to = await UserManager.GetUserByIdAsync(input.To.Value);

            var id = await _chatManager.CreateConversation(from, to, AbpSession.TenantId);

            return(id);
        }
Ejemplo n.º 15
0
 public async Task SendMessage([FromForm] SendMessageInput input)
 {
     await _signalrHelper.PushNotifyAsync(new Dtos.Send()
     {
         GroupIds  = input.SelectGroups,
         UserIds   = input.SelectUsers,
         NotifyObj = new
         {
             TenantType = "chat",
             MethodType = "message",
             Message    = $"{User.Identity.Name}:{input.Message}"
         }
     });
 }
Ejemplo n.º 16
0
        public void Add(SendMessageInput input)
        {
            var chatRecord = new ChatRecord
            {
                Id       = input.Id,
                Body     = input.Body,
                Sender   = input.Sender,
                Receiver = input.Receiver,
                SendOn   = input.SendOn,
                Type     = input.Type
            };

            _chatRecordRepository.Insert(chatRecord);
        }
Ejemplo n.º 17
0
        public async Task <BlogResponse> SendMessageAsync(SendMessageInput input)
        {
            var response = new BlogResponse();

            var content = new StringContent($"text={input.Text}&desp={input.Desc}");

            content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

            using var client = _httpClient.CreateClient();
            _logger.LogInformation($"FtqqUrl: {_notificationOptions.FtqqUrl}");
            await client.PostAsync(_notificationOptions.FtqqUrl, content);

            return(response);
        }
Ejemplo n.º 18
0
        public void SendMessage_blockedUser_ThrowError()
        {
            //Arrange
            var input = new SendMessageInput()
            {
                Message          = "abc",
                ReceiverUserName = "******"
            };

            _mockUserService.IsUserBlocked(Arg.Any <string>()).ReturnsForAnyArgs(true);


            //Act && Assert
            _messageService.SendMessage(input).ShouldThrow <UserFriendlyException>();
        }
Ejemplo n.º 19
0
        public async Task <CommandResult <SendMessageResult> > Save([FromServices] SendMessageCommand sendMessageCommand,
                                                                    [FromBody] SendMessageInput input)
        {
            var userInput = new UserInput <SendMessageInput>
            {
                UserId = User.Identity.IsAuthenticated ? User.GetUserId() : string.Empty,
                Data   = input
            };

            var result = await
                         Business.InvokeAsync <SendMessageCommand, UserInput <SendMessageInput>, CommandResult <SendMessageResult> >(
                sendMessageCommand, userInput);

            return(result);
        }
        public async Task SendMessage(SendMessageInput input)
        {
            if (input.Message.IsNullOrEmpty() || input.ReceiverUserName.IsNullOrEmpty())
            {
                var propertyNme = input.Message.IsNullOrEmpty()
                    ? nameof(input.Message)
                    : nameof(input.ReceiverUserName);
                throw new ArgumentNullException(propertyNme);
            }

            var user = _userService.GetCurrentUser();

            var isUserBlocked = await _userService.IsUserBlocked(input.ReceiverUserName);

            if (isUserBlocked)
            {
                var errorMessage = $"You can't send messaje to {input.ReceiverUserName}. You are blocked";
                throw new UserFriendlyException(errorMessage);
            }

            var messageModel = new MessageModel
            {
                ReceiverUserName = input.ReceiverUserName,
                MessageText      = input.Message,
                SenderUserName   = user.UserName
            };
            var conversation = await GetConversation(user.UserName, input.ReceiverUserName);

            if (conversation == null)
            {
                conversation = new ConversationModel();
                conversation.Messages.Add(messageModel);
                conversation.Users.Add(input.ReceiverUserName);
                conversation.Users.Add(user.UserName);
                conversation.LastMessageDateTime = messageModel.CreateAt;
                await _conversationRepository.Create(conversation);
            }
            else
            {
                conversation.Messages.Add(messageModel);
                conversation.LastMessageDateTime = messageModel.CreateAt;
                await _conversationRepository.Update(conversation.Id.ToString(), conversation);
            }
        }
Ejemplo n.º 21
0
        public async Task <IActionResult> SendMsg(SendMessageInput input)
        {
            try
            {
                var message = new CatMessage
                {
                    Type = input.Type,
                    Chat = new IM.Google.Protobuf.Chat
                    {
                        Info = new Base
                        {
                            Id       = input.Id.ToString(),
                            Sender   = input.Sender.ToString(),
                            Receiver = input.Receiver.ToString(),
                            SendOn   = input.SendOn.ToString(),
                        },
                        Body = input.Body
                    }
                };

                var routeKey = await _cacheManager.GetStringAsync($"{CacheKeys.ROUTER}{input.Receiver}");

                if (string.IsNullOrWhiteSpace(routeKey))
                {
                    _rabbitManager.SendMsg("Cat.IM.OfflineMessage", message, "Cat.IM.OfflineMessage");
                }
                else
                {
                    _rabbitManager.SendMsg(routeKey, message);
                }


                _chatRecordService.Add(input);
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }

            return(Ok());
        }
Ejemplo n.º 22
0
        public async Task SendMessage_NewConversation()
        {
            //Arrange
            var input = new SendMessageInput()
            {
                Message          = "message",
                ReceiverUserName = "******"
            };

            _mockRepository.Get(Arg.Any <Expression <Func <ConversationModel, bool> > >())
            .ReturnsForAnyArgs((ConversationModel)null);

            //Act
            await _messageService.SendMessage(input);

            //Assert
            await _mockRepository.Received().Create(Arg.Is <ConversationModel>(x =>
                                                                               x.Messages.Any(m => m.MessageText == input.Message &&
                                                                                              m.ReceiverUserName == input.ReceiverUserName &&
                                                                                              m.SenderUserName == _loggedUser.UserName)));
        }
Ejemplo n.º 23
0
        public async Task <SendMessagePayload> SendMessage(
            SendMessageInput input,
            [Service] IMessageDb messageDb,
            [Service] ITopicEventSender eventSender
            )
        {
            var(authorId, groupId, authorName, content) = input;
            var message = new ChatMessage(
                MessageId: Guid.NewGuid(),
                Timestamp: DateTimeOffset.UtcNow,
                GroupId: groupId,
                AuthorId: authorId,
                AuthorUsername: authorName,
                Content: content
                );
            await eventSender.SendAsync(new Topic.NewMessage(groupId), message);

            await messageDb.AddMessage(message);

            return(new SendMessagePayload(message));
        }
Ejemplo n.º 24
0
        public async Task SendMessage(SendMessageInput input)
        {
            var message = await _chatMessageRepository.InsertAsync(new ChatMessage
            {
                SessionId    = input.SessionId,
                UserId       = input.UserId,
                SenderName   = input.SenderName,
                Message      = input.Message,
                CreationTime = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
                ReadState    = ChatMessageReadState.Unread
            });

            await CurrentUnitOfWork.SaveChangesAsync();

            // 推送消息给接收人
            var receivers = await GetSessionMembersUserId(input.SessionId);

            foreach (var item in receivers)
            {
                await _chatCommunicator.SendMessageToUser(new UserIdentifier(AbpSession.TenantId, item), message);
            }
        }
Ejemplo n.º 25
0
        public async Task SendMessage()
        {
            var message = new SendMessageInput()
            {
                SenderId    = DestinatairePredefinedIds.ContactIds.AndrejStajerId,
                RecipientId = DestinatairePredefinedIds.ContactIds.CaptainId,
                Text        = "Lorem ipsum",
            };

            var json     = JsonConvert.SerializeObject(message);
            var response =
                await Client.PostAsync("/Messages", new StringContent(json, Encoding.UTF8, "application/json"));

            response.EnsureSuccessStatusCode();

            var stringResponse = await response.Content.ReadAsStringAsync();

            var model = JsonConvert.DeserializeObject <MessageDto>(stringResponse);

            Assert.Equal(message.RecipientId, model.ReceiverId);
            Assert.Equal(message.SenderId, model.SenderId);
            Assert.Equal(message.Text, model.Text);
        }
Ejemplo n.º 26
0
        private async Task <(SendMessageInput model, bool toast)> Command(MessageModel myMessage)
        {
            var buttonId       = myMessage.AuxData == null ? "" : myMessage.AuxData.ButtonId;
            var chatId         = myMessage.ChatId;
            var messageText    = myMessage.Text;
            var userDataEntity = await _userDataService.GetUserData(chatId);

            var model = new SendMessageInput
            {
                Keypad = new KeypadModel
                {
                    Rows = new List <KeypadRowModel>()
                },
                ReplyTimeout = Variables.ReplyTimeout,
                ChatId       = chatId
            };

            //start
            if (userDataEntity == null)
            {
                await _userDataService.Update(chatId, 1);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, new GroupEntity());

                model.Text = Messages.WelcomeMessage;
                return(model, false);
            }

            if (string.IsNullOrEmpty(buttonId))
            {
                var info = await _groupService.GetGroupInfo(chatId);

                if (info.IsFinished)
                {
                    model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 6, info);

                    model.Text = null;
                    return(model, true);
                }

                return(await InvalidCommand(model, userDataEntity.StateId));
            }

            if (buttonId == "centerName")
            {
                var info = await _groupService.SetCenterName(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "centerType")
            {
                var centerType = messageText.GetCenterTypeEnumByValue();
                var info       = await _groupService.SetCenterType(chatId, centerType.Value);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "gender")
            {
                var gender = messageText.GetGenderEnumByValue();
                var info   = await _groupService.SetGenderType(chatId, gender.Value);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "province")
            {
                var province = await _provinceService.GetProvinceAsync(messageText);

                var info = await _groupService.SetProvince(chatId, province);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "address")
            {
                var info = await _groupService.SetAddress(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "postalCode")
            {
                GroupEntity info;
                if (messageText.IsValidPostalCode())
                {
                    info = await _groupService.SetPostalCode(chatId, messageText.PersianToEnglish());
                }
                else
                {
                    info = await _groupService.GetGroupInfo(model.ChatId);

                    model.Text = Messages.InvalidPostalCode;
                }
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                return(model, true);
            }

            if (buttonId == "phone")
            {
                var info = await _groupService.SetPhone(chatId, messageText.PersianToEnglish());

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "managerName")
            {
                var info = await _groupService.SetManagerName(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "1-continue")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 2, info);

                model.Text = "اطلاعات مرکز آموزشی ثبت شد.";
                return(model, true);
            }

            if (buttonId == "supervisorName")
            {
                var info = await _groupService.SetSupervisorName(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 2, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "supervisorEmail")
            {
                GroupEntity info;

                if (messageText.IsValidEmail())
                {
                    info = await _groupService.SetSupervisorEmail(chatId, messageText);

                    model.Text = null;
                }
                else
                {
                    info = await _groupService.GetGroupInfo(chatId);

                    model.Text = Messages.InvalidEmail;
                }
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 2, info);

                return(model, true);
            }

            if (buttonId == "supervisorMobile")
            {
                GroupEntity info;
                if (messageText.IsValidMobile())
                {
                    info = await _groupService.SetSupervisorMobile(chatId, messageText);

                    model.Text = null;
                }
                else
                {
                    info = await _groupService.GetGroupInfo(chatId);

                    model.Text = Messages.InvalidMobileNumber;
                }
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 2, info);

                return(model, true);
            }

            if (buttonId == "2-continue")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text   = "اطلاعات دبیر راهنما ثبت شد.";
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                return(model, true);
            }

            if (buttonId == "2-return")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text   = null;
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 1, info);

                return(model, true);
            }

            if (buttonId == "subject")
            {
                var info = await _groupService.SetProjectSubject(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "ax")
            {
                var ax = await _festivalService.GetFestivalAxes(messageText);

                var info = await _groupService.SetFestivalAxes(chatId, ax);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "major")
            {
                var major = await _festivalService.GetFestivalMajor(messageText);

                var info = await _groupService.SetFestivalMajor(chatId, major);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "field")
            {
                var field = await _festivalService.GetFestivalField(messageText);

                var info = await _groupService.SetFestivalField(chatId, field);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "membersCount")
            {
                var info = await _groupService.SetMembersCount(chatId, Int32.Parse(messageText));

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId == "3-continue")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text = "اطلاعات پروژه ثبت شد.";

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 4, info);

                return(model, true);
            }

            if (buttonId == "3-return")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text   = null;
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 2, info);

                return(model, true);
            }

            if (buttonId == "grade")
            {
                var grade = EnumValue.GetGradeEnumByValue(messageText);
                var info  = await _groupService.SetMembersGrade(chatId, grade.Value);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 4, info);

                model.Text = null;
                return(model, true);
            }

            if (buttonId.StartsWith("memberName"))
            {
                var info = await _groupService.GetGroupInfo(chatId);

                var number = int.Parse(buttonId.Replace("memberName", ""));

                await _groupService.SetMemberName(chatId, info.Id, number, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 4, info);

                return(model, true);
            }

            if (buttonId.StartsWith("memberNationalCode"))
            {
                var info = await _groupService.GetGroupInfo(chatId);

                var number = int.Parse(buttonId.Replace("memberNationalCode", ""));

                if (messageText.IsValidNationalCode())
                {
                    await _groupService.SetMemberNationalCode(chatId, info.Id, number, messageText);
                }
                else
                {
                    model.Text = Messages.InvalidNationalCode;
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 4, info);

                return(model, true);
            }

            if (buttonId == "4-continue")
            {
                var info = await _groupService.SetPrice(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 5, info);

                model.Text = GetGroupInfo(info);
                await _messengerService.SendMessage(model);

                model.Text = await GetMembersInfo(info);

                return(model, true);
            }

            if (buttonId == "4-return")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text   = null;
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 3, info);

                return(model, true);
            }

            //Payment
            if (buttonId == "payment")
            {
                var groupInfo = await _groupService.GetGroupInfo(model.ChatId);

                if (myMessage.AuxData == null || string.IsNullOrEmpty(myMessage.AuxData.OrderId))
                {
                    model.Text   = Messages.ErrorPay;
                    model.Keypad = await _keypadService.GenerateButtonsAsync(model.ChatId, 4, groupInfo);

                    return(model, true);
                }

                var orderId = int.Parse(myMessage.AuxData.OrderId);

                var order = await _orderService.UpdateOrderStatus(orderId, myMessage.AuxData.OrderStatus);

                if (order == null || myMessage.AuxData.OrderStatus == OrderStatusEnum.Error)
                {
                    model.Text   = Messages.ErrorPay;
                    model.Keypad = await _keypadService.GenerateButtonsAsync(model.ChatId, 4, groupInfo);

                    return(model, true);
                }

                else
                {
                    var settle = await _messengerService.SettlePayment(model.ChatId, order.Id.ToString(), order.PaymentToken);

                    await _orderService.UpdateSettleStatus(orderId, settle.Data.SettleStatus);

                    if (settle.Data.SettleStatus == SettleStatusEnum.Reject)
                    {
                        model.Text   = Messages.ErrorPay;
                        model.Keypad = await _keypadService.GenerateButtonsAsync(model.ChatId, 4, groupInfo);

                        return(model, true);
                    }
                    else //(settle.Data.SettleStatus == SettleStatusEnum.Done)
                    {
                        await _groupService.SetFinished(model.ChatId, orderId);

                        model.Text   = Messages.SuccessRegister;
                        model.Keypad = await _keypadService.GenerateButtonsAsync(model.ChatId, 6, groupInfo);

                        return(model, false);
                    }
                }
            }

            if (buttonId == "5-return")
            {
                var info = await _groupService.GetGroupInfo(chatId);

                model.Text   = null;
                model.Keypad = await _keypadService.GenerateButtonsAsync(chatId, 4, info);

                return(model, true);
            }

            return(await InvalidCommand(model, userDataEntity.StateId));
        }
Ejemplo n.º 27
0
        public async Task <ServiceResult> SendMessageAsync(SendMessageInput input)
        {
            await _chatAppService.SendMessageAsync(input);

            return(await ServiceResult.IsSuccess());
        }
Ejemplo n.º 28
0
        private async Task <(SendMessageInput model, bool toast)> Command(MessageModel myMessage)
        {
            var buttonId       = myMessage.AuxData == null ? "" : myMessage.AuxData.ButtonId;
            var chatId         = myMessage.ChatId;
            var messageText    = myMessage.Text;
            var userDataEntity = await _userDataService.GetUserData(chatId);

            var model = new SendMessageInput
            {
                Keypad = new KeypadModel
                {
                    Rows = new List <KeypadRowModel>()
                },
                ReplyTimeout = Variables.ReplyTimeout,
                ChatId       = chatId
            };

            if (string.IsNullOrEmpty(buttonId) && userDataEntity != null)
            {
                return(await InvalidCommand(model, userDataEntity.StateId));
            }

            if (!string.IsNullOrEmpty(buttonId) && userDataEntity != null)
            {
                var button = await _buttonService.GetButton(buttonId);

                if (button == null || button.StateId != userDataEntity.StateId)
                {
                    return(await InvalidCommand(model, userDataEntity.StateId));
                }
            }

            //start
            if (userDataEntity == null)
            {
                await _userDataService.Update(chatId, 1);

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, new UserInfoEntity());

                model.Text = Messages.WelcomeMessage;
                return(model, false);
            }

            else if (buttonId == "1-1") // firsname
            {
                await _userDataService.Update(chatId, 1);

                var info = await _userInfoService.UpdateFirsName(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "1-2") // lastname
            {
                await _userDataService.Update(chatId, 1);

                var info = await _userInfoService.UpdateLastName(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "1-3") // povince
            {
                await _userDataService.Update(chatId, 1);

                var province = await _provinceService.GetProvinceAsync(messageText);

                var info = new UserInfoEntity();
                if (province != null)
                {
                    info = await _userInfoService.UpdateProvince(chatId, province.Id, province.Name);
                }
                else
                {
                    info = await _userInfoService.GetUserInfo(chatId);
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "1-4") // city
            {
                await _userDataService.Update(chatId, 1);

                var info = await _userInfoService.GetUserInfo(chatId);

                var city = await _provinceService.GetCityAsync(info.ProvinceId.Value, messageText);

                if (city != null)
                {
                    info = await _userInfoService.UpdateCity(chatId, city.Id, city.Name);
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "1-5") // population status
            {
                await _userDataService.Update(chatId, 1);

                var populationStatus = Utility.EnumValue.GetPopulationEnumByValue(messageText);

                var info = new UserInfoEntity();
                if (populationStatus.HasValue)
                {
                    info = await _userInfoService.UpdatePopulationStatus(chatId, populationStatus.Value, messageText);
                }
                else
                {
                    info = await _userInfoService.GetUserInfo(chatId);
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "1-6") // mobile
            {
                await _userDataService.Update(chatId, 1);

                var info = new UserInfoEntity();

                if (messageText.Length == 11 && messageText.StartsWith("09"))
                {
                    info = await _userInfoService.UpdateMobile(chatId, messageText);

                    model.Text = null;
                }
                else
                {
                    info = await _userInfoService.GetUserInfo(chatId);

                    model.Text = Messages.InvalidMobileNumber;
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                return(model, false);
            }

            else if (buttonId == "1-submit")
            {
                var info = await _userInfoService.GetUserInfo(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                await _userDataService.Update(chatId, 2);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "2-1") // address
            {
                await _userDataService.Update(chatId, 2);

                var info = await _userInfoService.UpdateAddress(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "2-2") // postalcode
            {
                await _userDataService.Update(chatId, 2);

                UserInfoEntity info;
                if (messageText.Length == 10)
                {
                    info = await _userInfoService.UpdatePostalCode(chatId, messageText);

                    model.Text = null;
                }
                else
                {
                    info = await _userInfoService.GetUserInfo(chatId);

                    model.Text = Messages.InvalidPostalCode;
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                return(model, false);
            }

            else if (buttonId == "2-3") // birthdate
            {
                await _userDataService.Update(chatId, 2);

                var info = await _userInfoService.UpdateBirthDate(chatId, messageText);

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "2-4") // national code
            {
                await _userDataService.Update(chatId, 2);

                var userInfo = new UserInfoEntity();
                if (messageText.Length != 10 || !messageText.IsValidNationalCode())
                {
                    userInfo = await _userInfoService.GetUserInfo(model.ChatId);

                    model.Text = Messages.InvalidNationalCode;
                }

                else
                {
                    userInfo = await _userInfoService.UpdateNationalCode(chatId, messageText);

                    model.Text = null;
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, userInfo);

                return(model, false);
            }

            else if (buttonId == "2-5") // position
            {
                await _userDataService.Update(chatId, 2);

                var            position = EnumValue.GetPositionEnumByValue(messageText);
                UserInfoEntity info;
                if (position.HasValue)
                {
                    info = await _userInfoService.UpdatePosition(chatId, position.Value, messageText);
                }
                else
                {
                    info = await _userInfoService.GetUserInfo(chatId);
                }

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "2-submit")
            {
                await _userDataService.Update(chatId, 3);

                var info = await _userInfoService.GetUserInfo(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(3, info);

                if (string.IsNullOrEmpty(info.VideoSrc))//First time for upload
                {
                    model.Text = Messages.UploadGreeting;
                    await _messengerService.SendMessage(model);
                }

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "2-return")
            {
                await _userDataService.Update(chatId, 1);

                var info = await _userInfoService.GetUserInfo(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(1, info);

                model.Text = null;
                return(model, false);
            }

            else if (buttonId == "3-1") // video
            {
                await _userDataService.Update(chatId, 3);

                var upload = await UploadVideo(chatId, myMessage);

                if (!string.IsNullOrEmpty(upload.fileSrc))
                {
                    var info = await _userInfoService.UpdateVideo(chatId, upload.fileSrc);

                    model.Keypad = await _keypadService.GenerateButtonsAsync(3, info);

                    return(model, false);
                }
                else
                {
                    var info = await _userInfoService.GetUserInfo(chatId);

                    model.Keypad = await _keypadService.GenerateButtonsAsync(3, info);

                    if (upload.error == UploadErrorEnum.OverSize)
                    {
                        model.Text = Messages.OverSizeVideo;
                    }
                    else if (upload.error == UploadErrorEnum.InvalidExtension)
                    {
                        model.Text = Messages.InvalidFileExtension;
                    }
                    else if (upload.error == UploadErrorEnum.UploadIssue)
                    {
                        model.Text = Messages.FileNotUploaded;
                    }
                    return(model, true);
                }
            }

            //else if (buttonId == "3-submit")
            //{
            //    await _userDataService.Update(chatId, 3);

            //    var info = await _userInfoService.GetUserInfo(chatId);
            //    model.Keypad = await _keypadService.GenerateButtonsAsync(4, info);
            //    model.Text = null;
            //    return (model, false);
            //}

            else if (buttonId == "3-return")
            {
                await _userDataService.Update(chatId, 2);

                var info = await _userInfoService.GetUserInfo(chatId);

                model.Keypad = await _keypadService.GenerateButtonsAsync(2, info);

                model.Text = null;
                return(model, false);
            }

            return(await InvalidCommand(model, userDataEntity.StateId));
        }
Ejemplo n.º 29
0
 public async Task SendMessageAsync(SendMessageInput input)
 {
     Guid targetId = new Guid(input.TargetUserName);
     await _distributedEventBus.PublishAsync(new ReceivedMessageEto(targetId, CurrentUser.UserName, input.Message));
 }
Ejemplo n.º 30
0
 public async Task SendMessageAsync(SendMessageInput input)
 {
     await _chatAppService.SendMessageAsync(input);
 }