private static void Orb_Command_Maintenence_Group_Users_Rank_Common_Method(Server.NetObject NetObj, Database.UserDB.User TargetUser, Database.GroupDB.Group TargetGroup, Database.GroupDB.Group.Rank TargetRank, string Reason) { if (TargetUser.Groups.First(x => x.Group == TargetGroup).Rank == TargetRank) { NetObj.ClientObject.SendMessage("User: \"" + TargetUser.Name + "\" is already Rank \"" + TargetRank.Name + "\" in Group: \"" + TargetGroup.Name + "\"."); return; } TargetUser.Groups.First(x => x.Group == TargetGroup).PreviousRank = TargetUser.Groups.First(x => x.Group == TargetGroup).Rank; TargetUser.Groups.First(x => x.Group == TargetGroup).Rank = TargetRank; TargetUser.Groups.First(x => x.Group == TargetGroup).RankDate = DateTime.Now; TargetUser.Groups.First(x => x.Group == TargetGroup).RankedBy = NetObj.UserObject; TargetUser.Groups.First(x => x.Group == TargetGroup).RankReason = Reason; TargetUser.SaveAll(); string RankType; if (TargetUser.Groups.First(x => x.Group == TargetGroup).Group.Ranks.IndexOf(TargetUser.Groups.First(y => y.Group == TargetGroup).PreviousRank) < TargetUser.Groups.First(a => a.Group == TargetGroup).Group.Ranks.IndexOf(TargetUser.Groups.First(y => y.Group == TargetGroup).Rank)) { //Complex Lamba Much? This just menas if previous rank was lower then current rank... RankType = "Promoted"; } else { RankType = "Demoted"; } Server.EmptyClientList.Include(TargetUser).SendMessage("You were " + RankType + " from Rank: \"" + TargetUser.Groups.First(x => x.Group == TargetGroup).PreviousRank.Name + "\" to Rank: \"" + TargetUser.Groups.First(x => x.Group == TargetGroup).Rank.Name + "\" in Group: \"" + TargetGroup.Name + "\" by \"" + NetObj.UserObject.Name + "\"."); Server.AllClients.Except(TargetUser).SendMessage("User: \"" + TargetUser.Name + "\" was " + RankType + " from Rank: \"" + TargetUser.Groups.First(x => x.Group == TargetGroup).PreviousRank.Name + "\" to Rank: \"" + TargetUser.Groups.First(x => x.Group == TargetGroup).Rank.Name + "\" in Group: \"" + TargetGroup.Name + "\" by \"" + NetObj.UserObject.Name + "\"."); if (Reason.Length > 0) { Server.EmptyClientList.Include(TargetUser).SendMessage("Reason: \"" + Reason + "\"."); Server.AllClients.Except(TargetUser).SendMessage("Reason: \"" + Reason + "\"."); } return; }
public static bool Orb_Command_Maintenence_Group_Users_Remove_Method(Server.NetObject NetObj, CommandReader Command) { Database.UserDB.User TargetUser = Database.UserDB.Nobody; Database.GroupDB.Group TargetGroup = Database.GroupDB.NoGroup; #region FindTargetUser if (Command._CmdArguments.Count() < 1) { NetObj.ClientObject.SendMessage("No user specified to change group ownership to."); return(false); } if (Command._CmdArguments[0] == "-") { if (NetObj.CommandHandling.PreviousUser == Database.UserDB.Nobody) { NetObj.ClientObject.SendMessage("No previous users iterated over."); return(false); } else { TargetUser = NetObj.CommandHandling.PreviousUser; } } else { if (Database.UserDB.Find(Command._CmdArguments[0]) != Database.UserDB.Nobody) { TargetUser = Database.UserDB.Find(Command._CmdArguments[0]); } else { NetObj.ClientObject.SendMessage("User not found: \"" + Command._CmdArguments[0] + "\"."); return(false); } } #endregion #region FindTargetGroup if (Command._CmdElements()[1] == "-") { if (NetObj.CommandHandling.PreviousGroup == Database.GroupDB.NoGroup) { NetObj.ClientObject.SendMessage("No previous groups iterated over."); return(false); } else { TargetGroup = NetObj.CommandHandling.PreviousGroup; } } else { if (Database.GroupDB.FindGroup(Command._CmdElements()[1]) == Database.GroupDB.NoGroup) { NetObj.ClientObject.SendMessage("Group not found: \"" + Command._CmdElements()[1] + "\"."); return(false); } TargetGroup = Database.GroupDB.FindGroup(Command._CmdElements()[1]); } #endregion #region SuperUser Override if (NetObj.UserObject == Database.UserDB.SuperUser || NetObj.UserObject == TargetGroup.Founder) { //continue } #endregion #region Standard Testing else { if (NetObj.UserObject.Groups.Select(x => x.Group).Contains(TargetGroup)) { //THIS User is a member of the group. (Required to be able to modify the group. Database.UserDB.User.GroupReference ThisGroupReference = NetObj.UserObject.Groups.Where(x => x.Group == TargetGroup).ToArray()[0]; if (ThisGroupReference.Rank.Permissions.Group_ManageMembers <= 0) { NetObj.ClientObject.SendMessage("Your rank does not have permission to manage group memebers in this group."); return(false); } if (ThisGroupReference.Rank.Permissions.Group_DemoteableRank < 0) //<0 No Member. { NetObj.ClientObject.SendMessage("You are not able to remove members from the group as you do not have permission to demote to the lowest rank in the group."); return(false); } //continue } else { NetObj.ClientObject.SendMessage("You need to be a member of the group yourself in order to remove members. (Group founders are excepted from this rule.)"); return(false); } } #endregion if (TargetGroup.Leavable == false) { NetObj.ClientObject.SendMessage("Failed to remove User: \"" + TargetUser.Name + "\" from Group: \"" + TargetGroup.Name + "\". The Group is set to un-leaveable."); return(false); } if (!(TargetUser.Groups.Select(x => x.Group).Contains(TargetGroup))) { NetObj.ClientObject.SendMessage("User: \"" + TargetUser.Name + "\" is already not a member of Group: \"" + TargetGroup.Name + "\"."); return(false); } TargetUser.RemoveFromGroup(TargetGroup); TargetUser.SaveAll(); Server.EmptyClientList.Include(TargetUser).SendMessage("You were removed from Group: \"" + TargetGroup.Name + "\" by \"" + NetObj.UserObject.Name + "\"."); Server.AllClients.Except(TargetUser).SendMessage("User: \"" + TargetUser.Name + "\" was removed from Group: \"" + TargetGroup.Name + "\" by \"" + NetObj.UserObject.Name + "\"."); return(true); }
public static bool Orb_Command_Moderation_User_Kick_Method(Server.NetObject NetObj, CommandReader Command) { Database.UserDB.User TargetUser = Database.UserDB.Nobody; string Reason = ""; #region FindTargetUser if (Command._CmdElements()[1] == "-") { if (NetObj.CommandHandling.PreviousUser == Database.UserDB.Nobody) { NetObj.ClientObject.SendMessage("No previous users iterated over."); return(false); } else { TargetUser = NetObj.CommandHandling.PreviousUser; } } else { if (Database.UserDB.Find(Command._CmdElements()[1]) != Database.UserDB.Nobody) { TargetUser = Database.UserDB.Find(Command._CmdElements()[1]); } else { NetObj.ClientObject.SendMessage("User not found: \"" + Command._CmdElements()[1] + "\"."); return(false); } } #endregion #region GetKickReason if (Command._CmdArguments.Count() < 1) { //Ban reason not given. } else { Reason = Command._CmdRawArguments; } #endregion #region SuperUser Override if (NetObj.UserObject == Database.UserDB.SuperUser || NetObj.UserObject.Can(Database.PermissionDB.Strings.Kick)) { //continue } else { NetObj.ClientObject.SendMessage("You do not have permission to kick users from the server."); return(false); } #endregion if (TargetUser == NetObj.UserObject) { NetObj.ClientObject.SendMessage("You are not able to kick yourself!"); return(false); } if (!Server.ClientList.Select(x => x.UserObject).Contains(TargetUser)) { NetObj.ClientObject.SendMessage("User: \"" + TargetUser.Name + "\" is not online."); return(false); } TargetUser.TimesKicked++; TargetUser.KickedBy = NetObj.UserObject; TargetUser.KickReason = Reason; TargetUser.SaveAll(); Server.EmptyClientList.Include(TargetUser).SendMessage("&cYou have been KICKED by \"" + NetObj.UserObject.Name + "\"."); Server.AllClients.Except(TargetUser).SendMessage("&cUser: \"" + TargetUser.Name + "\" was KICKED by \"" + NetObj.UserObject.Name + "\"."); if (TargetUser.KickReason != "") { Server.AllClients.SendMessage("&cKick Reason: \"" + TargetUser.KickReason + "\"."); } foreach (Server.NetObject ThisClient in Server.ClientList.Where(x => x.UserObject == TargetUser).ToArray()) { ThisClient.Close(); //Kicks the target user. } return(true); }
static void Main(string[] args) { //PRE OPERATION EVENTS try { Console.Title = "Orb for YSFlight"; Console.CursorVisible = false; Server.ConsoleMode = true; Logger.Console.LockInput(true); } catch { Database.Settings.Set(Database.Settings.Strings.GUIMode, true); Server.ConsoleMode = false; //Console is not enabled } //LOAD SETTINGS Database.Settings.LoadAll(); //GUI LOADING #region Disable Console if (Database.Settings.GUIMode == true) { var handle = GetConsoleWindow(); // Hide ShowWindow(handle, SW_HIDE); Server.ConsoleMode = false; // Show //ShowWindow(handle, SW_SHOW); } #endregion //Database.Settings.Set(Database.Settings.Strings.GUIMode, true); //Database.Settings.Set(Database.Settings.Strings.ProxyMode, true); Logger.Console.Initialise(); //Logger.Console.WriteLine(DateTime.Now.ToString()); ServerGUI.Start(); ServerGUI.LockInput(true); //DATABASE LOADING Logger.Log.Silent = false; Logger.Log.SystemMessage("LOADING DATABASE"); Logger.Console.WriteLine("&9LOADING DATABASE..."); Logger.Log.SystemMessage("Loading Salt."); Logger.Console.WriteLine("&5 Loading Salt..."); Database.LoadSalt(); Logger.Log.SystemMessage("Loading Settings."); Logger.Console.WriteLine("&5 Loading Settings..."); Database.Settings.LoadAll(); Database.Security.StartLock.Run(); Logger.Log.SystemMessage("Loading Groups, Ranks, and their Permissions."); Logger.Console.WriteLine("&5 Loading Groups, Ranks, and their Permissions...."); Database.GroupDB.LoadAll(); Logger.Log.SystemMessage("Loading Users, Group References and their Permissions."); Logger.Console.WriteLine("&5 Loading Users, Group References and their Permissions..."); Database.UserDB.LoadAll(); Logger.Console.WriteLine("&5 Loading Commands."); Commands.LoadAll(); if (Database.NewSaltGenerated) { foreach (Database.UserDB.User ThisUser in Database.UserDB.List) { ThisUser.Password = ""; ThisUser.UsePassword = false; ThisUser.SaveAll(); } if (Database.UserDB.List.Count() > 0) { Logger.Console.WriteLine("&d Because new Salt was generated, all passwords for all users have been reset!"); } else { if (Database.UserDB.List.Count() == 0 && Database.GroupDB.List.Count() == 0) { #region Create Defaults //No Users or Groups in the database, and no orb.dll? sound like a first launch to me! //Create The ADMIN Database.UserDB.User AdminUser = Database.UserDB.New("Admin"); Database.UserDB.User ModUser = Database.UserDB.New("Mod"); Database.GroupDB.Group ServerGroup = Database.GroupDB.New("SERVER"); Database.GroupDB.Group.Rank AdminRank = ServerGroup.NewRank("ADMIN"); Database.GroupDB.Group.Rank ModRank = ServerGroup.NewRank("MOD"); AdminRank.Permissions.MakeSuper(); ModRank.Permissions.MakeModerator(); Database.UserDB.User.GroupReference AdminUserGR = AdminUser.AddToGroup(ServerGroup); Database.UserDB.User.GroupReference ModUserGR = ModUser.AddToGroup(ServerGroup); AdminUserGR.Rank = AdminRank; ModUserGR.Rank = ModRank; AdminUser.GroupRepresented = ServerGroup; ModUser.GroupRepresented = ServerGroup; AdminUser.SaveAll(); ModUser.SaveAll(); ServerGroup.Founder = AdminUser; ServerGroup.SaveAll(); #endregion Logger.Console.WriteLine("&d Default Groups/Users instated!"); Version.WriteNewToOrbHelpFile(); } } } Logger.Console.WriteLine("&5 Loading Complete!"); Utilities.WelcomeFile.WriteDefault(); //Thread.Sleep(5000); //Logger.Console.WriteLine(DateTime.Now.ToString()); //DISPLAY DATABASE RESULTS //Logger.Console.Write(Utilities.IO.GetAllGroupsRanks()); //Logger.Console.WriteLine(); //Logger.Console.Write(Utilities.IO.GetAllUsersGroups()); //Logger.Console.WriteLine(); //Database.PermissionDB.PermissionsCore.CheckPermission(Database.UserDB.Find("BAWB"), "Default"); //SAVE DATABASE //Database.GroupDB.SaveAll(); //Database.UserDB.SaveAll(); //Database.Settings.SaveAll(); //RUN SERVER //ServerGUI.ClearLog(); //Logger.Console.WriteLine("&bLAGSWITCH100SECONDSIMPLEMENTED"); //Thread.Sleep(100000); #if !DEBUG Logger.Log.SystemMessage("STARTING SERVER"); Logger.Console.WriteLine("&9STARTING SERVER."); Thread.Sleep(1000); Logger.Console.ClearLine(); Logger.Console.WriteLine("&9STARTING SERVER.."); Thread.Sleep(1000); Logger.Console.ClearLine(); Logger.Console.WriteLine("&9STARTING SERVER..."); Thread.Sleep(1000); Logger.Console.ClearLine(); //Thread.Sleep(50000); #endif Logger.Console.Clear(); //Logger.Console.WriteLine(Database.Settings.ServerIP.ToString()); //Logger.Console.WriteLine(Database.Settings.ServerPort.ToString()); Server.Start(); //SHUTDOWN //Server.Shutdown.MasterClose("Test Complete", 10); }
public static bool Orb_Command_Moderation_User_UnMute_Method(Server.NetObject NetObj, CommandReader Command) { Database.UserDB.User TargetUser = Database.UserDB.Nobody; string Reason = ""; #region FindTargetUser if (Command._CmdElements()[1] == "-") { if (NetObj.CommandHandling.PreviousUser == Database.UserDB.Nobody) { NetObj.ClientObject.SendMessage("No previous users iterated over."); return(false); } else { TargetUser = NetObj.CommandHandling.PreviousUser; } } else { if (Database.UserDB.Find(Command._CmdElements()[1]) != Database.UserDB.Nobody) { TargetUser = Database.UserDB.Find(Command._CmdElements()[1]); } else { NetObj.ClientObject.SendMessage("User not found: \"" + Command._CmdElements()[1] + "\"."); return(false); } } #endregion #region GetMuteReason if (Command._CmdArguments.Count() < 1) { //Mute reason not given. } else { Reason = Command._CmdArguments[0]; } #endregion #region SuperUser Override if (NetObj.UserObject == Database.UserDB.SuperUser || NetObj.UserObject.Can(Database.PermissionDB.Strings.Mute)) { //continue } else { NetObj.ClientObject.SendMessage("You do not have permission to unmute users on the server."); return(false); } #endregion if (TargetUser == NetObj.UserObject) { NetObj.ClientObject.SendMessage("You are not able to unmute yourself!"); return(false); } if (!TargetUser.Muted) { NetObj.ClientObject.SendMessage("User: \"" + TargetUser.Name + "\" is not muted."); return(false); } TargetUser.MuteExpires = new DateTime(); TargetUser.Muted = false; TargetUser.MutedBy = NetObj.UserObject; TargetUser.MuteReason = Reason; TargetUser.SaveAll(); Server.EmptyClientList.Include(TargetUser).SendMessage("&eYou have been &aUNMUTED&e by \"" + NetObj.UserObject.Name + "\"."); Server.AllClients.Except(TargetUser).SendMessage("&eUser: \"" + TargetUser.Name + "\" was &aUNMUTED&e by \"" + NetObj.UserObject.Name + "\"."); if (TargetUser.MuteReason != "") { Server.AllClients.SendMessage("&aUnMute &eReason: \"" + TargetUser.MuteReason + "\"."); } return(true); }
public static bool Orb_Command_Moderation_User_Mute_Method(Server.NetObject NetObj, CommandReader Command) { Database.UserDB.User TargetUser = Database.UserDB.Nobody; DateTime MuteEnds = new DateTime(); TimeSpan Duration = new TimeSpan(); string Reason = ""; #region FindTargetUser if (Command._CmdElements()[1] == "-") { if (NetObj.CommandHandling.PreviousUser == Database.UserDB.Nobody) { NetObj.ClientObject.SendMessage("No previous users iterated over."); return(false); } else { TargetUser = NetObj.CommandHandling.PreviousUser; } } else { if (Database.UserDB.Find(Command._CmdElements()[1]) != Database.UserDB.Nobody) { TargetUser = Database.UserDB.Find(Command._CmdElements()[1]); } else { NetObj.ClientObject.SendMessage("User not found: \"" + Command._CmdElements()[1] + "\"."); return(false); } } #endregion #region GetMutexpiry if (Command._CmdArguments.Count() < 1) { //Mute is Permanent by default } else { if (Command._CmdArguments[0].ToUpperInvariant() == "INF" || Command._CmdArguments[0].ToUpperInvariant() == "INFINITE" || Command._CmdArguments[0].ToUpperInvariant() == "INFINITY" || Command._CmdArguments[0].ToUpperInvariant() == "0" || Command._CmdArguments[0].ToUpperInvariant() == "-" || Command._CmdArguments[0].ToUpperInvariant() == "FOREVER" || Command._CmdArguments[0].ToUpperInvariant() == "PERMANENT" || Command._CmdArguments[0].ToUpperInvariant() == "PERM" || Command._CmdArguments[0].ToUpperInvariant() == "!") { //New Date Time == Permanent Mute. //This is already set, we don't need to do anything. } else { if (!Utilities.DateTimeUtilities.TryParseMiniTimespan(Command._CmdArguments[0], out Duration)) { NetObj.ClientObject.SendMessage("Mute Duration Format Invalid. Acceptable Format/s: \"*w*d*h*m*s\" eg: \"1w2d5h3m2s\" or \"7w2m\" or even \"5s\"."); return(false); } MuteEnds = DateTime.Now + Duration; } } #endregion #region GetMuteReason if (Command._CmdArguments.Count() < 2) { //Mute reason not given. } else { Reason = Command._CmdRawArguments.Split(new string[] { " " }, 2, StringSplitOptions.None)[1]; } #endregion #region SuperUser Override if (NetObj.UserObject == Database.UserDB.SuperUser || NetObj.UserObject.Can(Database.PermissionDB.Strings.Mute)) { //continue } else { NetObj.ClientObject.SendMessage("You do not have permission to mute users on the server."); return(false); } #endregion if (DateTime.Now - TimeSpan.FromSeconds(30) > MuteEnds && MuteEnds != new DateTime()) { NetObj.ClientObject.SendMessage("MuteTime is in the past! Unable to mute the target!"); return(false); } if (TargetUser == NetObj.UserObject) { NetObj.ClientObject.SendMessage("You are not able to mute yourself!"); return(false); } if (TargetUser.Muted) { NetObj.ClientObject.SendMessage("User: \"" + TargetUser.Name + "\" is already muted."); return(false); } TargetUser.TimesMuted++; TargetUser.MuteExpires = MuteEnds; TargetUser.Muted = true; TargetUser.MutedBy = NetObj.UserObject; TargetUser.MuteReason = Reason; TargetUser.SaveAll(); if (TargetUser.MuteExpires == new DateTime()) { Server.EmptyClientList.Include(TargetUser).SendMessage("&cYou have been PERMANTENTLY MUTED by \"" + NetObj.UserObject.Name + "\"."); Server.AllClients.Except(TargetUser).SendMessage("&cUser: \"" + TargetUser.Name + "\" was PERMANTENTLY MUTED by \"" + NetObj.UserObject.Name + "\"."); if (TargetUser.MuteReason != "") { Server.AllClients.SendMessage("&cMute Reason: \"" + TargetUser.MuteReason + "\"."); } } else { Server.EmptyClientList.Include(TargetUser).SendMessage("&cYou have been MUTED by \"" + NetObj.UserObject.Name + "\" until " + Utilities.DateTimeUtilities.ToYearTimeDescending(Utilities.DateTimeUtilities.FormatDateTime(TargetUser.MuteExpires)) + "."); Server.AllClients.Except(TargetUser).SendMessage("&cUser: \"" + TargetUser.Name + "\" was MUTED by \"" + NetObj.UserObject.Name + "\" until " + Utilities.DateTimeUtilities.ToYearTimeDescending(Utilities.DateTimeUtilities.FormatDateTime(TargetUser.MuteExpires)) + "."); if (TargetUser.MuteReason != "") { Server.AllClients.SendMessage("&cMute Reason: \"" + TargetUser.MuteReason + "\"."); } } return(true); }