示例#1
0
        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.");
            }
        }
示例#2
0
        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.");
            }
        }