예제 #1
0
파일: CmdList.cs 프로젝트: hexxone/mcswbot2
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var msg = "Watchlist:<code> " + g.Servers.Count + " / 3</code>";

            foreach (var s in g.Servers)
            {
                msg += "\r\n=== == = = = = = = == ===";
                msg += "\r\n[<code>" + s.Label + "</code>] <b>" + s.Base.Address + ":" + s.Base.Port +
                       "</b>\r\n  Status: ";
                if (s.IsOnline)
                {
                    msg += "Online 🌐";
                    msg += "\r\n  Version:<code> " + s.Version;
                    msg += "</code>\r\n  MOTD:<code> " + s.MOTD;
                    msg += "</code>\r\n  Player:<code> " + s.PlayerCount + " / " + s.MaxPlayerCount + "</code>";
                }
                else
                {
                    msg += "Offline ❌";
                    msg += "\r\n  Error:<code> " + s.LastError + "</code>";
                }
            }

            Respond(m.Chat.Id, msg, ParseMode.Html);
        }
예제 #2
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var msg   = "Player Online:";
            var plots = new List <PlottableData>();

            foreach (var item in g.Servers)
            {
                msg += "\r\n[<code>" + item.Label + "</code>] ";
                if (!item.IsOnline)
                {
                    msg += "Offline";
                }
                else
                {
                    msg += item.PlayerCount + " / " + item.MaxPlayerCount;
                }

                if (TgBot.Conf.DrawPlots)
                {
                    plots.Add(item.GetUserData());
                }

                // add player names if any
                if (item.PlayerList.Count <= 0)
                {
                    continue;
                }

                var n = "";
                foreach (var plr in item.PlayerList)
                {
                    if (!string.IsNullOrEmpty(n))
                    {
                        n += ", ";
                    }
                    n += plr.Name;
                }
                msg += "\r\nNames: <code>" + n + "</code>";
            }

            if (TgBot.Conf.DrawPlots && plots.Count > 0)
            {
                using (var bm = Utils.PlotData(plots.ToArray(), "Minutes Ago", "Player Online"))
                {
                    using (var ms = new MemoryStream())
                    {
                        bm.Save(ms, ImageFormat.Png);
                        bm.Dispose();
                        ms.Position = 0;
                        var iof = new Telegram.Bot.Types.InputFiles.InputOnlineFile(ms);
                        TgBot.Client.SendPhotoAsync(m.Chat.Id, iof, msg, ParseMode.Html).Wait();
                        ms.Close();
                    }
                }
            }
            else
            {
                Respond(m.Chat.Id, msg, ParseMode.Html);
            }
        }
예제 #3
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var plots = new List <PlottableData>();

            foreach (var item in g.Servers)
            {
                plots.Add(item.GetPingData());
            }

            if (plots.Count > 0)
            {
                using (var bm = Utils.PlotData(plots.ToArray(), "Minutes Ago", "Response time (ms)"))
                {
                    using (var ms = new MemoryStream())
                    {
                        bm.Save(ms, ImageFormat.Png);
                        bm.Dispose();
                        ms.Position = 0;
                        var iof = new Telegram.Bot.Types.InputFiles.InputOnlineFile(ms);
                        TgBot.Client.SendPhotoAsync(m.Chat.Id, iof).Wait();
                        ms.Close();
                    }
                }
            }
        }
예제 #4
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var msg = "Global Bot stats:";

            msg += "\r\n  known users:<code> " + TgBot.TgUsers.Length;
            msg += "</code>\r\n  known groups:<code> " + TgBot.TgGroups.Length;
            var serverCount = 0;
            var userCount   = 0;

            foreach (var gr in TgBot.TgGroups)
            {
                serverCount += gr.Servers.Count;
                foreach (var sr in gr.Servers)
                {
                    userCount += sr.PlayerCount;
                }
            }

            msg += "</code>\r\n  watched servers:<code> " + serverCount;
            msg += "</code>\r\n  online MC users:<code> " + userCount;

            double totalSize = Process.GetCurrentProcess().WorkingSet64 / 1024 / 1024;

            msg += $"</code>\r\n  live ram usage:<code> {totalSize:0.00} MB";

            Respond(m.Chat.Id, msg + "</code>", ParseMode.Html);
        }
예제 #5
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var usage = "Usage: /notify <label> (<option> [true|false])";

            usage += "\r\nOptions:";
            usage += "\r\n- state (server online status)";
            usage += "\r\n- count (server user count)";
            usage += "\r\n- name (player name samples)";

            switch (args.Length)
            {
            default:
                Respond(m.Chat.Id, usage);
                break;

            case 2:
                var srv = g.GetServer(args[1]);
                if (srv != null)
                {
                    Respond(m.Chat.Id, GetSrvNotifications(srv), ParseMode.Html);
                }
                else
                {
                    Respond(m.Chat.Id, "Server label not found.\r\n\r\n" + usage);
                }
                break;

            case 4:
                var srv2 = g.GetServer(args[1]);
                if (srv2 != null)
                {
                    var argl = args[3].ToLower() == "true";
                    switch (args[2].ToLower())
                    {
                    case "state":
                        srv2.NotifyServer = argl;
                        break;

                    case "count":
                        srv2.NotifyCount = argl;
                        break;

                    case "name":
                        srv2.NotifyNames = argl;
                        break;

                    default:
                        Respond(m.Chat.Id, "Unknown setting.\r\n\r\n" + usage);
                        return;
                    }
                    Respond(m.Chat.Id, GetSrvNotifications(srv2), ParseMode.Html);
                }
                else
                {
                    Respond(m.Chat.Id, "Server label not found.\r\n\r\n" + usage);
                }
                break;
            }
        }
예제 #6
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            var use = "Usage: /add [label] [address] (port default 25565)";

            try
            {
                if (g.Servers.Count > 2 && !dev)
                {
                    throw new Exception("Only up to 3 servers are allowed per group.");
                }
                if (args.Length < 3 || args.Length > 4)
                {
                    throw new Exception("Invalid arguments.");
                }
                Utils.VerifyLabel(args[1]);
                if (g.GetServer(args[1]) != null)
                {
                    throw new Exception("Label name already in use.");
                }

                var addr = args[2];
                var port = 25565;
                // try to parse port if given
                if (args.Length == 4 && !int.TryParse(args[3], out port))
                {
                    throw new Exception("Port is not a number.");
                }

                try
                {
                    Utils.VerifyAddress(addr, port);
                }
                catch (Exception e)
                {
                    // bypass ip check if user is developer
                    if (dev)
                    {
                        Respond(m.Chat.Id, "Verify Warning: " + e.Message);
                    }
                    else
                    {
                        throw e;
                    }
                }

                // add & respond
                g.AddServer(args[1], addr, port);
                Respond(m.Chat.Id, "Server added to watchlist: [" + EventBase.Wrap(Types.Formatting.Html, args[1]) + "]",
                        ParseMode.Html);
            }
            catch (Exception ex)
            {
                Respond(m.Chat.Id, "Error adding server: " + ex.Message + "\r\n" + use);
            }
        }
예제 #7
0
        public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
        {
            if (args.Length != 2)
            {
                Respond(m.Chat.Id, "Usage: /remove [label]");
                return;
            }

            var res = g.RemoveServer(args[1]);
            var msg = res
                ? "Server removed from watchlist: [" + EventBase.Wrap(Types.Formatting.Html, args[1]) + "]"
                : "Label not found.";

            Respond(m.Chat.Id, msg, ParseMode.Html);
        }
예제 #8
0
파일: CmdSven.cs 프로젝트: hexxone/mcswbot2
 public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
 {
     Respond(m.Chat.Id, "stinkt", ParseMode.Default, m.MessageId);
 }
예제 #9
0
 /// <summary>
 ///     Needs to be overwritten by the command-sepcific logic
 /// </summary>
 /// <param name="m">Message which contained the calling command</param>
 /// <param name="g">Group where the message was sent in</param>
 /// <param name="u">Bot-user equivalent of the command sender</param>
 /// <param name="args">command arguments splitted by space</param>
 /// <param name="dev">message was sent by developer</param>
 public abstract void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev);
예제 #10
0
 public override void Call(Message m, TgGroup g, TgUser u, string[] args, bool dev)
 {
     Respond(m.Chat.Id,
             "This bot keeps track of your Minecraft servers and the online users. It should support any server version upward from beta 1.3.1 including Modpacks since it only uses the 'server list' information.");
 }