/// <summary>
        /// Method to add slack user
        /// </summary>
        /// <param name="slackUserDetails"></param>
        public void AddSlackUser(SlackUserDetails slackUserDetails)
        {
            SlackUserDetails   slackUser    = _slackUserDetails.FirstOrDefault(x => x.UserId == slackUserDetails.UserId);
            SlackBotUserDetail slackBotUser = _slackUserBotDetails.FirstOrDefault(x => x.UserId == slackUserDetails.UserId);

            if (slackUser == null && slackBotUser == null)
            {
                if (slackUserDetails.IsBot || slackUserDetails.Name == _stringConstant.SlackBotStringName)
                {
                    AddSlackBotUserDetail(slackUserDetails);
                }
                else
                {
                    AddSlackUserDetail(slackUserDetails);
                }
            }
            else
            {
                UpdateSlackUser(slackUserDetails);
            }
        }
        /// <summary>
        /// Add slack BotUser details to the database
        /// </summary>
        /// <param name="slackUserDetails"></param>
        private void AddSlackBotUserDetail(SlackUserDetails slackUserDetails)
        {
            SlackBotUserDetail slackUserBotDetail = new SlackBotUserDetail();

            Mapper.Initialize(cfg => cfg.CreateMap <SlackUserDetails, SlackBotUserDetail>()
                              .ForMember(des => des.FirstName,
                                         opt => opt.MapFrom(src => src.Profile.FirstName)
                                         )
                              .ForMember(des => des.LastName,
                                         opt => opt.MapFrom(src => src.Profile.LastName)
                                         )
                              .ForMember(des => des.BotId,
                                         opt => opt.MapFrom(src => src.Profile.BotId)
                                         )
                              );

            // Perform mapping
            slackUserBotDetail = Mapper.Map(slackUserDetails, slackUserBotDetail);

            slackUserBotDetail.CreatedOn = DateTime.UtcNow;
            _slackUserBotDetails.Insert(slackUserBotDetail);
        }
Пример #3
0
        public async Task <string> ProcessMessages(string userId, string channelId, string message)
        {
            string              replyText = string.Empty;
            SlackUserDetails    user      = _slackUserDetails.GetById(userId);
            SlackChannelDetails channel   = _slackChannelRepository.GetById(channelId);
            //the command is split to individual words
            //commnads ex: "scrum time", "later @userId"
            var messageArray = message.Split(null);

            if (user != null && String.Compare(message, _stringConstant.ScrumHelp, true) == 0)
            {
                replyText = _stringConstant.ScrumHelpMessage;
            }
            else if (user != null && channel != null)
            {
                //commands could be"scrum time" or "scrum halt" or "scrum resume"
                if (String.Compare(message, _stringConstant.ScrumTime, true) == 0 || String.Compare(message, _stringConstant.ScrumHalt, true) == 0 || String.Compare(message, _stringConstant.ScrumResume, true) == 0)
                {
                    replyText = await Scrum(channel.Name, user.Name, messageArray[1].ToLower());
                }
                //a particular employee is on leave, getting marked as later or asked question again
                //commands would be "leave @userId"
                else if ((String.Compare(messageArray[0], _stringConstant.Leave, true) == 0) && messageArray.Length == 2)
                {
                    int fromIndex = message.IndexOf("<@") + "<@".Length;
                    int toIndex   = message.LastIndexOf(">");
                    if (toIndex > 0)
                    {
                        try
                        {
                            //the userId is fetched
                            string applicantId = message.Substring(fromIndex, toIndex - fromIndex);
                            //fetch the user of the given userId
                            SlackUserDetails applicant = _slackUserDetails.GetById(applicantId);
                            if (applicant != null)
                            {
                                string applicantName = applicant.Name;
                                replyText = await Leave(channel.Name, user.Name, applicantName);
                            }
                            else
                            {
                                replyText = _stringConstant.NotAUser;
                            }
                        }
                        catch (Exception)
                        {
                            replyText = _stringConstant.ScrumHelpMessage;
                        }
                    }
                    else
                    {
                        replyText = await AddScrumAnswer(user.Name, message, channel.Name);
                    }
                }
                //all other texts
                else
                {
                    replyText = await AddScrumAnswer(user.Name, message, channel.Name);
                }
            }
            //If channel is not registered in the database
            else if (user != null)
            {
                //If channel is not registered in the database and the command encountered is "add channel channelname"
                if (channel == null && String.Compare(messageArray[0], _stringConstant.Add, true) == 0 && String.Compare(messageArray[1], _stringConstant.Channel, true) == 0)
                {
                    replyText = AddChannelManually(messageArray[2], user.Name, channelId).Result;
                }
                else
                {
                    replyText = _stringConstant.ChannelAddInstruction;
                }
            }
            else if (user == null)
            {
                SlackBotUserDetail botUser = _slackBotUserDetail.FirstOrDefault(x => x.UserId == userId);
                if (botUser == null)
                {
                    replyText = _stringConstant.NoSlackDetails;
                }
            }

            return(replyText);
        }