IRC controllers can now be assigned a rank (not always nobody).

This commit is contained in:
UnknownShadow200 2016-06-07 23:26:47 +10:00
parent 85ee39b96d
commit 83a8998777
4 changed files with 27 additions and 21 deletions

View File

@ -35,7 +35,6 @@ namespace MCGalaxy {
private string server;
private bool reset = false;
private byte retries = 0;
public string usedCmd = "";
Dictionary<string, List<string>> users = new Dictionary<string, List<string>>();
static char[] trimChars = { ' ' };
@ -285,14 +284,15 @@ namespace MCGalaxy {
Command cmd = Command.all.Find(ircCmd);
if (cmd != null) {
Server.s.Log("IRC Command: /" + message + " (by " + user.Nick + ")");
usedCmd = user.Nick;
string args = parts.Length > 1 ? parts[1] : "";
Player p = MakeIRCPlayer(user.Nick);
try {
cmd.Use(new Player("IRC"), args);
if (!p.group.CanExecute(cmd)) { cmd.MessageCannotUse(p); return; }
cmd.Use(p, args);
} catch (Exception e) {
Pm(user.Nick, "CMD Error: " + e.ToString());
}
usedCmd = "";
}
else
Pm(user.Nick, "Unknown command!");
@ -325,14 +325,15 @@ namespace MCGalaxy {
Command cmd = Command.all.Find(cmdName);
if (cmdName != "" && cmd != null) {
Server.s.Log("IRC Command: /" + message.Replace(".x ", "") + " (by " + user.Nick + ")");
usedCmd = "";
string args = parts.Length > 2 ? parts[2] : "";
Player p = MakeIRCPlayer("#@public@#");
try {
cmd.Use(new Player("IRC"), args);
if (!p.group.CanExecute(cmd)) { cmd.MessageCannotUse(p); return; }
cmd.Use(p, args);
} catch (Exception e) {
Say("CMD Error: " + e.ToString());
}
usedCmd = "";
} else {
Say("Unknown command!");
}
@ -367,6 +368,15 @@ namespace MCGalaxy {
return true;
}
static Player MakeIRCPlayer(string ircNick) {
Player p = new Player("IRC");
p.group = Group.findPerm(Server.ircControllerRank);
if (p.group == null)
p.group = Group.findPerm(LevelPermission.Nobody);
p.ircNick = ircNick;
p.color = "&a"; return p;
}
void Listener_OnRegistered() {
Server.s.Log("Connected to IRC!");
reset = false;

View File

@ -183,11 +183,11 @@ namespace MCGalaxy {
storedHelp += message + "\r\n";
else
Server.s.Log(message);
} else if (p.name == "IRC") {
if (String.IsNullOrEmpty(Server.IRC.usedCmd))
} else if (p.ircNick != null) {
if (p.ircNick == "#@public@#")
Server.IRC.Say(message, false, true);
else
Server.IRC.Pm(Server.IRC.usedCmd, message);
Server.IRC.Pm(p.ircNick, message);
} else {
p.SendMessage(0, Server.DefaultColor + message, colorParse);
}

View File

@ -119,6 +119,7 @@ namespace MCGalaxy {
public DateTime NextReviewTime, NextEat;
public float ReachDistance = 5;
public bool hackrank;
internal string ircNick;
public string FullName { get { return color + prefix + DisplayName; } }
@ -167,8 +168,6 @@ namespace MCGalaxy {
public int totalKicked = 0;
public int overallDeath = 0;
public string savedcolor = "";
public bool staticCommands = false;
internal bool outdatedClient = false; // for ClassicalSharp 0.98.5, which didn't reload map for BlockDefinitions
@ -341,8 +340,9 @@ namespace MCGalaxy {
//They would still have to do p.Dispose()..
public Player(string playername) {
name = playername;
truename = playername;
DisplayName = playername;
SessionID = Interlocked.Increment(ref sessionCounter);
if (playername == "IRC") { group = Group.Find("nobody"); color = Colors.lime; }
}
public Player(Socket s) {
@ -350,15 +350,9 @@ namespace MCGalaxy {
socket = s;
ip = socket.RemoteEndPoint.ToString().Split(':')[0];
SessionID = Interlocked.Increment(ref sessionCounter);
/*if (IPInPrivateRange(ip))
exIP = ResolveExternalIP(ip);
else
exIP = ip;*/
Server.s.Log(ip + " connected to the server.");
for ( byte i = 0; i < 128; ++i ) bindings[i] = i;
for (byte i = 0; i < 128; i++) bindings[i] = i;
socket.BeginReceive(tempbuffer, 0, tempbuffer.Length, SocketFlags.None, new AsyncCallback(Receive), this);
InitTimers();

View File

@ -255,13 +255,15 @@ namespace MCGalaxy
public static string ircPassword = "";
[ConfigEnum("irc-controller-verify", "IRC bot", null, IRCControllerVerify.HalfOp, typeof(IRCControllerVerify))]
public static IRCControllerVerify IRCVerify = IRCControllerVerify.HalfOp;
[ConfigPerm("irc-controller-rank", "IRC bot", null, LevelPermission.Nobody)]
public static LevelPermission ircControllerRank = LevelPermission.Nobody;
[ConfigBool("admin-verification", "Admin", null, true)]
public static bool verifyadmins = true;
[ConfigPerm("verify-admin-perm", "Admin", null, LevelPermission.Operator)]
public static LevelPermission verifyadminsrank = LevelPermission.Operator;
[ConfigBool("restart-on-error", "Error handling", null, true)]
[ConfigBool("restart-on-error", "Error handling", null, true)]
public static bool restartOnError = true;
[ConfigInt("rplimit", "Other", null, 500, 0, 50000)]
public static int rpLimit = 500;