public static void Save() { string serverFolder = Server.GetServerFolder("cfg"); string contents1 = ""; foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Banned)) { if (!(user.notes == "EAC")) { contents1 = contents1 + "banid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n"; } } File.WriteAllText(serverFolder + "/bans.cfg", contents1); string contents2 = ""; foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner)) { contents2 = contents2 + "ownerid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n"; } foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator)) { contents2 = contents2 + "moderatorid " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\r\n"; } File.WriteAllText(serverFolder + "/users.cfg", contents2); }
private void RemoveAllCommand(ConsoleSystem.Arg args) { var bannedPlayers = new HashSet <ulong>(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Select(x => x.steamid)); ServerMgr.Instance.StartCoroutine(Delete(BaseNetworkable.serverEntities, bannedPlayers)); args.ReplyWith($"Started to remove entities belonging to banned players"); }
public static string BanListString(bool bHeader = false) { IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned); string str = ""; if (bHeader) { if (all.Count <ServerUsers.User>() == 0) { return("ID filter list: empty\n"); } if (all.Count <ServerUsers.User>() != 1) { int num = all.Count <ServerUsers.User>(); str = string.Concat("ID filter list: ", num.ToString(), " entries\n"); } else { str = "ID filter list: 1 entry\n"; } } int num1 = 1; foreach (ServerUsers.User user in all) { str = string.Concat(new string[] { str, num1.ToString(), " ", user.steamid.ToString(), " : permanent\n" }); num1++; } return(str); }
public static void Save() { string serverFolder = Server.GetServerFolder("cfg"); string str = ""; foreach (ServerUsers.User all in ServerUsers.GetAll(ServerUsers.UserGroup.Banned)) { if (all.notes == "EAC") { continue; } str = string.Concat(new string[] { str, "banid ", all.steamid.ToString(), " ", all.username.QuoteSafe(), " ", all.notes.QuoteSafe(), "\r\n" }); } File.WriteAllText(string.Concat(serverFolder, "/bans.cfg"), str); string str1 = ""; foreach (ServerUsers.User user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner)) { str1 = string.Concat(new string[] { str1, "ownerid ", user.steamid.ToString(), " ", user.username.QuoteSafe(), " ", user.notes.QuoteSafe(), "\r\n" }); } foreach (ServerUsers.User all1 in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator)) { str1 = string.Concat(new string[] { str1, "moderatorid ", all1.steamid.ToString(), " ", all1.username.QuoteSafe(), " ", all1.notes.QuoteSafe(), "\r\n" }); } File.WriteAllText(string.Concat(serverFolder, "/users.cfg"), str1); }
void ReadBansTest(ConsoleSystem.Arg arg) { if (!arg.IsAdmin) { return; } int result = banDB.Query($"SELECT * FROM {TableName}").Count; Puts($"Database: {result} Server: {ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Count()}"); }
public static string BanListStringEx() { string str = ""; int num = 1; foreach (ServerUsers.User all in ServerUsers.GetAll(ServerUsers.UserGroup.Banned)) { str = string.Concat(new string[] { str, num.ToString(), " ", all.steamid.ToString(), " ", all.username.QuoteSafe(), " ", all.notes.QuoteSafe(), "\n" }); num++; } return(str); }
public static string BanListStringEx() { IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned); string str = ""; int num = 1; foreach (ServerUsers.User user in all) { str = str + num.ToString() + " " + user.steamid.ToString() + " " + StringExtensions.QuoteSafe(user.username) + " " + StringExtensions.QuoteSafe(user.notes) + "\n"; ++num; } return(str); }
void ClearLocalBans(ConsoleSystem.Arg arg) { if (!arg.IsAdmin) { return; } LoadingServerUsers = true; foreach (var ban in ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToList()) { ServerUsers.Remove(ban.steamid); } LoadingServerUsers = false; Puts($"Cleared Server Bans"); }
private IEnumerator SaveBansToDatabase() { var bans = ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToList(); yield return(null); //Gotta have that debug message show when you first load the plguin Puts($"Starting To Push {bans.Count} Bans To Database"); foreach (var user in bans) { UpdateUserGroup(user.steamid, user.group, user.username, user.notes); yield return(null); } Puts("Finished Saving All Bans To The Database"); yield return(null); }
/// <summary> /// Retrieve the list of banned users /// </summary> /// <returns></returns> private List <BannedPlayer> GetBannedUserList() { #if RUST IEnumerable <ServerUsers.User> users = ServerUsers.GetAll(ServerUsers.UserGroup.Banned).OrderBy(u => u.username).ThenBy(u => u.steamid); #else IEnumerable <IPlayer> users = players.All.Where(player => { return(player.IsBanned); }).OrderBy(u => u.Name).ThenBy(u => u.Id); #endif LogDebug($"GetBannedUserList > Retrieved the banned user list, users.Count = {users.Count()}"); return(( from user in users select new BannedPlayer { #if RUST Id = user.steamid.ToString(), Name = user.username, Reason = user.notes #else Id = user.Id, Name = user.Name, Reason = "Synched ban" #endif }
public static string BanListString(bool bHeader = false) { IEnumerable <ServerUsers.User> all = ServerUsers.GetAll(ServerUsers.UserGroup.Banned); string str = ""; if (bHeader) { if (all.Count <ServerUsers.User>() == 0) { return("ID filter list: empty\n"); } str = all.Count <ServerUsers.User>() != 1 ? "ID filter list: " + all.Count <ServerUsers.User>().ToString() + " entries\n" : "ID filter list: 1 entry\n"; } int num = 1; foreach (ServerUsers.User user in all) { str = str + num.ToString() + " " + user.steamid.ToString() + " : permanent\n"; ++num; } return(str); }
private void PushBansToServer() { var bans = new List <PlayerBan>(BansToSend); bans.AddRange(UnnamedBans.Where(x => UsernameValid(x))); UnnamedBans.RemoveAll(x => UsernameValid(x)); bans.AddRange(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Where(x => !Settings.Instance.databaseBans.ContainsKey(x.steamid)).Select(x => new PlayerBan(x))); if (bans.Count() <= 0) { Puts("All bans have been synced with the database."); return; } var query = string.Format(MySqlConstants.ADD_BAN_TO_DATABASE, Settings.Instance.DatabaseName, Settings.Instance.TableName, string.Join(",", bans.Select(x => $"('{x.SteamID}','{x.Username}','{x.Reason.Replace(";", "").Replace("'", "")}')").ToArray()) ); Puts(query); try { PerformDatabaseQuery(query, (responseRows) => { Settings.Instance.PushedAllLocalBansToDatabase = true; Puts($"Bans pushed to the database"); }); } catch { Puts("PushBansToServer() SQL Query failed!"); Puts(query); timer.In(10f, () => { PushBansToServer(); }); } Puts($"Started to send {bans.Count()} bans to database!"); }
void AddAuths(int level, IPlayer adder = null, IPlayer player = null, bool singleAdd = false) { string lvl = Convert.ToString(level); if (singleAdd && player != null) { if (!AuthList(lvl).Contains(player.Id)) { if (IsMod(player.Id)) { ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.None, null, null); if (logAdding) { Log(logFilename, Lang("Log Removed", null, player.Id, Lang("Auth 1"))); } } if (IsOwner(player.Id)) { ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.None, null, null); if (logAdding) { Log(logFilename, Lang("Log Removed", null, player.Id, Lang("Auth 2"))); } } ServerUsers.Save(); return; } if (IsMod(player.Id) || IsOwner(player.Id)) { return; } if (level == 1 && !IsMod(player.Id)) { ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.Moderator, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty)); if (logAdding) { Log(logFilename, Lang("Log Added", null, player.Id, Lang("Auth 1"))); } } if (level == 2 || !IsOwner(player.Id)) { ServerUsers.Set(Convert.ToUInt64(player.Id), ServerUsers.UserGroup.Owner, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty)); if (logAdding) { Log(logFilename, Lang("Log Added", null, player.Id, Lang("Auth 2"))); } } ServerUsers.Save(); if (addingMessage) { Puts(Lang($"Console Message", null, player.Id, lvl)); } if (adder != null) { adder.Reply(Lang($"Added Message", adder.Id, player.Id, Lang($"Auth {lvl}"))); } if (player != null) { timer.Once(5f, () => { player.Reply(Lang($"Given Auth Level", player.Id, lvl)); }); } return; } if (removeUnlisted) { //int times = Members(1); foreach (var member in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator)) { if (!AuthList("1").Contains(member.steamid.ToString())) { timer.Once(0.01f, () => { ServerUsers.Set(member.steamid, ServerUsers.UserGroup.None, null, null); ServerUsers.Save(); if (logAdding) { Log(logFilename, Lang("Log Removed", null, member.steamid.ToString(), Lang("Auth 1"))); } if (addingMessage) { Puts(Lang($"Console Message Removal", null, member.steamid.ToString(), member.group.ToString())); } if (adder != null) { adder.Reply(Lang($"Removed Message", adder.Id, member.steamid.ToString(), member.group.ToString())); } }); } } foreach (var member in ServerUsers.GetAll(ServerUsers.UserGroup.Owner)) { if (!AuthList("2").Contains(member.steamid.ToString())) { timer.Once(0.01f, () => { ServerUsers.Set(member.steamid, ServerUsers.UserGroup.None, null, null); ServerUsers.Save(); if (logAdding) { Log(logFilename, Lang("Log Removed", null, member.steamid.ToString(), Lang("Auth 2"))); } if (addingMessage) { Puts(Lang($"Console Message Removal", null, member.steamid.ToString(), member.group.ToString())); } if (adder != null) { adder.Reply(Lang($"Removed Message", adder.Id, member.steamid.ToString(), member.group.ToString())); } }); } } } foreach (string ID in Config["Authentication List", $"Auth Level {lvl}"] as List <object> ) { if (string.IsNullOrEmpty(ID)) { return; } if (!ID.IsSteamId()) { PrintWarning(Lang("Not SteamId", null, ID)); return; } if (level == 1 && AuthList(lvl).Contains(ID) && !IsMod(ID)) { if (adder != null && !IsMod(ID) || !IsOwner(ID)) { adder.Reply(Lang($"Added Message", adder.Id, ID, Lang($"Auth {lvl}", adder.Id))); } if (addingMessage && !IsMod(ID) || !IsOwner(ID)) { Puts(Lang($"Console Message", null, ID, lvl)); } ServerUsers.Set(Convert.ToUInt64(ID), ServerUsers.UserGroup.Moderator, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty)); if (logAdding) { Log(logFilename, Lang("Log Added", null, ID, Lang("Auth 1"))); } } if (level == 2 && AuthList(lvl).Contains(ID) && !IsOwner(ID)) { if (adder != null && !IsMod(ID) || !IsOwner(ID)) { adder.Reply(Lang($"Added Message", adder.Id, ID, Lang($"Auth {lvl}", adder.Id))); } if (addingMessage && !IsMod(ID) || !IsOwner(ID)) { Puts(Lang($"Console Message", null, ID, lvl)); } ServerUsers.Set(Convert.ToUInt64(ID), ServerUsers.UserGroup.Owner, (player != null ? player.Name : string.Empty), (adder != null ? Lang("Adder Message", adder.Id, adder.Name) : string.Empty)); if (logAdding) { Log(logFilename, Lang("Log Added", null, ID, Lang("Auth 2"))); } } ServerUsers.Save(); } }
private void OnServerInitialized() { if (!permission.PermissionExists(excludePermission)) { permission.RegisterPermission(excludePermission, this); } playerConnections = Interface.GetMod().DataFileSystem.ReadObject <StoredData>(this.Title); foreach (BasePlayer player in BasePlayer.activePlayerList) { UpdatePlayer(player); } StoredData cleanedConnections = new StoredData(); foreach (var pair in playerConnections.PlayerInfo) { if (UnixTimeStampUTC() - pair.Value.LastTime < removeRecordAfterDays * 86400) { cleanedConnections.PlayerInfo.Add(pair.Key, pair.Value); } //cleanedConnections.PlayerInfo[pair.Key].LastDateTime = UnixTimeStampToDateTime(pair.Value.LastTime).ToString(); } playerConnections = cleanedConnections; SaveData(); cleanedConnections = null; if (excludeGroupOwner) { foreach (var user in ServerUsers.GetAll(ServerUsers.UserGroup.Owner).ToList()) { groupOwner.Add(user.steamid); } } if (excludeGroupModerator) { foreach (var user in ServerUsers.GetAll(ServerUsers.UserGroup.Moderator).ToList()) { groupModerator.Add(user.steamid); } } NextTick(() => { TimeSpan its = TimeSpan.FromSeconds(inactiveAfter); TimeSpan ts = TimeSpan.FromSeconds(timerJob); if (timerEnabled) { Puts($"Purge will be executed every: {ts.TotalHours.ToString("0")} hours ({ts.Days.ToString("0")}D | {ts.Hours.ToString("0")}H | {ts.Minutes.ToString("0")}M | {ts.Seconds.ToString("0")}S)"); Puts($"Players become inactive after: {its.TotalDays.ToString("0")} days ({its.Days.ToString("0")}D | {its.Hours.ToString("0")}H | {its.Minutes.ToString("0")}M | {its.Seconds.ToString("0")}S)"); timer.Every(timerJob, () => MainTimer(false)); } else { Puts("Timer function disabled by config. Purge needs to be started by command 'autopurge.run'"); } if (Clans && useClansIO) { clansEnabled = true; Puts("Plugin 'Clans' found - Clan support activated"); } if (!Clans && useClansIO) { PrintWarning("Plugin 'Clans' not found - Clan support not active"); } if (Friends && useFriendsApi) { friendsEnabled = true; Puts("Plugin 'Friends' found - Friends support activated"); } if (!Friends && useFriendsApi) { PrintWarning("Plugin 'Friends' not found - Friends support not active"); } if (testMode) { PrintWarning("Running in TestMode. Nothing will be purged"); } if (purgeOnStart) { MainTimer(true); } }); }
public static ServerUsers.User[] Bans() { return(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).ToArray <ServerUsers.User>()); }
private void PullBansFromServer() { var query = string.Format(MySqlConstants.SELECT_ALL_BANS, Settings.Instance.DatabaseName, Settings.Instance.TableName); PerformDatabaseQuery(query, (responseRows) => { if (responseRows == null) { return; } HashSet <ulong> localBans = new HashSet <ulong>(ServerUsers.GetAll(ServerUsers.UserGroup.Banned).Select(x => x.steamid)); Settings.Instance.databaseBans.Clear(); if (responseRows.Any()) { //Add all database bans to local file foreach (var row in responseRows) { var playerID = row["steamid"].ToString(); if (string.IsNullOrEmpty(playerID)) { continue; } ulong steamID; if (!ulong.TryParse(playerID, out steamID)) { return; } var username = row["name"].ToString(); var reason = row["reason"].ToString(); Settings.Instance.databaseBans.Add(steamID, new PlayerBan(steamID, reason)); if (!UsernameValid(steamID, username)) { UnnamedBans.Add(new PlayerBan(steamID, reason)); } if (localBans.Remove(steamID)) //No need to reban people { continue; } ServerUsers.Set(steamID, ServerUsers.UserGroup.Banned, playerID, reason); BasePlayer player = BasePlayer.FindByID(steamID); if (player != null) { player.Kick("Bans share across servers :)"); } } //Dont want to delete local ban list accidently foreach (var player in localBans) //Unban users who aren't found on the database { ServerUsers.Remove(player); } if (UnnamedBans.Count > 0) { timer.In(10f, UpdateDatabaseUsernames); } Puts($"Updated ban list - {responseRows.Count} bans pulled from database"); Settings.Save(); } }); }