mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 04:32:50 -04:00
Tidy up Ban class, use unix timestamp for ban/unban time so now /baninfo is accurate to the second.
This commit is contained in:
parent
32652a833e
commit
c3eec844e1
@ -43,22 +43,24 @@ namespace MCGalaxy.Commands.Info {
|
|||||||
else if (ipBanned && banned) msg += " %Sand their IP are &CBANNED";
|
else if (ipBanned && banned) msg += " %Sand their IP are &CBANNED";
|
||||||
else msg += " %Sis not banned, but their IP is &CBANNED";
|
else msg += " %Sis not banned, but their IP is &CBANNED";
|
||||||
|
|
||||||
string[] data = Ban.GetBanData(plName);
|
string banner, reason, prevRank;
|
||||||
if (data != null && permaBanned) {
|
DateTime time;
|
||||||
string grpName = Group.GetColoredName(data[3]);
|
Ban.GetBanData(plName, out banner, out reason, out time, out prevRank);
|
||||||
|
if (banner != null && permaBanned) {
|
||||||
|
string grpName = Group.GetColoredName(prevRank);
|
||||||
msg += " %S(Former rank: " + grpName + "%S)";
|
msg += " %S(Former rank: " + grpName + "%S)";
|
||||||
}
|
}
|
||||||
Player.Message(p, msg);
|
Player.Message(p, msg);
|
||||||
DisplayTempbanDetails(p, plName);
|
DisplayTempbanDetails(p, plName);
|
||||||
|
|
||||||
if (data != null) {
|
if (banner != null) {
|
||||||
DisplayDetails(p, data, permaBanned ? "Banned" : "Last banned");
|
DisplayDetails(p, banner, reason, time, permaBanned ? "Banned" : "Last banned");
|
||||||
} else {
|
} else {
|
||||||
Player.Message(p, "No previous bans recorded for {0}%S.", colName);
|
Player.Message(p, "No previous bans recorded for {0}%S.", colName);
|
||||||
}
|
}
|
||||||
|
|
||||||
data = Ban.GetUnbanData(plName);
|
Ban.GetUnbanData(plName, out banner, out reason, out time);
|
||||||
DisplayDetails(p, data, permaBanned ? "Last unbanned" : "Unbanned");
|
DisplayDetails(p, banner, reason, time, permaBanned ? "Last unbanned" : "Unbanned");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DisplayTempbanDetails(Player p, string target) {
|
static void DisplayTempbanDetails(Player p, string target) {
|
||||||
@ -76,13 +78,13 @@ namespace MCGalaxy.Commands.Info {
|
|||||||
if (reason != "") Player.Message(p, "Reason: {0}", reason);
|
if (reason != "") Player.Message(p, "Reason: {0}", reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DisplayDetails(Player p, string[] data, string type) {
|
static void DisplayDetails(Player p, string banner, string reason, DateTime time, string type) {
|
||||||
if (data == null) return;
|
if (banner == null) return;
|
||||||
|
|
||||||
TimeSpan delta = GetDelta(data[2]);
|
TimeSpan delta = DateTime.UtcNow - time;
|
||||||
Player.Message(p, "{0} {1} ago by {2}",
|
Player.Message(p, "{0} {1} ago by {2}",
|
||||||
type, delta.Shorten(), GetName(p, data[0]));
|
type, delta.Shorten(), GetName(p, banner));
|
||||||
Player.Message(p, "Reason: {0}", data[1]);
|
Player.Message(p, "Reason: {0}", reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
static string GetName(Player p, string user) {
|
static string GetName(Player p, string user) {
|
||||||
@ -91,17 +93,6 @@ namespace MCGalaxy.Commands.Info {
|
|||||||
return PlayerInfo.GetColoredName(p, user);
|
return PlayerInfo.GetColoredName(p, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TimeSpan GetDelta(string data) {
|
|
||||||
data = data.Replace(",", "");
|
|
||||||
string[] date = data.SplitSpaces();
|
|
||||||
string[] minuteHour = date[5].Split(':');
|
|
||||||
|
|
||||||
int hour = int.Parse(minuteHour[0]), minute = int.Parse(minuteHour[1]);
|
|
||||||
int day = int.Parse(date[1]), month = int.Parse(date[2]), year = int.Parse(date[3]);
|
|
||||||
DateTime time = new DateTime(year, month, day, hour, minute, 0);
|
|
||||||
return DateTime.Now - time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
||||||
Player.Message(p, "%T/BanInfo [player]");
|
Player.Message(p, "%T/BanInfo [player]");
|
||||||
Player.Message(p, "%HOutputs information about current and/or previous ban/unban for that player.");
|
Player.Message(p, "%HOutputs information about current and/or previous ban/unban for that player.");
|
||||||
|
@ -165,10 +165,14 @@ namespace MCGalaxy.Core {
|
|||||||
p.Kick(null, ServerConfig.DefaultBanMessage, true);
|
p.Kick(null, ServerConfig.DefaultBanMessage, true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group.Permission == LevelPermission.Banned) {
|
if (group.Permission == LevelPermission.Banned) {
|
||||||
string[] data = Ban.GetBanData(p.name);
|
string banner, reason, prevRank;
|
||||||
if (data != null) {
|
DateTime time;
|
||||||
p.Kick(null, Ban.FormatBan(data[0], data[1]), true);
|
Ban.GetBanData(p.name, out banner, out reason, out time, out prevRank);
|
||||||
|
|
||||||
|
if (banner != null) {
|
||||||
|
p.Kick(null, "Banned by " + banner + ": " + reason, true);
|
||||||
} else {
|
} else {
|
||||||
p.Kick(null, ServerConfig.DefaultBanMessage, true);
|
p.Kick(null, ServerConfig.DefaultBanMessage, true);
|
||||||
}
|
}
|
||||||
|
@ -90,11 +90,13 @@ namespace MCGalaxy.DB {
|
|||||||
|
|
||||||
internal static void BanLine(Player p, string name) {
|
internal static void BanLine(Player p, string name) {
|
||||||
if (!Group.BannedRank.Players.Contains(name)) return;
|
if (!Group.BannedRank.Players.Contains(name)) return;
|
||||||
|
string banner, reason, prevRank;
|
||||||
|
DateTime time;
|
||||||
|
Ban.GetBanData(name, out banner, out reason, out time, out prevRank);
|
||||||
|
|
||||||
string[] data = Ban.GetBanData(name);
|
if (banner != null) {
|
||||||
if (data != null) {
|
|
||||||
Player.Message(p, " Banned for {0} by {1}",
|
Player.Message(p, " Banned for {0} by {1}",
|
||||||
data[1], PlayerInfo.GetColoredName(p, data[0]));
|
reason, PlayerInfo.GetColoredName(p, banner));
|
||||||
} else {
|
} else {
|
||||||
Player.Message(p, " Is banned");
|
Player.Message(p, " Is banned");
|
||||||
}
|
}
|
||||||
|
@ -33,10 +33,6 @@ namespace MCGalaxy {
|
|||||||
unbans.EnsureExists();
|
unbans.EnsureExists();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string FormatBan(string banner, string reason) {
|
|
||||||
return "Banned by " + banner + ": " + reason;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string PackTempBanData(string reason, string banner, DateTime expiry) {
|
public static string PackTempBanData(string reason, string banner, DateTime expiry) {
|
||||||
if (reason == null) reason = "-";
|
if (reason == null) reason = "-";
|
||||||
return banner + " " + expiry.ToUnixTime() + " " + reason;
|
return banner + " " + expiry.ToUnixTime() + " " + reason;
|
||||||
@ -63,7 +59,7 @@ namespace MCGalaxy {
|
|||||||
reason = reason.Replace(" ", "%20");
|
reason = reason.Replace(" ", "%20");
|
||||||
|
|
||||||
string player = banner == null ? "(console)" : banner.truename;
|
string player = banner == null ? "(console)" : banner.truename;
|
||||||
AddBanEntry(player, target.ToLower(), reason, stealth.ToString(), FormatDate(), oldrank);
|
AddBanEntry(player, target.ToLower(), reason, stealth.ToString(), oldrank);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Adds a ban entry for the given user, and who banned them and why they were banned. </summary>
|
/// <summary> Adds a ban entry for the given user, and who banned them and why they were banned. </summary>
|
||||||
@ -72,56 +68,71 @@ namespace MCGalaxy {
|
|||||||
reason = reason.Replace(" ", "%20");
|
reason = reason.Replace(" ", "%20");
|
||||||
|
|
||||||
string player = unbanner == null ? "(console)" : unbanner.truename;
|
string player = unbanner == null ? "(console)" : unbanner.truename;
|
||||||
AddUnbanEntry(player, target.ToLower(), reason, FormatDate());
|
AddUnbanEntry(player, target.ToLower(), reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
static string FormatDate() {
|
static void AddBanEntry(string pl, string who, string reason, string stealth, string oldrank) {
|
||||||
DateTime now = DateTime.Now;
|
string datetime = DateTime.UtcNow.ToUnixTime().ToString();
|
||||||
return now.DayOfWeek + "%20" + now.Day + "%20" + now.Month +
|
|
||||||
"%20" + now.Year + ",%20at%20" + now.Hour + ":" + now.Minute;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void AddBanEntry(string pl, string who, string reason,
|
|
||||||
string stealth, string datetime, string oldrank) {
|
|
||||||
string data = pl + " " + who + " " + reason + " " + stealth + " " + datetime + " " + oldrank;
|
string data = pl + " " + who + " " + reason + " " + stealth + " " + datetime + " " + oldrank;
|
||||||
bans.Append(data);
|
bans.Append(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AddUnbanEntry(string pl, string who, string reason, string datetime) {
|
static void AddUnbanEntry(string pl, string who, string reason) {
|
||||||
|
string datetime = DateTime.UtcNow.ToUnixTime().ToString();
|
||||||
string data = pl + " " + who + " " + reason + " " + datetime;
|
string data = pl + " " + who + " " + reason + " " + datetime;
|
||||||
unbans.Append(data);
|
unbans.Append(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary> Returns info about the current or last ban of a user, as a string array of
|
/// <summary> Returns info about the current or last ban of a user. </summary>
|
||||||
/// {banned by, ban reason, date and time, previous rank, stealth},
|
public static void GetBanData(string who, out string banner, out string reason,
|
||||||
/// or null if no ban data was found. </summary>
|
out DateTime time, out string prevRank) {
|
||||||
public static string[] GetBanData(string who) {
|
|
||||||
who = who.ToLower();
|
who = who.ToLower();
|
||||||
foreach (string line in File.ReadAllLines(bans.file)) {
|
foreach (string line in File.ReadAllLines(bans.file)) {
|
||||||
string[] parts = line.SplitSpaces();
|
string[] parts = line.SplitSpaces();
|
||||||
if (parts.Length <= 5 || parts[1] != who) continue;
|
if (parts.Length <= 5 || parts[1] != who) continue;
|
||||||
|
|
||||||
parts[2] = parts[2].Replace("%20", " ");
|
banner = parts[0];
|
||||||
parts[4] = parts[4].Replace("%20", " ");
|
reason = parts[2].Replace("%20", " ");
|
||||||
return new string[] { parts[0], parts[2], parts[4], parts[5], parts[3] };
|
time = GetDate(parts[4]);
|
||||||
|
prevRank = parts[5];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return null;
|
banner = null; reason = null; time = DateTime.MinValue; prevRank = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> Returns info about the last unban of a user, as a string array of
|
/// <summary> Returns information about the last unban of a user. </summary>
|
||||||
/// {banned by, ban reason, date and time}, or null if no unban data was found. </summary>
|
public static void GetUnbanData(string who, out string unbanner, out string reason,
|
||||||
public static string[] GetUnbanData(string who) {
|
out DateTime time) {
|
||||||
who = who.ToLower();
|
who = who.ToLower();
|
||||||
|
unbanner = null; reason = null;
|
||||||
foreach (string line in File.ReadAllLines(unbans.file)) {
|
foreach (string line in File.ReadAllLines(unbans.file)) {
|
||||||
string[] parts = line.SplitSpaces();
|
string[] parts = line.SplitSpaces();
|
||||||
if (parts.Length <= 3 || parts[1] != who) continue;
|
if (parts.Length <= 3 || parts[1] != who) continue;
|
||||||
|
|
||||||
parts[2] = parts[2].Replace("%20", " ");
|
unbanner = parts[0];
|
||||||
parts[3] = parts[3].Replace("%20", " ");
|
reason = parts[2].Replace("%20", " ");
|
||||||
return new string[] { parts[0], parts[2], parts[3] };
|
time = GetDate(parts[3]);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return null;
|
unbanner = null; reason = null; time = DateTime.MinValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DateTime GetDate(string raw) {
|
||||||
|
raw = raw.Replace("%20", " ").Replace(",", "");
|
||||||
|
long timestap;
|
||||||
|
if (long.TryParse(raw, out timestap)) return timestap.FromUnixTime();
|
||||||
|
|
||||||
|
/* Old form of timestamps in bans/unbans:
|
||||||
|
DateTime now = DateTime.Now;
|
||||||
|
return now.DayOfWeek + "%20" + now.Day + "%20" + now.Month + "%20" + now.Year + ",%20at%20" + now.Hour + ":" + now.Minute;
|
||||||
|
*/
|
||||||
|
string[] date = raw.SplitSpaces();
|
||||||
|
string[] minuteHour = date[5].Split(':');
|
||||||
|
|
||||||
|
int hour = int.Parse(minuteHour[0]), minute = int.Parse(minuteHour[1]);
|
||||||
|
int day = int.Parse(date[1]), month = int.Parse(date[2]), year = int.Parse(date[3]);
|
||||||
|
return new DateTime(year, month, day, hour, minute, 0).ToUniversalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user