I made these two commands, both that logs the full username of the player the command was acted upon, who did the action, for how long (if its a tempban), for what reason, and the time it happened. Tempban can now have a reason if you put one.
Conor had said that it's possible to put the Command.etc.remove to remove a core command in the init method, it apparently didnt work after trying again.
There is a total of 5 commands you'll need: remove the kick and tempban, the new kick and tempban, and logs which allow you to access the kick and tempban logs.
Removekick:
Spoiler:
- Code: Select all
using System;
namespace MCDzienny
{
public class CmdRemovekick : Command
{
public override string name { get { return "removekick"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return ""; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool ConsoleAccess { get { return false; } }
public override void Init()
{
Command.all.Remove(Command.all.Find("kick"));
}
public override void Use(Player p, string message)
{
}
public override void Help(Player p)
{
}
}
}
Remove tempban:
Spoiler:
- Code: Select all
using System;
namespace MCDzienny
{
public class CmdRemovekick : Command
{
public override string name { get { return "removekick"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return ""; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Nobody; } }
public override bool ConsoleAccess { get { return false; } }
public override void Init()
{
Command.all.Remove(Command.all.Find("tempban"));
}
public override void Use(Player p, string message)
{
}
public override void Help(Player p)
{
}
}
}
The new kick:
Spoiler:
- Code: Select all
using System;
using System.IO;
namespace MCDzienny
{
public class CmdKick : Command
{
public string path = "extra/kicklogs.txt";
public override string name { get { return "kick"; } }
public override string shortcut { get { return "k"; } }
public override string type { get { return "mod"; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool ConsoleAccess { get { return true; } }
/* ==============
== Made by: ==
= Warren1001 =
============== */
public override void Init()
{
if (!File.Exists(path))
{
File.WriteAllText(path, "// Kick logs :D");
}
}
public override void Use(Player p, string message)
{
if (String.IsNullOrEmpty(message))
{
Help(p);
return;
}
Player who = Player.Find(message.Split(' ')[0]);
string m;
if (who == null || who.hidden)
{
Player.SendMessage(p, "Could not find player specified.");
return;
}
if (p != null)
{
if (who == p)
{
Player.SendMessage(p, "You cannot kick yourself!");
return;
}
if (who.group.Permission >= p.group.Permission)
{
Player.GlobalMessage(p.color + p.PublicName + " &stried to kick " + who.color + who.PublicName + " &sbut failed.");
return;
}
}
if (message.Split(' ').Length > 1)
{
m = message.Substring(message.IndexOf(' ') + 1);
if (p == null)
{
File.AppendAllText(path, Environment.NewLine + who.name + " - kicked by: Console/IRC, reason: " + m + ", date: " + DateTime.Now + ".");
}
else
{
File.AppendAllText(path, Environment.NewLine + who.name + " - kicked by: " + p.PublicName + ", reason: " + m + ", date: " + DateTime.Now + ".");
}
}
else
{
if (p == null)
{
m = "You were kicked by an IRC controller!";
File.AppendAllText(path, Environment.NewLine + who.name + " - kicked by: Console/IRC, reason: None, date: " + DateTime.Now + ".");
}
else
{
m = "You were kicked by " + p.PublicName + "!";
File.AppendAllText(path, Environment.NewLine + who.name + " - kicked by: " + p.PublicName + ", reason: None, date: " + DateTime.Now + ".");
}
}
who.Kick(m);
}
public override void Help(Player p)
{
Player.SendMessage(p, "/kick <player> [message] - Kicks a player.");
}
}
}
New tempban:
Spoiler:
- Code: Select all
using System;
using System.Collections.Generic;
using System.IO;
namespace MCDzienny
{
public class CmdTempban : Command
{
public string path = "extra/tempbanlogs.txt";
public override string name { get { return "tempban"; } }
public override string shortcut { get { return "tb"; } }
public override string type { get { return "mod"; } }
public override bool museumUsable { get { return false; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool ConsoleAccess { get { return true; } }
/* ==============
== Made by: ==
= Warren1001 =
============== */
public override void Init()
{
if (!File.Exists(path))
{
File.WriteAllText(path, "// Temp ban logs :D");
}
}
public override void Use(Player p, string message)
{
if (String.IsNullOrEmpty(message))
{
Help(p);
return;
}
Player who = Player.Find(message.Split(' ')[0]);
string m;
int minutes;
if (who == null || who.hidden)
{
Player.SendMessage(p, "Could not find player.");
return;
}
if (p != null)
{
if (who == p)
{
Player.SendMessage(p, "You cannot temp-ban yourself!");
return;
}
if (who.group.Permission >= p.group.Permission)
{
Player.SendMessage(p, "Cannot temp-ban someone of the same rank or higher rank.");
return;
}
}
try
{
minutes = int.Parse(message.Split(' ')[1]);
}
catch
{
Player.SendMessage(p, "Invalid minutes.");
return;
}
if (minutes > 60)
{
Player.SendMessage(p, "Cannot temp-ban for more than an hour.");
return;
}
if (minutes < 1)
{
Player.SendMessage(p, "Cannot temp-ban for less than a minute.");
return;
}
if (message.Split(' ').Length > 2)
{
m = "; " + message.Substring(message.IndexOf(' ') + 1).Substring(message.Substring(message.IndexOf(' ') + 1).IndexOf(' ') + 1);
if (p == null)
{
if (minutes == 1)
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: Console/IRC, for: 1 minute, reason: " + m + ", date: " + DateTime.Now + ".");
}
else
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: Console/IRC, for: " + minutes + " minutes, reason: " + m + ", date: " + DateTime.Now + ".");
}
}
else
{
if (minutes == 1)
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: " + p.PublicName + ", for: 1 minute, reason: " + m + ", date: " + DateTime.Now + ".");
}
else
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: " + p.PublicName + ", for: " + minutes + " minutes, reason: " + m + ", date: " + DateTime.Now + ".");
}
}
}
else
{
if (p == null)
{
m = "!";
if (minutes == 1)
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: Console/IRC, for: 1 minute, reason: None, date: " + DateTime.Now + ".");
}
else
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: Console/IRC, for: " + minutes + " minutes, reason: None, date: " + DateTime.Now + ".");
}
}
else
{
m = "!";
if (minutes == 1)
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: " + p.PublicName + ", for: 1 minute, reason: None, date: " + DateTime.Now + ".");
}
else
{
File.AppendAllText(path, Environment.NewLine + who.name + " - temp-banned by: " + p.PublicName + ", for: " + minutes + " minutes, reason: None, date: " + DateTime.Now + ".");
}
}
}
Server.TempBan tBan;
tBan.name = who.name;
tBan.allowedJoin = DateTime.Now.AddMinutes(minutes);
Server.tempBans.Add(tBan);
if (minutes == 1)
{
who.Kick("Banned for " + minutes + " minute" + m);
}
else
{
who.Kick("Banned for " + minutes + " minutes" + m);
}
}
public override void Help(Player p)
{
Player.SendMessage(p, "/tempban <name> <minutes> <reason> - Bans <name> for <minutes> minute(s) for <reason>.");
Player.SendMessage(p, "Maximum of 60 minutes; minimum of 1 minute.");
Player.SendMessage(p, "Temp-bans will reset on server restart.");
}
}
}
Logs:
Spoiler:
- Code: Select all
using System;
using System.IO;
namespace MCDzienny
{
public class CmdLogs : Command
{
public string kpath = "extra/kicklogs.txt";
public string tpath = "extra/tempbanlogs.txt";
public override string name { get { return "logs"; } }
public override string shortcut { get { return "log"; } }
public override string type { get { return "mod"; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool ConsoleAccess { get { return true; } }
/* ==============
== Made by: ==
= Warren1001 =
============== */
public override void Use(Player p, string message)
{
if (String.IsNullOrEmpty(message))
{
Help(p);
return;
}
if (message.Split(' ')[0] == "t")
{
string name = message.Split(' ')[1];
if (String.IsNullOrEmpty(name))
{
Help(p);
return;
}
Player.SendMessage(p, "Users with the following name that have been temp-banned:");
foreach (string line in File.ReadAllLines(tpath))
{
if (line.ToLower().Contains(name) && !line.Contains("//"))
{
Player.SendMessage(p, line);
}
}
}
else if (message.Split(' ')[0] == "k")
{
string name = message.Split(' ')[1];
if (String.IsNullOrEmpty(name))
{
Help(p);
return;
}
Player.SendMessage(p, "Users with the following name that have been kicked:");
foreach (string line in File.ReadAllLines(kpath))
{
if (line.ToLower().Contains(name) && !line.Contains("//"))
{
Player.SendMessage(p, line);
}
}
}
else
{
string name = message.Split(' ')[0];
Player.SendMessage(p, "Users with the following name that have been kicked:");
foreach (string line in File.ReadAllLines(kpath))
{
if (line.ToLower().Contains(name) && !line.Contains("//"))
{
Player.SendMessage(p, line);
}
}
Player.SendMessage(p, "Users with the following name that have been temp-banned:");
foreach (string line in File.ReadAllLines(tpath))
{
if (line.ToLower().Contains(name) && !line.Contains("//"))
{
Player.SendMessage(p, line);
}
}
}
}
public override void Help(Player p)
{
Player.SendMessage(p, "Shortcut: /log; <t/k> - t stands for 'temp-ban' and k stands for 'kick'.");
Player.SendMessage(p, "Must write player's name in all lowercase letters.");
Player.SendMessage(p, "/logs <t/k> [player] - shows when, why, and by who a player was kicked or temp-banned.");
Player.SendMessage(p, "If <t/k> is null, both will be shown. (example: /logs [player]).");
}
}
}
Be sure to add these all to the cmdautoload, with the removes before the new commands.