Exemple #1
0
        public async Task AddExperienceFromMonster(List <User> users, Monster monster, string channel)
        {
            var levels = users.ToDictionary(user => user.Id, user => user.Level);

            var userIds = users.Select(user => user.Id).ToList();

            _statsRepository.AddMonsterExperienceToUsers(userIds, monster);

            var expGainMessageTasks = users.Select(user => _slack.SendEphemeralMessage(string.Format(DougMessages.GainedExp, user.CalculateExperienceGainedFromMonster(monster, users.Count)), user.Id, channel));

            var levelUpUsers = users.Where(user => levels.GetValueOrDefault(user.Id) < user.Level).ToList();

            LevelUpUsers(levelUpUsers);

            var levelUpMessageTasks = levelUpUsers.Select(user => _slack.BroadcastMessage(string.Format(DougMessages.LevelUp, Mention(user), user.Level), channel));

            await Task.WhenAll(levelUpMessageTasks.Concat(expGainMessageTasks));
        }