public Macros CalculateMacros(UserStat userStat) { _userStat = userStat; var weight = GetWeight(); var height = GetHeight(); var age = GetAge(); var genderAddition = _userStat.Gender.Multiplier; var activityMultiplier = _userStat.ActivityFactor.Multiplier; var goalAddition = _userStat.Goal.Multiplier; var REE = (weight * WEIGHTMULTIPLIER) + (height * HEIGHTMULTIPLIER) - (AGEMULTIPLIER * age) + genderAddition; var macros = (int)Math.Round((REE * activityMultiplier) / 10.0) * 10; macros = macros + goalAddition; var fatGrams = (int)Math.Round(macros * 0.03, 0); var proteinGrams = (int)Math.Round(weight * 2 * 0.8, 0); var carbs = macros - (fatGrams * 9 + proteinGrams * 4); var carbsGrams = (int)Math.Round((double)carbs / 4.0, 0); macros = fatGrams * 9 + ((proteinGrams + carbsGrams) * 4); return(new Macros { FatGrams = fatGrams, CarbsGrams = carbsGrams, ProteinGrams = proteinGrams, Calories = macros }); }
private void setUserVM(short id) { UserManage = new List <GroupManagementUserVM>(); var queues = db.Queue.Include(p => p.User).Where(p => p.GroupID == id); List <User> Allusers = new List <User>(); foreach (var item in queues) { Allusers.AddRange(item.User); } var users = Allusers.Distinct().OrderBy(u => u.Username); var e = new RejectManagementVM(id); foreach (var item in users) { if (item.IsActive) { UserStat i = new UserStat(item); GroupManagementUserVM x = new GroupManagementUserVM { User = item.Username, ProcessedToday = i.processedToday, OutstandingErrors = e.ErrorList.Where(p => p.Processing.Username == item.Username).Count() }; UserManage.Add(x); } } }
// GET: api/Statistics?userName=elad public UserStat Get(string userName) { UserStat ans; var u = Server.Server.GameFacade.GetStat(userName); if (u == null) { ans = new UserStat { Username = "", AvgCashGain = -1, AvgGrossProfit = -1, GrossProfit = -1, HighestCashGain = -1, NumOfGames = -1, AvatarPath = "" } } ; else { ans = new UserStat { Username = u.Username, AvgCashGain = u.AvgCashGain, AvgGrossProfit = u.AvgGrossProfit, GrossProfit = u.GrossProfit, HighestCashGain = u.HighestCashGain, NumOfGames = u.NumOfGames, AvatarPath = u.AvatarPath } }; return(ans); }
public void AddStat(UserStat userStat) { using (var da = new SqlDataAdapter("SELECT * FROM dbo.UserStat", conn)) { da.MissingSchemaAction = MissingSchemaAction.AddWithKey; // Для получения метаинформации из БД //Объект, который сгенерирует команды встави и обновления var b = new SqlCommandBuilder(da); //Объект для записи данных var data = new DataTable(); //Заполняем объект данными da.Fill(data); //Возможны два сценария: //1. Строка уже есть в БД, тогда её нужно обновить //2. Строки нет в БД, тогда её нужно создать DataRow row = data.Rows.Find(userStat.UserId); //Поищем строку по первичному ключу if (row == null) // Строки нет, создадим её { row = data.NewRow(); row["UserID"] = userStat.UserId;//Нужно установить первичный ключ data.Rows.Add(row); } //Установим св-ва row["Money"] = (int)row["Money"] + userStat.Money; //Обновим БД da.Update(data); } }
public void Clear_card() { addons = new List <string>(); order = new List <int>(); orderCreatePizza = new List <string>(); Status = UserStat.WaitCommand; }
public async Task <UserStat> UpdateUserStat(User user, UserStat stat) { var statDB = _context.UsersStats .FirstOrDefault(o => stat.UserStatsId == o.UserStatsId); if (statDB.UserId != user.UserId) { throw new AuthenticationException(); } if (stat.Key != null) { statDB.Key = stat.Key; } if (stat.Value != null) { statDB.Value = stat.Value; } if (stat.StatsCategoryId != null) { statDB.StatsCategoryId = stat.StatsCategoryId; } _context.UsersStats.Update(statDB); await _context.SaveChangesAsync(); return(_context.UsersStats.FirstOrDefault(o => o.UserStatsId == stat.UserStatsId)); }
/// <summary> /// Gets user stats /// </summary> public UserStat GetUserStats(int userId, DateTime howFarBackToSearch) { if (userId <= 0) { throw new ArgumentOutOfRangeException("userId"); } var userStat = new UserStat(); userStat.RecipeCount = this.Repository.GetSet <Recipe>() .Where(x => x.CreatedBy == userId) .Where(x => x.IsActive == true) .Where(x => x.IsPublic == true) .Where(x => x.DateCreated > howFarBackToSearch) .Count(); userStat.SessionCount = this.Repository.GetSet <BrewSession>() .Where(x => x.UserId == userId) .Where(x => x.IsActive == true) .Where(x => x.IsPublic == true) .Where(x => x.DateCreated > howFarBackToSearch) .Count(); userStat.CommentCount = this.Repository.GetSet <RecipeComment>() .Where(x => x.UserId == userId) .Where(x => x.IsActive == true) .Where(x => x.DateCreated > howFarBackToSearch) .Count(); return(userStat); }
//GET: /Manage/MWCStats public ActionResult MWCStats() { /* * The following code that is used to calculate a user's stats was originally from * Kyle Aardal's project. During Lab 2 I was having trouble calculating the user * stats and was unable to finish the user stats. So after reviewing his project I * adapted parts of his user stat calculator for my project. Credit goes to him. */ List <int> MWCScores = new List <int>(); UserStat stats = new UserStat(); stats.PlayerName = User.Identity.Name; stats.Scores = db.Leaderboards.Where(s => s.PlayerName.Equals(stats.PlayerName)) .Where(s => s.GameName.Equals(ApplicationConstants.GAME_MWC)).ToList(); foreach (Leaderboard score in stats.Scores) { MWCScores.Add(score.Score); } //if there are no scores return to index if (MWCScores.Count == 0) { return(View("Index")); } stats.MWCAverageScore = (int)MWCScores.Average(); stats.MWCBestScore = MWCScores.Max(); stats.MWCTimesPlayed = MWCScores.Count(); stats.MWCWorstScore = MWCScores.Min(); return(View(stats)); }
public User() { _isAdmin = false; _userStatus = UserStat.Active; _orders = new List <Order>(); _memberSince = DateTime.Now; }
public async Task <Unit> Handle(Command request, CancellationToken cancellationToken) { var userStatsOld = await _context.UserStats.FirstOrDefaultAsync(x => x.AppUserId == _userAccessor.GetCurrentId()); if (userStatsOld != null) { throw new RestException(HttpStatusCode.BadRequest, new { stats = "User stats already exists for this user" }); } var goal = await _context.Goals.FindAsync(request.GoalId); var gender = await _context.Genders.FindAsync(request.GenderId); var activityFactor = await _context.ActivitiesFactor.FindAsync(request.ActivityFactorId); var unitSystem = await _context.UnitSystems.FindAsync(request.UnitSystemId); if (goal == null) { throw new RestException(HttpStatusCode.BadRequest, new { goal = "Goal Id is not valid" }); } if (gender == null) { throw new RestException(HttpStatusCode.BadRequest, new { gener = "Gender Id is not valid" }); } if (activityFactor == null) { throw new RestException(HttpStatusCode.BadRequest, new { activityFactor = "ActivityFactor Id is not valid" }); } if (unitSystem == null) { throw new RestException(HttpStatusCode.BadRequest, new { hightUnit = "UnitSystem Id is not valid" }); } var userStats = new UserStat { Goal = goal, Gender = gender, ActivityFactor = activityFactor, UnitSystem = unitSystem, Height = request.Height, Weight = request.Weight, DateOfBirth = request.DateOfBirth, AppUserId = _userAccessor.GetCurrentId(), }; _context.UserStats.Add(userStats); var success = await _context.SaveChangesAsync() > 0; if (success) { return(Unit.Value); } throw new Exception("Problem saving changes"); }
public User() { addons = new List <string>(); order = new List <int>(); orderCreatePizza = new List <string>(); Status = UserStat.WaitCommand; start = new DateTime(); }
// STATIC INTERNALS private static UserStat CreateUserStat(UserStatDescriptor i_Descriptor) { UserStat userStat = null; string id = i_Descriptor.id; if (id != "") { switch (i_Descriptor.type) { case UserStatType.Bool: bool defaultBoolValue = i_Descriptor.defaultBoolValue; BooleanCombineFunction booleanCombineFunction = i_Descriptor.booleanCombineFunction; userStat = new UserStatBool(id, defaultBoolValue, booleanCombineFunction); break; case UserStatType.Float: float defaultFloatValue = i_Descriptor.defaultFloatValue; bool usingFloatLowLimit = i_Descriptor.usingLowLimit; bool usingFloatHighLimit = i_Descriptor.usingHighLimit; float minFloatValue = i_Descriptor.minFloatValue; float maxFloatValue = i_Descriptor.maxFloatValue; NumericCombineFunction floatCombineFunction = i_Descriptor.numericCombineFunction; userStat = new UserStatFloat(id, defaultFloatValue, usingFloatLowLimit, usingFloatHighLimit, minFloatValue, maxFloatValue, floatCombineFunction); break; case UserStatType.Int: int defaultIntValue = i_Descriptor.defaultIntValue; bool usingIntLowLimit = i_Descriptor.usingLowLimit; bool usingIntHighLimit = i_Descriptor.usingHighLimit; int minIntValue = i_Descriptor.minIntValue; int maxIntValue = i_Descriptor.maxIntValue; NumericCombineFunction intCombineFunction = i_Descriptor.numericCombineFunction; userStat = new UserStatInt(id, defaultIntValue, usingIntLowLimit, usingIntHighLimit, minIntValue, maxIntValue, intCombineFunction); break; case UserStatType.String: string defaultStringValue = i_Descriptor.defaultStringValue; StringCombineFunction stringCombineFunction = i_Descriptor.stringCombineFunction; userStat = new UserStatString(id, defaultStringValue, stringCombineFunction); break; } } return(userStat); }
public static void RainedOn(UserStat userStats, decimal amount) { userStats.RainedOn += 1; userStats.RainedOnTotal += amount; if (userStats.TopRainedOn < amount) { userStats.TopRainedOn = amount; } }
public void Insert(UserStat statistic) { if (statistic == null) { throw new ArgumentNullException("statistic"); } this._statisticRepository.Insert(statistic); }
public static void Tip(UserStat userStats, decimal amount) { userStats.AmountOfTipsSent += 1; userStats.TotalSentBitcornViaTips += amount; if (userStats.LargestSentBitcornTip < amount) { userStats.LargestSentBitcornTip = amount; } }
public static void RainedOn(UserStat userStats, decimal amount) { userStats.AmountOfRainsReceived += 1; userStats.TotalReceivedBitcornRains += amount; if (userStats.LargestReceivedBitcornRain < amount) { userStats.LargestReceivedBitcornRain = amount; } }
public static void Rain(UserStat userStats, decimal amount) { userStats.AmountOfRainsSent += 1; userStats.TotalSentBitcornViaRains += amount; if (userStats.LargestSentBitcornRain < amount) { userStats.LargestSentBitcornRain = amount; } }
public static void Tip(UserStat userStats, decimal amount) { userStats.Tip += 1; userStats.TipTotal += amount; if (userStats.TopTip < amount) { userStats.TopTip = amount; } }
//---------- //User Stats //---------- public async Task <UserStat> AddUserStat(User user, UserStat stat) { stat.UserId = user.UserId; _context.UsersStats.Add(stat); await _context.SaveChangesAsync(); return(_context.UsersStats.FirstOrDefault(o => o.UserStatsId == stat.UserStatsId)); }
public static void Tipped(UserStat userStats, decimal amount) { userStats.AmountOfTipsReceived += 1; userStats.TotalReceivedBitcornTips += amount; if (userStats.LargestReceivedBitcornTip < amount) { userStats.LargestReceivedBitcornTip = amount; } }
public static void Tipped(UserStat userStats, decimal amount) { userStats.Tipped += 1; userStats.TippedTotal += amount; if (userStats.TopTipped < amount) { userStats.TopTipped = amount; } }
public static async Task BonusPayout(BitcornContext dbContext, UserReferral userReferral, Referrer referrer, User user, User referrerUser, UserStat referrerStat) { if (userReferral != null && userReferral.SignupReward != null && userReferral.MinimumBalanceDate != null && userReferral.WalletDownloadDate != null && userReferral.SyncDate != null && userReferral.Bonus == null && userReferral.ReferrerBonus == null && userReferral.UserSubscriptionId == null && referrer != null && !user.IsBanned && !referrerUser.IsBanned) { var subQuery = SubscriptionUtils.GetActiveSubscription(dbContext, user, "BITCORNFarms", 1); if (subQuery == null) { return; } var userSubInfo = await subQuery.FirstOrDefaultAsync(); if (userSubInfo == null) { return; } userReferral.UserSubscriptionId = userSubInfo.UserSubcriptionTierInfo.UserSubscription.UserSubscriptionId; var amount = BONUS_PAYOUT; var bonusReward = await TxUtils.SendFromBitcornhub(user, amount, "BITCORNFarms", "Referral bonus reward", dbContext); if (IsValidReferrer(referrer)) { if (bonusReward) { userReferral.Bonus = DateTime.Now; await LogReferralTx(dbContext, user.UserId, amount, "Recruit bonus reward"); var referrerBonusReward = await TxUtils.SendFromBitcornhub(referrerUser, amount, "BITCORNFarms", "Referral bonus reward", dbContext); if (referrerBonusReward) { await UpdateYtdTotal(dbContext, referrer, amount); await LogReferralTx(dbContext, referrerUser.UserId, amount, "Referral bonus reward"); referrerStat.TotalReferralRewardsCorn += amount; referrerStat.TotalReferralRewardsUsdt += (amount * await ProbitApi.GetCornPriceAsync(dbContext)); userReferral.ReferrerBonus = DateTime.Now; } } } } }
// CALLBACKS private void OnUserStatsReceived(UserStatsReceived_t i_CallbackParams) { if (m_UserStatsManager == null || m_RemoteStatsMapper == null) { return; } if (i_CallbackParams.m_nGameID == ((ulong)m_GameId)) { EResult callbackResult = i_CallbackParams.m_eResult; if (callbackResult == EResult.k_EResultOK) { for (int userStatIndex = 0; userStatIndex < m_UserStatsManager.statsCount; ++userStatIndex) { UserStat userStat = m_UserStatsManager.GetStatByIndex(userStatIndex); if (userStat != null) { UserStatType userStatType = userStat.type; switch (userStatType) { case UserStatType.Int: UserStatInt userStatInt = (UserStatInt)userStat; CombineIntUserStat(userStatInt); break; case UserStatType.Bool: UserStatBool userStatBool = (UserStatBool)userStat; CombineBoolUserStat(userStatBool); break; case UserStatType.Float: UserStatFloat userStatFloat = (UserStatFloat)userStat; CombineFloatUserStat(userStatFloat); break; case UserStatType.String: UserStatString userStatString = (UserStatString)userStat; CombineStringUserStat(userStatString); break; } } } m_StatsValid = true; } } }
/// <summary> /// /// </summary> /// <param name="Stat"></param> public UserRole(UserStat Stat, Page input) { if (Session["UserRole"] == null) { input.Response.Redirect("~/Default.aspx"); return; } mStrCurrentStat = input.Session["UserRole"].ToString(); mClassUserStat = Stat; mClassUserStat.PageInfo = input; }
public static object SelectUserProperties(User user, UserIdentity userIdentity, UserWallet userWallet, UserStat userStats, UserReferral userReferral, Referrer referrer, bool guestView) { Dictionary <string, object> output = new Dictionary <string, object>(); AppendUserOutput(output, new Type[] { typeof(int), typeof(string), typeof(DateTime?), typeof(bool) }, user, "Username"); if (!guestView) { AppendUserOutput(output, new Type[] { typeof(string) }, userIdentity); } else { output.Add("auth0Id", userIdentity.Auth0Id); output.Add("auth0Nickname", userIdentity.Auth0Nickname); //Auth0Id = userIdentity.Auth0Id, //Auth0Nickname = userIdentity.Auth0Nickname, } if (!guestView) { AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string) }, userWallet); } if (!guestView) { AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string) }, userStats); } if (!guestView && referrer != null) { AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string), typeof(DateTime?), typeof(int) }, referrer, "userId"); } if (!guestView && userReferral != null) { AppendUserOutput(output, new Type[] { typeof(decimal), typeof(int), typeof(string), typeof(int) }, userReferral, "userId"); } return(output); }
public void StoreStats() { if (!SteamManager.initializedMain) { return; } if (!m_StatsValid) { return; } for (int userStatIndex = 0; userStatIndex < m_UserStatsManager.statsCount; ++userStatIndex) { UserStat userStat = m_UserStatsManager.GetStatByIndex(userStatIndex); if (userStat != null) { UserStatType userStatType = userStat.type; switch (userStatType) { case UserStatType.Int: UserStatInt userStatInt = (UserStatInt)userStat; StoreIntUserStat(userStatInt); break; case UserStatType.Bool: UserStatBool userStatBool = (UserStatBool)userStat; StoreBoolUserStat(userStatBool); break; case UserStatType.Float: UserStatFloat userStatFloat = (UserStatFloat)userStat; StoreFloatUserStat(userStatFloat); break; case UserStatType.String: UserStatString userStatString = (UserStatString)userStat; StoreStringUserStat(userStatString); break; } } } SteamManager.SetStatsDirtyMain(); }
public async Task <IActionResult> AddStatsByName([Bind("Key,Value,CreatedAt,StatsCategoryId")] UserStat stat) { User user = _userService.GetByEmail(User.Identity.Name); if (stat.Key == "" || stat.Key.Length < 1) { throw new ArgumentException(); } var stats = await _userService.AddUserStat(user, stat); return(Ok(stats)); }
public async Task <IActionResult> UpdateOption(Guid statId, [Bind("key,value,StatsCategoryId")] UserStat stat) { if (stat.Key == null) { throw new ArgumentNullException(); } User user = _userService.GetByEmail(User.Identity.Name); stat.UserStatsId = statId; stat = await _userService.UpdateUserStat(user, stat); return(Ok(stat)); }
static int CompareUserStat(UserStat x, UserStat y) { if (x.IsBot && !y.IsBot) { return 1; } if (!x.IsBot && y.IsBot) { return -1; } if (y.TotalActions == x.TotalActions) { return x.Name.CompareTo(y.Name); } return y.TotalActions.CompareTo(x.TotalActions); }
public UserStatType GetUserStatStype(string i_StatId) { for (int userStatIndex = 0; userStatIndex < m_UserStats.Count; ++userStatIndex) { UserStat userStat = m_UserStats[userStatIndex]; if (userStat != null) { string statId = userStat.id; if (statId == i_StatId) { return(userStat.type); } } } return(UserStatType.Invalid); }
private static void SendReportUser(UserStat utente, Message messaggio) { var messaggiTotali = utente.ContAudio + utente.ContText + utente.ContImg + utente.ContSticker; var percentualeMessaggi = (float)utente.ContText / messaggiTotali; var percentualeAudio = (float)utente.ContAudio / messaggiTotali; var percentualeImmagini = (float)utente.ContImg / messaggiTotali; var percentualeSticker = (float)utente.ContSticker / messaggiTotali; Istance.Bot.Istance.SendTextMessageAsync(messaggio.Chat.Id, "Analisi utente \r \n \r \n" + $" Nome : {utente.Nome} \r \n" + $" Cognome : {utente.Cognome} \r \n" + $" Id : {utente.Id} \r \n" + $" Messaggi inviati : {utente.ContText} ({percentualeMessaggi * 100}%) \r \n" + $" Foto inviate : {utente.ContImg} ({percentualeImmagini * 100}%) \r \n" + $" Audio inviati: {utente.ContAudio } ({ percentualeAudio * 100}%) \r \n" + $" Stickers inviati: {utente.ContSticker} ({ percentualeSticker * 100}%) \r \n"); }
static void Main(string[] args) { Wiki wiki = new Wiki("http://ru.wikipedia.org/w/"); if (string.IsNullOrEmpty(Settings.Default.Login) || string.IsNullOrEmpty(Settings.Default.Password)) { Console.Out.WriteLine("Please add login and password to the configuration file."); return; } Console.Out.WriteLine("Logging in as " + Settings.Default.Login + "..."); try { wiki.Login(Settings.Default.Login, Settings.Default.Password); } catch (WikiException e) { Console.Out.WriteLine(e.Message); return; } Console.Out.WriteLine("Logged in as " + Settings.Default.Login + "."); wiki.SleepBetweenQueries = 3; Regex re = new Regex(@"\*\s*\[\[User:(.+?)\]\]\s*→\s*\[\[User:(.+?)\]\]"); Dictionary<string, string> renamedUsers = new Dictionary<string, string>(); string renamedUsersData = wiki.LoadText("Википедия:Проект:Патрулирование/Статистика/1k+/Переименования"); using (TextReader sr = new StringReader(renamedUsersData)) { string line; while ((line = sr.ReadLine()) != null) { Match m = re.Match(line); if (m.Success) { string oldName = m.Groups[1].Value; string newName = m.Groups[2].Value; if (!renamedUsers.ContainsKey(oldName)) { renamedUsers.Add(oldName, newName); } } } } DateTime currentMonth = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); DateTime now = currentMonth; DateTime firstReviewMonth = new DateTime(2008, 9, 1); while (currentMonth > firstReviewMonth) { DateTime previousMonth = currentMonth.AddMonths(-1); if (File.Exists("output" + previousMonth.ToString("yyyy-MM") + ".txt")) { currentMonth = currentMonth.AddMonths(-1); continue; } string start = previousMonth.ToString("yyyy-MM-ddTHH:mm:ssZ"); string stop = currentMonth.ToString("yyyy-MM-ddTHH:mm:ssZ"); Console.Out.WriteLine("Quering list of editors for " + previousMonth.ToString("MMMM yyyy") + "..."); ParameterCollection parameters = new ParameterCollection(); parameters.Add("list", "logevents"); parameters.Add("letype", "review"); parameters.Add("lestart", start); parameters.Add("leend", stop); parameters.Add("ledir", "newer"); parameters.Add("lelimit", "max"); Dictionary<string, User> users = new Dictionary<string, User>(); XmlNode continueNode = null; while (true) { XmlDocument doc; try { doc = wiki.MakeRequest(Claymore.SharpMediaWiki.Action.Query, parameters); } catch (WikiException e) { Console.Out.WriteLine(e.Message); return; } continueNode = doc.SelectSingleNode("//query-continue"); if (continueNode != null) { string name = continueNode.FirstChild.Attributes[0].Name; string value = continueNode.FirstChild.Attributes[0].Value; parameters.Set(name, value); } XmlNodeList entries = doc.SelectNodes("//item[@action!=\"approve-a\" and @action!=\"approve-ia\"]"); foreach (XmlNode entry in entries) { string username = renamedUsers.ContainsKey(entry.Attributes["user"].Value) ? renamedUsers[entry.Attributes["user"].Value] : entry.Attributes["user"].Value; string ns = entry.Attributes["ns"].Value; if (!users.ContainsKey(username)) { User user = new User(username); if (ns == "0") { user.ArticleActions = 1; } else if (ns == "14") { user.CategoryActions = 1; } else if (ns == "10") { user.TemplateActions = 1; } else if (ns == "6") { user.FileActions = 1; } users.Add(username, user); } else { User user = users[username]; if (ns == "0") { ++user.ArticleActions; } else if (ns == "14") { ++user.CategoryActions; } else if (ns == "10") { ++user.TemplateActions; } else if (ns == "6") { ++user.FileActions; } users[username] = user; } } if (continueNode == null) { break; } } Console.Out.WriteLine("Processing data..."); List<User> userList = new List<User>(users.Select(s => s.Value)); userList.Sort(CompareUsers); using (StreamWriter sw = new StreamWriter("output" + previousMonth.ToString("yyyy-MM") + ".txt", false)) { int totalActions = 0; int totalArticleActions = 0; int totalCategoryActions = 0; int totalTemplateActions = 0; int totalFileActions = 0; bool bots = false; sw.WriteLine("== " + previousMonth.ToString("MMMM") + " =="); sw.WriteLine("{| class=\"standard sortable\""); sw.WriteLine("!№!!Участник!!всего!!статей!!категорий!!шаблонов!!файлов"); for (int i = 0, j = 1; i < userList.Count; ++i) { if (userList[i].Name.Contains("Lockalbot") || userList[i].Name.Contains("Secretary")) { bots = true; continue; } sw.WriteLine("|-"); totalActions += userList[i].Actions; totalArticleActions += userList[i].ArticleActions; totalCategoryActions += userList[i].CategoryActions; totalTemplateActions += userList[i].TemplateActions; totalFileActions += userList[i].FileActions; string line = string.Format("|{0}||[[User:{1}|]]||{2}||{3}||{4}||{5}||{6}", j++, userList[i].Name, userList[i].Actions, userList[i].ArticleActions, userList[i].CategoryActions, userList[i].TemplateActions, userList[i].FileActions); sw.WriteLine(line); } sw.WriteLine("|-"); sw.WriteLine("|||Итого||{0}||{1}||{2}||{3}||{4}", totalActions, totalArticleActions, totalCategoryActions, totalTemplateActions, totalFileActions); sw.WriteLine("|}"); if (bots) { sw.WriteLine("; Боты"); sw.WriteLine("{| class=\"standard sortable\""); sw.WriteLine("!№!!Участник!!всего!!статей!!категорий!!шаблонов!!файлов"); for (int i = 0, j = 1; i < userList.Count; ++i) { if (userList[i].Name.Contains("Lockalbot") || userList[i].Name.Contains("Secretary")) { sw.WriteLine("|-"); string line = string.Format("|{0}||[[User:{1}|]]||{2}||{3}||{4}||{5}||{6}", j++, userList[i].Name, userList[i].Actions, userList[i].ArticleActions, userList[i].CategoryActions, userList[i].TemplateActions, userList[i].FileActions); sw.WriteLine(line); } } sw.WriteLine("|}"); } sw.WriteLine("\n— ~~~~"); } currentMonth = currentMonth.AddMonths(-1); } currentMonth = new DateTime(2008, 9, 1); Dictionary<string, List<MonthStat>> userStatistics = new Dictionary<string, List<MonthStat>>(); while (currentMonth < now) { using (TextReader sr = new StreamReader("output" + currentMonth.ToString("yyyy-MM") + ".txt")) { string line; while ((line = sr.ReadLine()) != null) { if (line == "|-") { line = sr.ReadLine(); string[] fields = line.Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries); string user = fields[1]; int actions = int.Parse(fields[2]); if (user.StartsWith("[[User:"******"output" + currentMonth.ToString("yyyy-MM") + ".txt")) { string line; while ((line = sr.ReadLine()) != null) { if (line == "|-") { line = sr.ReadLine(); string[] fields = line.Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries); string user = fields[1]; int actions = int.Parse(fields[2]); if (userStatistics.ContainsKey(user)) { List<MonthStat> stats = userStatistics[user]; stats.Add(new MonthStat(currentMonth, actions)); } } } } currentMonth = currentMonth.AddMonths(1); } using (StreamWriter sw = new StreamWriter("output.txt", false)) { sw.WriteLine("== Статистика =="); for (int year = DateTime.Today.Year; year >= 2008; --year) { DateTime currentYear = new DateTime(year, 1, 1); List<UserStat> userStats = new List<UserStat>(); foreach (var user in userStatistics) { var stats = user.Value.Where(s => (s.Month >= currentYear && s.Month < currentYear.AddYears(1))); UserStat userStat = new UserStat(user.Key, stats); userStat.enterDate = user.Value.Where(s => s.Actions >= 1000).Min(s => s.Month); userStat.ActionsBefore = user.Value.Where(s => s.Month < currentYear).Sum(s => s.Actions); userStat.Max = user.Value.Max(s => s.Actions); if (stats.Count() > 0 && userStat.enterDate.Year <= year) { userStats.Add(userStat); } } userStats.Sort(CompareUserStat); sw.WriteLine("\n=== {0} ===", currentYear.Year); sw.WriteLine("{| class=\"wikitable sortable\""); sw.Write("! № !! Участник"); currentMonth = currentYear; while (currentMonth < currentYear.AddYears(1)) { sw.Write(" !! " + currentMonth.ToString("MMM yy")); currentMonth = currentMonth.AddMonths(1); } sw.Write(" !! За {0} !! На конец {0} ", currentYear.Year); sw.WriteLine(); for (int index = 0; index < userStats.Count; ++index) { sw.WriteLine("|-"); sw.WriteLine(userStats[index].IsBot ? "! Бот" : string.Format("! {0}", index + 1)); sw.Write(string.Format("| {0}", userStats[index].Name)); int max = userStats[index].Stat.Max(s => s.Actions); currentMonth = currentYear; int totalActions = 0; while (currentMonth < currentYear.AddYears(1)) { int actions = 0; foreach (var item in userStats[index].Stat) { if (item.Month == currentMonth) { actions = item.Actions; break; } } if (actions != userStats[index].Max) { sw.Write(" || " + actions); } else { sw.Write(string.Format(" || '''{0}'''", actions)); } totalActions += actions; currentMonth = currentMonth.AddMonths(1); } sw.Write(string.Format(" || {0}", totalActions)); sw.Write(string.Format(" || {0}", totalActions + userStats[index].ActionsBefore)); sw.WriteLine(); } sw.WriteLine("|}"); } } currentMonth = new DateTime(now.Year, now.Month, 1).AddMonths(-1); Console.Out.WriteLine("Updating the wiki page..."); using (TextReader sr = new StreamReader("output" + currentMonth.ToString("yyyy-MM") + ".txt")) { DateTime previousMonth = new DateTime(now.Year, now.Month, 1).AddMonths(-1); string text = sr.ReadToEnd(); string period = previousMonth.ToString("MMMM yyyy"); wiki.Save(previousMonth.ToString("Википедия:Проект:Патрулирование\\/Статистика\\/yyyy\\/MM"), text, "статистика патрулирования за " + period[0].ToString().ToLower() + period.Substring(1)); } Console.Out.WriteLine("Updating Википедия:Проект:Патрулирование/Статистика/1k+..."); using (TextReader sr = new StreamReader("output.txt")) { string text = sr.ReadToEnd(); wiki.SaveSection("Википедия:Проект:Патрулирование/Статистика/1k+", "1", text, "обновление"); } wiki.Save(currentMonth.ToString("Википедия:Проект:Патрулирование\\/Статистика\\/yyyy"), string.Format("#REDIRECT [[{0}]]", currentMonth.ToString("Википедия:Проект:Патрулирование\\/Статистика\\/yyyy\\/MM")), "обновление"); Console.Out.WriteLine("Done."); wiki.Logout(); }