/// <summary> /// Loads the bans. /// </summary> /// <param name="dbClient">The database client.</param> internal void LoadBans(IQueryAdapter dbClient) { _bannedUsernames.Clear(); _bannedIPs.Clear(); _bannedMachines.Clear(); dbClient.SetQuery("SELECT bantype,value,reason,expire FROM users_bans"); var table = dbClient.GetTable(); double num = Azure.GetUnixTimeStamp(); foreach (DataRow dataRow in table.Rows) { var text = (string) dataRow["value"]; var reasonMessage = (string) dataRow["reason"]; var num2 = (double) dataRow["expire"]; var a = (string) dataRow["bantype"]; ModerationBanType type; switch (a) { case "user": type = ModerationBanType.UserName; break; case "ip": type = ModerationBanType.Ip; break; default: type = ModerationBanType.Machine; break; } var moderationBan = new ModerationBan(type, text, reasonMessage, num2); if (!(num2 > num)) continue; switch (moderationBan.Type) { case ModerationBanType.UserName: if (!_bannedUsernames.Contains(text)) _bannedUsernames.Add(text, moderationBan); break; case ModerationBanType.Ip: if (!_bannedIPs.Contains(text)) _bannedIPs.Add(text, moderationBan); break; default: if (!_bannedMachines.ContainsKey(text)) _bannedMachines.Add(text, moderationBan); break; } } }
/// <summary> /// Bans the user. /// </summary> /// <param name="client">The client.</param> /// <param name="moderator">The moderator.</param> /// <param name="lengthSeconds">The length seconds.</param> /// <param name="reason">The reason.</param> /// <param name="ipBan">if set to <c>true</c> [ip ban].</param> /// <param name="machine">if set to <c>true</c> [machine].</param> internal void BanUser(GameClient client, string moderator, double lengthSeconds, string reason, bool ipBan, bool machine) { var type = ModerationBanType.UserName; var text = client.GetHabbo().UserName; var typeStr = "user"; var num = AzureEmulator.GetUnixTimeStamp() + lengthSeconds; if (ipBan) { type = ModerationBanType.Ip; using (var queryReactor = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { queryReactor.SetQuery("SELECT ip_last FROM users WHERE username = @name LIMIT 1"); queryReactor.AddParameter("name", text); text = queryReactor.GetString(); } typeStr = "ip"; } if (machine) { type = ModerationBanType.Machine; typeStr = "machine"; text = client.MachineId; } var moderationBan = new ModerationBan(type, text, reason, num); switch (moderationBan.Type) { case ModerationBanType.Ip: if (_bannedIPs.Contains(text)) _bannedIPs[text] = moderationBan; else _bannedIPs.Add(text, moderationBan); break; case ModerationBanType.Machine: if (_bannedMachines.ContainsKey(text)) _bannedMachines[text] = moderationBan; else _bannedMachines.Add(text, moderationBan); break; default: if (_bannedUsernames.Contains(text)) _bannedUsernames[text] = moderationBan; else _bannedUsernames.Add(text, moderationBan); break; } using (var queryreactor2 = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { queryreactor2.SetQuery( "INSERT INTO users_bans (bantype,value,reason,expire,added_by,added_date) VALUES (@rawvar,@var,@reason,@num,@mod,@time)"); queryreactor2.AddParameter("rawvar", typeStr); queryreactor2.AddParameter("var", text); queryreactor2.AddParameter("reason", reason); queryreactor2.AddParameter("num", num); queryreactor2.AddParameter("mod", moderator); queryreactor2.AddParameter("time", DateTime.Now.ToLongDateString()); queryreactor2.RunQuery(); } if (ipBan) { DataTable dataTable; using (var queryreactor3 = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { queryreactor3.SetQuery("SELECT id FROM users WHERE ip_last = @var"); queryreactor3.AddParameter("var", text); dataTable = queryreactor3.GetTable(); } if (dataTable != null) { using (var queryreactor4 = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { foreach (DataRow dataRow in dataTable.Rows) { queryreactor4.RunFastQuery( string.Format("UPDATE users_info SET bans = bans + 1 WHERE user_id = {0}", Convert.ToUInt32(dataRow["id"]))); } } } BanUser(client, moderator, lengthSeconds, reason, false, false); return; } using (var queryreactor5 = AzureEmulator.GetDatabaseManager().GetQueryReactor()) { queryreactor5.RunFastQuery(string.Format("UPDATE users_info SET bans = bans + 1 WHERE user_id = {0}", client.GetHabbo().Id)); } client.Disconnect("banned"); }