mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-22 12:05:51 -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 msg += " %Sis not banned, but their IP is &CBANNED";
|
||||
|
||||
string[] data = Ban.GetBanData(plName);
|
||||
if (data != null && permaBanned) {
|
||||
string grpName = Group.GetColoredName(data[3]);
|
||||
string banner, reason, prevRank;
|
||||
DateTime time;
|
||||
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)";
|
||||
}
|
||||
Player.Message(p, msg);
|
||||
DisplayTempbanDetails(p, plName);
|
||||
|
||||
if (data != null) {
|
||||
DisplayDetails(p, data, permaBanned ? "Banned" : "Last banned");
|
||||
if (banner != null) {
|
||||
DisplayDetails(p, banner, reason, time, permaBanned ? "Banned" : "Last banned");
|
||||
} else {
|
||||
Player.Message(p, "No previous bans recorded for {0}%S.", colName);
|
||||
}
|
||||
|
||||
data = Ban.GetUnbanData(plName);
|
||||
DisplayDetails(p, data, permaBanned ? "Last unbanned" : "Unbanned");
|
||||
Ban.GetUnbanData(plName, out banner, out reason, out time);
|
||||
DisplayDetails(p, banner, reason, time, permaBanned ? "Last unbanned" : "Unbanned");
|
||||
}
|
||||
|
||||
static void DisplayTempbanDetails(Player p, string target) {
|
||||
@ -76,13 +78,13 @@ namespace MCGalaxy.Commands.Info {
|
||||
if (reason != "") Player.Message(p, "Reason: {0}", reason);
|
||||
}
|
||||
|
||||
static void DisplayDetails(Player p, string[] data, string type) {
|
||||
if (data == null) return;
|
||||
static void DisplayDetails(Player p, string banner, string reason, DateTime time, string type) {
|
||||
if (banner == null) return;
|
||||
|
||||
TimeSpan delta = GetDelta(data[2]);
|
||||
TimeSpan delta = DateTime.UtcNow - time;
|
||||
Player.Message(p, "{0} {1} ago by {2}",
|
||||
type, delta.Shorten(), GetName(p, data[0]));
|
||||
Player.Message(p, "Reason: {0}", data[1]);
|
||||
type, delta.Shorten(), GetName(p, banner));
|
||||
Player.Message(p, "Reason: {0}", reason);
|
||||
}
|
||||
|
||||
static string GetName(Player p, string user) {
|
||||
@ -91,17 +93,6 @@ namespace MCGalaxy.Commands.Info {
|
||||
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) {
|
||||
Player.Message(p, "%T/BanInfo [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);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (group.Permission == LevelPermission.Banned) {
|
||||
string[] data = Ban.GetBanData(p.name);
|
||||
if (data != null) {
|
||||
p.Kick(null, Ban.FormatBan(data[0], data[1]), true);
|
||||
string banner, reason, prevRank;
|
||||
DateTime time;
|
||||
Ban.GetBanData(p.name, out banner, out reason, out time, out prevRank);
|
||||
|
||||
if (banner != null) {
|
||||
p.Kick(null, "Banned by " + banner + ": " + reason, true);
|
||||
} else {
|
||||
p.Kick(null, ServerConfig.DefaultBanMessage, true);
|
||||
}
|
||||
|
@ -89,12 +89,14 @@ namespace MCGalaxy.DB {
|
||||
}
|
||||
|
||||
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 (data != null) {
|
||||
if (banner != null) {
|
||||
Player.Message(p, " Banned for {0} by {1}",
|
||||
data[1], PlayerInfo.GetColoredName(p, data[0]));
|
||||
reason, PlayerInfo.GetColoredName(p, banner));
|
||||
} else {
|
||||
Player.Message(p, " Is banned");
|
||||
}
|
||||
|
@ -33,10 +33,6 @@ namespace MCGalaxy {
|
||||
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) {
|
||||
if (reason == null) reason = "-";
|
||||
return banner + " " + expiry.ToUnixTime() + " " + reason;
|
||||
@ -63,7 +59,7 @@ namespace MCGalaxy {
|
||||
reason = reason.Replace(" ", "%20");
|
||||
|
||||
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>
|
||||
@ -72,56 +68,71 @@ namespace MCGalaxy {
|
||||
reason = reason.Replace(" ", "%20");
|
||||
|
||||
string player = unbanner == null ? "(console)" : unbanner.truename;
|
||||
AddUnbanEntry(player, target.ToLower(), reason, FormatDate());
|
||||
AddUnbanEntry(player, target.ToLower(), reason);
|
||||
}
|
||||
|
||||
static string FormatDate() {
|
||||
DateTime now = DateTime.Now;
|
||||
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) {
|
||||
static void AddBanEntry(string pl, string who, string reason, string stealth, string oldrank) {
|
||||
string datetime = DateTime.UtcNow.ToUnixTime().ToString();
|
||||
string data = pl + " " + who + " " + reason + " " + stealth + " " + datetime + " " + oldrank;
|
||||
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;
|
||||
unbans.Append(data);
|
||||
}
|
||||
|
||||
|
||||
/// <summary> Returns info about the current or last ban of a user, as a string array of
|
||||
/// {banned by, ban reason, date and time, previous rank, stealth},
|
||||
/// or null if no ban data was found. </summary>
|
||||
public static string[] GetBanData(string who) {
|
||||
/// <summary> Returns info about the current or last ban of a user. </summary>
|
||||
public static void GetBanData(string who, out string banner, out string reason,
|
||||
out DateTime time, out string prevRank) {
|
||||
who = who.ToLower();
|
||||
foreach (string line in File.ReadAllLines(bans.file)) {
|
||||
string[] parts = line.SplitSpaces();
|
||||
if (parts.Length <= 5 || parts[1] != who) continue;
|
||||
|
||||
parts[2] = parts[2].Replace("%20", " ");
|
||||
parts[4] = parts[4].Replace("%20", " ");
|
||||
return new string[] { parts[0], parts[2], parts[4], parts[5], parts[3] };
|
||||
banner = parts[0];
|
||||
reason = parts[2].Replace("%20", " ");
|
||||
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
|
||||
/// {banned by, ban reason, date and time}, or null if no unban data was found. </summary>
|
||||
public static string[] GetUnbanData(string who) {
|
||||
/// <summary> Returns information about the last unban of a user. </summary>
|
||||
public static void GetUnbanData(string who, out string unbanner, out string reason,
|
||||
out DateTime time) {
|
||||
who = who.ToLower();
|
||||
unbanner = null; reason = null;
|
||||
foreach (string line in File.ReadAllLines(unbans.file)) {
|
||||
string[] parts = line.SplitSpaces();
|
||||
if (parts.Length <= 3 || parts[1] != who) continue;
|
||||
|
||||
parts[2] = parts[2].Replace("%20", " ");
|
||||
parts[3] = parts[3].Replace("%20", " ");
|
||||
return new string[] { parts[0], parts[2], parts[3] };
|
||||
unbanner = parts[0];
|
||||
reason = parts[2].Replace("%20", " ");
|
||||
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