public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)) { if (turnContext.Activity.Type == ActivityTypes.Message) { var state = await _accessors.UserData.GetAsync(turnContext, () => new UserData()); var text = turnContext.Activity.Text.ToLowerInvariant(); var messageWords = text.Split(new char[0], StringSplitOptions.RemoveEmptyEntries); switch (messageWords[0]) { case "intro": case "help": await turnContext.SendActivityAsync(INTRO_MESSAGE); break; case "sub": if (!int.TryParse(messageWords[1], out int newsMinPoints)) { await turnContext.SendActivityAsync($"sub command usage: 'sub MIN_POINTS', where MIN_POINTS - positive integer number."); break; } User user; if (state.UserId == null) { user = await _userStorage.GetUserAsync(turnContext.Activity.From.Id); if (user != null) { state.UserId = user.Id; } else { var message = turnContext.Activity.AsMessageActivity(); var conversation = new Conversation() { ToId = message.From.Id, ToName = message.From.Name, FromId = message.Recipient.Id, FromName = message.Recipient.Name, ServiceUrl = message.ServiceUrl, ChannelId = message.ChannelId, Id = message.Conversation.Id }; user = new User(turnContext.Activity.From.Id, turnContext.Activity.From.Name, conversation); await _userStorage.AddOrUpdateUserAsync(user); state.UserId = user.Id; } await _accessors.UserData.SetAsync(turnContext, state); await _accessors.ConversationState.SaveChangesAsync(turnContext); } else { user = await _userStorage.GetUserAsync(state.UserId); } user.IsSubscribedToStories = true; user.StoriesMinPointsToNotify = newsMinPoints; await _userStorage.AddOrUpdateUserAsync(user); await turnContext.SendActivityAsync($"You have been subscribed to news with more than {newsMinPoints} points."); await _userUnreadStorySender.SendToUserAsync(state.UserId); break; case "unsub": if (state.UserId == null) { await turnContext.SendActivityAsync($"You are not subscribed to news."); break; } var unsubUser = await _userStorage.GetUserAsync(state.UserId); await _userStorage.AddOrUpdateUserAsync(unsubUser); await turnContext.SendActivityAsync($"You have been successfully unsubscribed."); break; default: await turnContext.SendActivityAsync("Sorry, can't understand you. Type \"help\" to list commands."); break; } } else if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate) { if (turnContext.Activity.MembersAdded.Any()) { foreach (var member in turnContext.Activity.MembersAdded) { // Greet anyone that was not the target (recipient) of this message // the 'bot' is the recipient for events from the channel, // turnContext.Activity.MembersAdded == turnContext.Activity.Recipient.Id indicates the // bot was added to the conversation. if (member.Id != turnContext.Activity.Recipient.Id) { await turnContext.SendActivityAsync(INTRO_MESSAGE); } } } } }