예제 #1
0
 public static async Task SaveRemoveFromTeam(string serviceUrl, string teamId, string tenantId)
 {
     await MeetupBotDataProvider.SaveTeamInstallStatus(new TeamInstallInfo()
     {
         ServiceUrl = serviceUrl, TeamId = teamId, TenantId = tenantId
     }, false);
 }
예제 #2
0
        public static async Task <int> MakePairsAndNotify()
        {
            // Recall all the teams where we have been added
            // For each team where I have been added:
            //     Pull the roster of each team where I have been added
            //     Remove the members who have opted out of pairs
            //     Match each member with someone else
            //     Save this pair
            // Now notify each pair found in 1:1 and ask them to reach out to the other person
            // When contacting the user in 1:1, give them the button to opt-out.

            var teams = MeetupBotDataProvider.GetInstalledTeams();

            var countPairsNotified = 0;
            var maxPairUpsPerTeam  = Convert.ToInt32(CloudConfigurationManager.GetSetting("MaxPairUpsPerTeam"));

            foreach (var team in teams)
            {
                try
                {
                    var optInStatuses = await MeetupBotDataProvider.GetUserOptInStatusesAsync(team.TenantId);

                    var optedInUsers = await GetOptedInUsers(team, optInStatuses);

                    var teamName = await GetTeamNameAsync(team.ServiceUrl, team.TeamId);

                    foreach (var pair in MakePairs(optedInUsers, optInStatuses).Take(maxPairUpsPerTeam))
                    {
                        await NotifyPair(team.ServiceUrl, team.TenantId, teamName, pair);

                        await MeetupBotDataProvider.StorePairup(team.TenantId, optInStatuses, pair.Item1.ObjectId, pair.Item2.ObjectId);

                        countPairsNotified++;
                    }
                }
                catch (UnauthorizedAccessException uae)
                {
                    System.Diagnostics.Trace.TraceError($"Failed to process a team: {team.ToString()} due to error {uae.ToString()}");
                }
            }

            System.Diagnostics.Trace.TraceInformation($"{countPairsNotified} pairs notified");

            return(countPairsNotified);
        }
예제 #3
0
        private static async Task <List <ChannelAccount> > GetOptedInUsers(TeamInstallInfo teamInfo)
        {
            var optedInUsers = new List <ChannelAccount>();

            var members = await GetTeamMembers(teamInfo.ServiceUrl, teamInfo.TeamId, teamInfo.TenantId);

            foreach (var member in members)
            {
                var optInStatus = MeetupBotDataProvider.GetUserOptInStatus(teamInfo.TenantId, member.ObjectId);

                if (optInStatus == null || optInStatus.OptedIn)
                {
                    optedInUsers.Add(member);
                }
            }

            return(optedInUsers);
        }
예제 #4
0
 public static async Task OptInUser(string tenantId, string userId, string serviceUrl)
 {
     await MeetupBotDataProvider.SetUserOptInStatus(tenantId, userId, true, serviceUrl);
 }