Пример #1
0
        public async Task UpdateScoresAsync(Activity activity, bool userWin)
        {
            using (StateClient stateClient = activity.GetStateClient())
            {
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  = await chatbotState.GetUserDataAsync(
                    activity.ChannelId, activity.From.Id);

                Queue <PlayScore> scoreQueue =
                    chatbotData.GetProperty <Queue <PlayScore> >(property: "scores");

                if (scoreQueue == null)
                {
                    scoreQueue = new Queue <PlayScore>();
                }

                if (scoreQueue.Count >= 10)
                {
                    scoreQueue.Dequeue();
                }

                scoreQueue.Enqueue(new PlayScore {
                    UserWin = userWin
                });

                chatbotData.SetProperty <Queue <PlayScore> >(property: "scores", data: scoreQueue);
                await chatbotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, chatbotData);
            }
        }
Пример #2
0
        public async Task UpdateAsync(Activity activity, MeetingData inData)
        {
            using (StateClient stateClient = activity.GetStateClient())
            {
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  = await chatbotState.GetUserDataAsync(
                    activity.ChannelId, activity.From.Id);

                MeetingData meetingData =
                    chatbotData.GetProperty <MeetingData>(MeetingDataProperty);

                if (meetingData == null)
                {
                    meetingData = new MeetingData();
                }

                meetingData.UserChannelID = activity.From.Id;
                meetingData.UserDBID      = inData.UserDBID;
                meetingData.Dialog        = inData.Dialog;
                meetingData.Method        = inData.Method;

                chatbotData.SetProperty(MeetingDataProperty, data: meetingData);
                await chatbotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, chatbotData);
            }
        }
Пример #3
0
        public async Task <string> GetScoresAsync(ConnectorClient connector, Activity activity)
        {
            Activity typingActivity = activity.BuildTypingActivity();
            await connector.Conversations.ReplyToActivityAsync(typingActivity);

            await Task.Delay(millisecondsDelay : 10000);

            using (StateClient stateClient = activity.GetStateClient())
            {
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  = await chatbotState.GetUserDataAsync(
                    activity.ChannelId, activity.From.Id);

                Queue <PlayScore> scoreQueue =
                    chatbotData.GetProperty <Queue <PlayScore> >(property: "scores");

                if (scoreQueue == null)
                {
                    return("Try typing Rock, Paper, or Scissors to play first.");
                }

                int plays       = scoreQueue.Count;
                int userWins    = scoreQueue.Where(q => q.UserWin).Count();
                int chatbotWins = scoreQueue.Where(q => !q.UserWin).Count();

                int ties = chatbotData.GetProperty <int>(property: "ties");

                return($"Out of the last {plays} contests, " +
                       $"you scored {userWins} and " +
                       $"Chatbot scored {chatbotWins}. " +
                       $"You've also had {ties} ties since playing.");
            }
        }
Пример #4
0
        public async Task <string> GetScoresAsync(Activity activity)
        {
            using (StateClient stateClient = activity.GetStateClient())
            {
                //Get user state data base on Channel Id and From Id.
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  = await chatbotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);

                //Get state data(property), it was set/created in function: UpdateScoreAsync() as below
                Queue <PlaySore> scoreQueue = chatbotData.GetProperty <Queue <PlaySore> >(property: "scores");

                if (scoreQueue == null)
                {
                    return("Try typing Rock, Paper, or Scissors to Play first.");
                }

                int plays       = scoreQueue.Count;
                int userWins    = scoreQueue.Where(q => q.UserWin).Count();
                int chatbotWins = scoreQueue.Where(q => !q.UserWin).Count();
                int ties        = chatbotData.GetProperty <int>(property: "ties");

                return($"Out of the last {plays} contests, you scored {userWins} and chatbot scored {chatbotWins}. "
                       + $"You have also {ties} ties since playing.");
            }
        }
Пример #5
0
        public async Task <MeetingData> GetAsync(IActivity activity)
        {
            using (StateClient stateClient = activity.GetStateClient())
            {
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  =
                    await chatbotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);

                return(chatbotData.GetProperty <MeetingData>(MeetingDataProperty));
            }
        }
Пример #6
0
        public async Task AddTieAsync(Activity activity)
        {
            using (StateClient stateClient = activity.GetStateClient())
            {
                IBotState chatbotState = stateClient.BotState;
                BotData   chatbotData  = await chatbotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);

                int ties = chatbotData.GetProperty <int>(property: "ties");

                chatbotData.SetProperty <int>(property: "ties", data: ++ties);

                await chatbotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, chatbotData);
            }
        }
Пример #7
0
 public static BotData GetUserData(this IBotState operations, string channelId, string userId)
 {
     return(operations.GetUserDataAsync(channelId, userId).GetAwaiter().GetResult());
 }
 /// <summary>
 /// Get user data based on current activity.
 /// </summary>
 /// <returns></returns>
 private async Task <BotData> GeUserDataAsync()
 {
     return(await _botState.GetUserDataAsync(_activity.ChannelId, _activity.From.Id));
 }