public static void RestartMeido() { // TODO: Make the caller supply the logger. var log = Logger.ConsoleLogger("Main"); log.Message("Attempting to restart meido..."); var newbot = CreateMeido(log); if (newbot != null) { bot.Disconnect("Restarting..."); // Dispose of old bot and assign new bot. bot.Dispose(); bot = newbot; // The previous 2 actions (disposing the old bot and removing the reference to it) have changed // the entire program. The bot is the root of a large tree of objects (several helper classes, // plugins, etc.), so now is a good time to force a complete collection. Collect(); bot.Connect(); } else { log.Error("Restart failed."); } }
public void AdminTrigger(ITriggerMsg msg) { if (meidoComm.AuthLevel(msg.Nick) >= 2) { var argv = msg.GetArg(out string trigger, toLower: true); // Admin triggers. switch (trigger) { case "j": case "join": foreach (var chan in argv) { irc.RfcJoin(chan); } return; case "p": case "part": foreach (var chan in argv) { irc.RfcPart(chan); } return; case "nick": var newNick = argv.GetArg(); if (newNick.HasValue()) { msg.Reply("Attempting to change nick from {0} to {1}.", irc.Nickname, newNick); irc.RfcNick(newNick); } else { msg.Reply("Current nick is {0}.", irc.Nickname); } return; case "ch": case "channels": var channels = string.Join(" ", irc.GetChannels()); msg.Reply(channels); return; } // Owner only triggers. if (meidoComm.AuthLevel(msg.Nick) == 3) { switch (trigger) { case "dc": case "disconnect": msg.Reply("Disconnecting from {0}.", irc.Address); bot.Dispose(); return; case "restart": Program.RestartMeido(); return; case "gc-collect": long before = GC.GetTotalMemory(false); GC.Collect(); msg.Reply("Garbage Collection Meido: {0:N0} -> {1:N0}", before, GC.GetTotalMemory(true)); return; } } } else { msg.Reply("Authentication Level insufficient. Either you're not an admin or you need to authenticate."); } }