Example #1
0
        public static void usersetCapeSelf(string[] cmd, MsgReply rep)
        {
            if (cmd.Length < 2)
            {
                rep.reply("用法:\n" + cmd[0] + " https://xxxx.xxxx.xxxx/xxxx.png");
                return;
            }
            if (!MCServer.SkinHandler.checkPick(cmd[1]))
            {
                rep.reply("图片格式有误。必须是有效PNG图片,且为64*32或64*64比例。");
                return;
            }
            string         uuid     = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
            string         pname    = DBHandler.me.getUserOwnedProfileName(rep.qq);
            string         oldtdata = DBHandler.me.getProfileUUIDTexture(uuid);
            List <Texture> l        = new List <Texture>();

            if (oldtdata != null)
            {
                JObject oldtexture = (JObject)JsonConvert.DeserializeObject(oldtdata);
                if (oldtexture["textures"]["SKIN"] != null)
                {
                    Dictionary <string, string> ddd = new Dictionary <string, string>();
                    Texture tt = new Texture(oldtexture["textures"]["SKIN"].Value <string>("url"), "SKIN", ddd);
                    l.Add(tt);
                }
            }
            Dictionary <string, string> d = new Dictionary <string, string>();

            d.Add("model", "slim");
            Texture t = new Texture(cmd[1], "SKIN", d);

            l.Add(t);
            SkinHandler sh = new SkinHandler(DBHandler.me.getUserOwnedProfileUUID(rep.qq), DBHandler.me.getUserOwnedProfileName(rep.qq), l);

            if (DBHandler.me.setProfileUUIDTexture(uuid, sh.ToString()))
            {
                rep.reply("操作成功,您的皮肤已设置。");
            }
            else
            {
                rep.reply("操作失败");
            }
        }
Example #2
0
        public void PrivateMessage(MsgReply rep, string msgtext, string[] pictures)
        {
            try
            {
                /*
                 * if (msgtext.IndexOf("#") != 0)
                 * {
                 *  try
                 *  {
                 *      var ticket = BroadTicketUtility.TicketCoder.Decode(msgtext);
                 *      long qq = DataBase.me.getUserBoundedQQ(ticket.Data.Uid);
                 *      if (qq <= 0)
                 *      {
                 *          DataBase.me.boundBiliWithQQ(ticket.Data.Uid, rep.qq);
                 *          rep.reply("已将您的QQ与Bilibili账号绑定。");
                 *          qq = rep.qq;
                 *      }
                 *      if (qq != rep.qq)
                 *      {
                 *          rep.reply("我无法为您兑换船票,因为您Bilibili账号绑定的QQ与当前QQ不符。\n绑定的QQ:******" + qq.ToString()[6..] + "\n如果您确信这是一个误会,请联系运维@鸡蛋(1250542735)");
                 *          MainHolder.broadcaster.BroadcastToAdminGroup("船票兑换失败\nQQ<" + rep.qq + ">试图兑换船票{Serial=" + ticket.Data.SerialNumber + "}\n该船票颁发给BiliUID#" + ticket.Data.Uid + "@QQ<" + qq + ">\n拒绝兑换。");
                 *          return;
                 *      }
                 *      try
                 *      {
                 *          rep.reply(BroadTicketUtility.TicketCoder.Encode(ticket, false));
                 *          MainHolder.broadcaster.BroadcastToAdminGroup("船票兑换成功\nQQ<" + rep.qq + ">试图兑换船票{Serial=" + ticket.Data.SerialNumber + "}\n该船票颁发给BiliUID#" + ticket.Data.Uid + "\n已兑换。");
                 *          rep.reply("兑换成功,感谢您对鹿野的支持!");
                 *      }
                 *      catch (Exception err)
                 *      {
                 *          MainHolder.broadcaster.BroadcastToAdminGroup("[Exception]\n兑换船票时发生了一个错误:\n" + err.Message + "\nStack:\n" + err.StackTrace);
                 *          rep.reply("出现了一个错误,无法为您生成船票。请复制本消息并联系运维@鸡蛋(1250542735)\n" + err.Message + "\nStack:\n" + err.StackTrace);
                 *      }
                 *      return;
                 *  }
                 *  catch { }
                 *  MainHolder.broadcaster.SendToAnEgg(msgtext);
                 * }
                 * else*/
                {//是一条指令
                    try
                    {
                        string[] cmd = msgtext.Split(' ');
                        switch (cmd[0])
                        {
                        case "#reg":
                        case "#注册":
                        {
                            if (cmd.Length < 3)
                            {
                                rep.reply("用法:\n" + cmd[0] + " 角色名 密码");
                                break;
                            }
                            if (DBHandler.me.isRegistered(rep.qq))
                            {
                                rep.reply("您的QQ已经被绑定到一个MC账号,我们不允许重复注册。如果需要销号,请联系管理员。");
                                break;
                            }
                            else if (DBHandler.me.isNameTaken(cmd[1]))
                            {
                                rep.reply("这个用户名已经有人用了,换一个试试吧!");
                                break;
                            }
                            else if (cmd[2].Length < 5)
                            {
                                rep.reply("密码长度必须大于等于5位");
                                break;
                            }
                            else if (CheckEncode(cmd[1]))
                            {
                                rep.reply("用户名仅允许(A-Z,a-z,0-9,_),不允许特殊符号和中文。");
                                break;
                            }
                            bool succeed = true;
                            bool mojang  = false;
                            succeed = succeed && MCServer.DBHandler.me.addUser(rep.qq, cmd[2]);
                            succeed = succeed && MCServer.DBHandler.me.addProfile(cmd[1], rep.qq, out mojang);
                            if (succeed)
                            {
                                {
                                    string         uuid             = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
                                    string         pname            = DBHandler.me.getUserOwnedProfileName(rep.qq);
                                    List <Texture> l                = new List <Texture>();
                                    Dictionary <string, string> ddd = new Dictionary <string, string>();
                                    ddd.Add("model", "slim");
                                    Texture tt = new Texture("https://storage.microstorm.tech/skins/default.png", "SKIN", ddd);
                                    l.Add(tt);
                                    SkinHandler sh = new SkinHandler(DBHandler.me.getUserOwnedProfileUUID(rep.qq), DBHandler.me.getUserOwnedProfileName(rep.qq), l);
                                    if (DBHandler.me.setProfileUUIDTexture(uuid, sh.ToString()))
                                    {
                                        rep.reply("注册成功。使用以下信息登录:\n" +
                                                  "用户名:" + rep.qq + "@qq.com\n" +
                                                  "密码:" + cmd[2] + (mojang ? "\n[正版UUID]" : ""));
                                        MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + cmd[1] + ">在认证服务器中注册" + (mojang ? "\n[正版UUID]" : ""));
                                    }
                                    else
                                    {
                                        rep.reply("注册成功,[但设置默认皮肤时发生了一些问题]。\n联系管理解决后,使用以下信息登录:\n" +
                                                  "用户名:" + rep.qq + "@qq.com\n" +
                                                  "密码:" + cmd[2] + (mojang ? "\n[正版UUID]" : ""));
                                        MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + cmd[1] + ">在认证服务器中注册,但默认皮肤未能写入。【须进一步操作】" + (mojang ? "\n[正版UUID]" : ""));
                                    }
                                }
                            }
                            else
                            {
                                rep.reply("无法与中央数据库通讯。请稍后重试。\n如果该问题持续出现,请联系@鸡蛋<1250542735>");
                                MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + cmd[1] + ">在认证服务器中注册时发生错误。数据库连接不稳定。");
                            }
                        }
                        break;

                        case "#skin":
                        case "#皮肤":
                        {
                            if (cmd.Length < 2)
                            {
                                rep.reply("用法:\n" + cmd[0] + " https://xxxxx.xxxxx.xxxxx/xxx.png");
                                break;
                            }
                            if (!MCServer.SkinHandler.CheckSkinSourceTrusted(cmd[1]))
                            {
                                rep.reply("使用的图像URL无效。URL必须格式正确且来自可信的图像服务器。");
                                return;
                            }
                            if (!MCServer.SkinHandler.checkPick(cmd[1]))
                            {
                                rep.reply("图片格式有误。必须是有效PNG图片,且为64*32或64*64比例。");
                                return;
                            }
                            string         uuid     = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
                            string         pname    = DBHandler.me.getUserOwnedProfileName(rep.qq);
                            string         oldtdata = DBHandler.me.getProfileUUIDTexture(uuid);
                            List <Texture> l        = new List <Texture>();
                            if (oldtdata != null)
                            {
                                JObject oldtexture = (JObject)JsonConvert.DeserializeObject(oldtdata);
                                if (oldtexture["textures"]["CAPE"] != null)
                                {
                                    Dictionary <string, string> ddd = new Dictionary <string, string>();
                                    Texture tt = new Texture(oldtexture["textures"]["CAPE"].Value <string>("url"), "CAPE", ddd);
                                    l.Add(tt);
                                }
                            }
                            Dictionary <string, string> d = new Dictionary <string, string>();
                            d.Add("model", "slim");
                            Texture t = new Texture(cmd[1], "SKIN", d);
                            l.Add(t);
                            SkinHandler sh = new SkinHandler(DBHandler.me.getUserOwnedProfileUUID(rep.qq), DBHandler.me.getUserOwnedProfileName(rep.qq), l);
                            if (DBHandler.me.setProfileUUIDTexture(uuid, sh.ToString()))
                            {
                                rep.reply("操作成功,您的皮肤已设置。");
                            }
                            else
                            {
                                rep.reply("操作失败");
                            }
                        }
                        break;

                        case "#UUID_RESET":
                        case "#离线化UUID":
                        {
                            string __uuid  = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
                            string __pname = DBHandler.me.getUserOwnedProfileName(rep.qq);
                            bool   mmojang;
                            string nsu = DBHandler.genNoSlashUUID(__pname, out mmojang);
                            string su  = DBHandler.genSlashUUID(__pname);
                            if (DBHandler.me.changeProfileUUID(__uuid, nsu, su) && mmojang)
                            {
                                rep.reply("您(" + __pname + ")的UUID已更新:\n旧UUID:" + __uuid + "\n新UUID:" + nsu);
                                MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n" + __pname + "发起了UUID更新\n旧UUID:" + __uuid + "\n新UUID:" + nsu + "\n√ 通过");
                            }
                            else
                            {
                                rep.reply("您(" + __pname + ")的UUID无法更新。数据库出错或非Mojang账号\n旧UUID:" + __uuid);
                                MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n" + __pname + "发起了UUID更新\n旧UUID:" + __uuid + "\n新UUID:" + nsu + "\n× 失败");
                            }
                        }
                        break;

                        case "#cloneuuid":
                        {
                            string __uuid;
                            if (cmd.Length == 3)
                            {
                                __uuid = DBHandler.me.getUserOwnedProfileUUID(long.Parse(cmd[2]));
                            }
                            else
                            {
                                __uuid = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
                            }
                            string __pname = cmd[1];
                            bool   mmojang;
                            string nsu = DBHandler.genNoSlashUUID(__pname, out mmojang);
                            string su  = DBHandler.genSlashUUID(__pname);
                            if (!mmojang)
                            {
                                rep.reply("无法获取" + __pname + "的UUID,因此无法克隆。");
                            }
                            else
                            {
                                rep.reply("您申请克隆" + __pname + "的UUID,请等待管理员操作。");
                                MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n" + __pname + "发起了UUID更新\n旧UUID:" + __uuid + "\n新UUID:" + nsu + "\n#cloneuuid " + __pname + " " + rep.qq + "");
                            }
                        }
                        break;

                        case "#cape":
                        case "#披风":
                            break;

                        default:
                            break;
                        }
                    }
                    catch (Exception err)
                    {
                        rep.reply("执行指令出错。请检查指令及其参数是否正确。如果确认操作无误,请将下面的信息转发给@鸡蛋");
                        rep.reply("未处理的异常:" + err.Message + "\n堆栈追踪:" + err.StackTrace);
                    }

                    if (DataBase.me.isUserOperator(rep.qq))//管理才能用的指令
                    {
                        try
                        {
                            string[] cmd = msgtext.Split(' ');
                            switch (cmd[0])
                            {
                            case "#dreg":
                            {
                                if (cmd.Length < 3)
                                {
                                    rep.reply("用法:\n" + cmd[0] + " QQ 角色名 密码");
                                    break;
                                }

                                long   qq     = long.Parse(cmd[1]);
                                string name   = cmd[2];
                                string passwd = cmd[3];
                                if (DBHandler.me.isRegistered(qq))
                                {
                                    rep.reply("QQ已经被绑定到一个MC账号,我们不允许重复注册。如果需要销号,请联系管理员。");
                                    break;
                                }
                                else if (DBHandler.me.isNameTaken(name))
                                {
                                    rep.reply("这个用户名已经有人用了,换一个试试吧!");
                                    break;
                                }
                                else if (passwd.Length < 5)
                                {
                                    rep.reply("密码长度必须大于等于5位");
                                    break;
                                }
                                else if (CheckEncode(name))
                                {
                                    rep.reply("用户名仅允许(A-Z,a-z,0-9,_),不允许特殊符号和中文。");
                                    break;
                                }
                                bool succeed = true;
                                bool mojang  = false;
                                succeed = succeed && MCServer.DBHandler.me.addUser(qq, passwd);
                                succeed = succeed && MCServer.DBHandler.me.addProfile(name, qq, out mojang);
                                if (succeed)
                                {
                                    {
                                        string         uuid             = DBHandler.me.getUserOwnedProfileUUID(qq);
                                        string         pname            = DBHandler.me.getUserOwnedProfileName(qq);
                                        List <Texture> l                = new List <Texture>();
                                        Dictionary <string, string> ddd = new Dictionary <string, string>();
                                        ddd.Add("model", "slim");
                                        Texture tt = new Texture("https://storage.microstorm.tech/skins/default.png", "SKIN", ddd);
                                        l.Add(tt);
                                        SkinHandler sh = new SkinHandler(DBHandler.me.getUserOwnedProfileUUID(qq), DBHandler.me.getUserOwnedProfileName(qq), l);
                                        if (DBHandler.me.setProfileUUIDTexture(uuid, sh.ToString()))
                                        {
                                            rep.reply("注册成功。使用以下信息登录:\n" +
                                                      "用户名:" + qq + "@qq.com\n" +
                                                      "密码:" + passwd + (mojang ? "\n[正版UUID]" : ""));
                                            MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + name + ">在认证服务器中注册" + (mojang ? "\n[正版UUID]" : ""));
                                        }
                                        else
                                        {
                                            rep.reply("注册成功,[但设置默认皮肤时发生了一些问题]。\n联系管理解决后,使用以下信息登录:\n" +
                                                      "用户名:" + qq + "@qq.com\n" +
                                                      "密码:" + passwd + (mojang ? "\n[正版UUID]" : ""));
                                            MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + name + ">在认证服务器中注册,但默认皮肤未能写入。【须进一步操作】" + (mojang ? "\n[正版UUID]" : ""));
                                        }
                                    }
                                }
                                else
                                {
                                    rep.reply("无法与中央数据库通讯。请稍后重试。\n如果该问题持续出现,请联系@鸡蛋<1250542735>");
                                    MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n玩家<" + name + ">在认证服务器中注册时发生错误。数据库连接不稳定。");
                                }
                            }
                            break;

                            case "#cloneuuid":
                            {
                                string __uuid;
                                if (cmd.Length == 3)
                                {
                                    __uuid = DBHandler.me.getUserOwnedProfileUUID(long.Parse(cmd[2]));
                                }
                                else
                                {
                                    __uuid = DBHandler.me.getUserOwnedProfileUUID(rep.qq);
                                }
                                string __pname = cmd[1];
                                bool   mmojang;
                                string nsu = DBHandler.genNoSlashUUID(__pname, out mmojang);
                                string su  = DBHandler.genSlashUUID(__pname);
                                if (DBHandler.me.changeProfileUUID(__uuid, nsu, su) && mmojang)
                                {
                                    rep.reply("您(" + __pname + ")的UUID已更新:\n旧UUID:" + __uuid + "\n新UUID:" + nsu);
                                    MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n" + __pname + "发起了UUID更新\n旧UUID:" + __uuid + "\n新UUID:" + nsu + "\n√ 通过");
                                }
                                else
                                {
                                    rep.reply("您(" + __pname + ")的UUID无法更新。数据库出错或非Mojang账号\n旧UUID:" + __uuid);
                                    MainHolder.broadcaster.BroadcastToAdminGroup("[MC AUTH SERVER]\n" + __pname + "发起了UUID更新\n旧UUID:" + __uuid + "\n新UUID:" + nsu + "\n× 失败");
                                }
                            }
                            break;

                            case "#查重":
                            {
                                rep.reply("====查重开始====\n" +
                                          "该操作需要大量数据库操作,请耐心等待\n" +
                                          "!如果发现结果不正确,请在对应群发送\n" +
                                          "#REFETCH_MEMBERS\n" +
                                          "!来重新同步数据");
                                Dictionary <long, List <long> > li;

                                if (!(cmd.Length > 1 && ((cmd[1] == "从缓存") || (cmd[1] == "cache"))))
                                {
                                    li = DataBase.me.findMeUser();
                                }
                                else
                                {
                                    li = me_user_tmp;
                                }

                                foreach (KeyValuePair <long, List <long> > groups in li)
                                {
                                    if (DataBase.me.isUserOperator(groups.Key))
                                    {
                                        continue;
                                    }
                                    string gps = "";
                                    foreach (long group in groups.Value)
                                    {
                                        gps += DataBase.me.getGroupName(group) + "(" + group + ")\n";
                                    }
                                    if (!(cmd.Length > 1 && ((cmd[1] == "计数") || (cmd[1] == "count"))))
                                    {
                                        rep.reply(new UserData(groups.Key).name + "(" + groups.Key + ")\n" + "该用户同时在这些群:\n" + gps);
                                    }
                                }
                                me_user_tmp = li;
                                rep.reply("共发现" + li.Count + "个重复加群用户\n" +
                                          "====查重结束====\n");
                            }
                            break;

                            case "#更新群":
                            case "#refetch":
                            {
                                rep.reply("!该操作涉及大量数据库操作,需要一定时间");
                                DataBase.me.update_groupmembers(long.Parse(cmd[1]));
                                rep.reply("已更新群成员数据");
                            }
                            break;

                            case "#初始化群":
                            case "#init_group":
                            {
                                rep.reply("!该操作涉及大量数据库操作,需要一定时间");
                                DataBase.me.init_groupdata(long.Parse(cmd[1]));
                                rep.reply("已完成群初始化");
                            }
                            break;

                            case "#手动拉黑":
                            case "#ban":
                            {
                                if (DataBase.me.addUserBlklist(long.Parse(cmd[1]), (
                                                                   (cmd.Length > 2 ? (cmd[2]) : ("管理员手动拉黑"))
                                                                   ), rep.qq))
                                {
                                    string name = "";
                                    try
                                    {
                                        name = "<" + new UserData(long.Parse(cmd[1])).name + ">";
                                    }
                                    catch
                                    {
                                        name = "* <UNKNOWN>";
                                    }
                                    rep.reply("已将" + name + "加入黑名单");
                                }
                                else
                                {
                                    rep.reply("无法执行该操作,中央数据库可能暂时不可用");
                                }
                            }
                            break;

                            case "#清缓存":
                            case "#clearcache":
                            {
                                me_user_tmp.Clear();
                                MainHolder.clearcache();
                                DataBase.me.clearCache();
                                rep.reply("√ 缓存已清空");
                            }
                            break;

                            case "#验证":
                            case "#check":
                                int uid, len, level, tstamp;
                                if (CrewKeyProcessor.checkToken(cmd[1], out uid, out len, out level, out tstamp))
                                {
                                    string dpword = "??未知??";
                                    switch (level)
                                    {
                                    case 1:
                                        dpword = "总督";
                                        break;

                                    case 2:
                                        dpword = "提督";
                                        break;

                                    case 3:
                                        dpword = "舰长";
                                        break;
                                    }
                                    rep.reply("签名有效√\n" +
                                              "颁发给UID:" + uid + "\n" +
                                              "用以证明购买 " + dpword + "*" + len + " 月\n" +
                                              "颁发时间:" + BiliApi.TimestampHandler.GetDateTime(tstamp) + "\n" +
                                              "\n" +
                                              "⚠该凭据仅表明以上购买信息真实有效,不做其它用途");
                                }
                                else
                                {
                                    rep.reply("该凭据签名无效×\n" +
                                              "⚠该凭据无法被正确解码或签名失效。这可能意味着它包含的信息遭到篡改。不要信任该凭据指示的任何信息。");
                                }
                                break;

                            case "#cape":
                            case "#披风":
                            {
                                long   qq  = -1;
                                string url = "";
                                if (cmd.Length < 3)
                                {
                                    if (!long.TryParse(cmd[1], out qq))
                                    {
                                        rep.reply("!正在操作您自己的账号");
                                        qq  = rep.qq;
                                        url = cmd[1];
                                    }
                                    else
                                    {
                                        if (cmd.Length < 2)
                                        {
                                            rep.reply("用法:\n" + cmd[0] + " (玩家QQ) 图片URL");
                                            break;
                                        }
                                        url = cmd[2];
                                    }
                                }
                                if (qq < 0)
                                {
                                    qq = long.Parse(cmd[1]);
                                }
                                if (!MCServer.SkinHandler.checkPick(url))
                                {
                                    rep.reply("图片格式有误。必须是有效PNG图片,且为64*32或64*64比例。");
                                    break;
                                }
                                string         uuid     = DBHandler.me.getUserOwnedProfileUUID(qq);
                                string         pname    = DBHandler.me.getUserOwnedProfileName(qq);
                                string         oldtdata = DBHandler.me.getProfileUUIDTexture(uuid);
                                List <Texture> l        = new List <Texture>();
                                if (oldtdata != null)
                                {
                                    JObject oldtexture = (JObject)JsonConvert.DeserializeObject(oldtdata);
                                    if (oldtexture["textures"]["SKIN"] != null)
                                    {
                                        Dictionary <string, string> ddd = new Dictionary <string, string>();
                                        ddd.Add("model", "slim");
                                        Texture tt = new Texture(oldtexture["textures"]["SKIN"].Value <string>("url"), "SKIN", ddd);
                                        l.Add(tt);
                                    }
                                }
                                Dictionary <string, string> d = new Dictionary <string, string>();
                                Texture t = new Texture(url, "CAPE", d);
                                l.Add(t);
                                SkinHandler sh = new SkinHandler(DBHandler.me.getUserOwnedProfileUUID(rep.qq), DBHandler.me.getUserOwnedProfileName(rep.qq), l);
                                if (DBHandler.me.setProfileUUIDTexture(uuid, sh.ToString()))
                                {
                                    rep.reply("操作成功,已为玩家" + pname + "设置披风。\n" + url);
                                }
                                else
                                {
                                    rep.reply("操作失败");
                                }
                            }
                            break;

                            default:
                                break;
                            }
                        }
                        catch (Exception err)
                        {
                            rep.reply("执行指令出错。请检查指令及其参数是否正确。如果确认操作无误,请将下面的信息转发给@鸡蛋");
                            rep.reply("未处理的异常:" + err.Message + "\n堆栈追踪:" + err.StackTrace);
                        }
                    }
                }
            }
            catch (Exception err)
            {
                MainHolder.broadcaster.BroadcastToAdminGroup("[Exception]\n这条消息可能意味着机器人发生了错误。它仍在继续运行,但可能不是很稳定。下面的信息用来帮助鸡蛋定位错误,管理不必在意。\n[私聊信息处理]" + err.Message + "\n\n堆栈跟踪:\n" + err.StackTrace);
            }
        }