LCU API开发英雄联盟黑名单demo

起因是某天晚上打联盟关键团被人演了,然后第二把又到了他。所以有了这个demo

简单的c#控制台应用

查找队友是否在黑名单,以及把队友添加进黑名单

主要参考:

https://www.52pojie.cn/thread-1569023-1-1.html 开发思路

https://lcu.vivide.re/#operation--lol-career-stats-v1-summoner-games--puuid--get API文档

   public static string get(string url)
    {
        
        var startInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
//设置启动的一些参数
        startInfo.UseShellExecute = false;
        startInfo.RedirectStandardInput = true;
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        startInfo.CreateNoWindow = true;
//获取Process类的新实例
        var myProcess = new System.Diagnostics.Process();
        myProcess.StartInfo = startInfo;
//启动 cmd.exe
        myProcess.Start();
// 输入命令
        myProcess.StandardInput.WriteLine("WMIC PROCESS WHERE name=\"LeagueClientUx.exe\" GET commandline");

// 此处很关键,需要输入 exit 表示命令结束,不然会一直阻塞,获取不到输出结果
        myProcess.StandardInput.WriteLine("exit");

        StreamReader reader = myProcess.StandardOutput;
// 读取命令执行的结果
        string strOuput = reader.ReadToEnd();
        reader.Close();
        myProcess.WaitForExit();
        myProcess.Close();

// 再使用正则表达式从读取结果中解析出 端口号 和 密码

// 规则匹配
        Regex portRegex = new Regex("--app-port=([0-9]*)");
        Regex tokenRegex = new Regex("--remoting-auth-token=([\\w-]*)");
        var port = portRegex.Match(strOuput).Value;
        var token = tokenRegex.Match(strOuput).Value;
        var a = port.IndexOf("=");
        var b = token.IndexOf("=");

        port = port.Substring(a+1,port.Length-a-1);
        token = token.Substring(b+1, token.Length-b-1);

        string authorize = Convert.ToBase64String(Encoding.ASCII.GetBytes($"riot:{token}"));
        ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
        //(重点)忽略ssl证书错误
        
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create($"https://127.0.0.1:{port}{url}");
        request.UserAgent = null;
        request.Method = "Get";
        request.Headers.Add("Authorization", "Basic " +authorize);
        request.Headers.Add("Accept","application/json");
        request.Headers.Add("Content-Type","application/json");
        using HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
        using Stream st = resp.GetResponseStream();
        using StreamReader sr = new StreamReader(st, Encoding.UTF8);
        var result = sr.ReadToEnd();
        return result;
    }

封装的一个get请求,result是JSON格式

然后就是查API文档找想要的功能了,理论上什么什么盒子的功能都能扩展上去

下面写几个用到的API

重点API:

"/lol-champ-select/v1/session"获取当前房间信息
  Regex summoner = new Regex("\"summonerId\":([0-9]*)");//从result中提取summoner
            Regex summonerId = new Regex(@"[0-9]+");//获取ID
   //构建正则获取team
            Regex team = new Regex("\"team\":([0-9]*)");//从result中提取队伍
            Regex teamId = new Regex(@"[0-9]+");//获取队伍ID
//1蓝2红貌似

"/lol-summoner/v1/summoners/{summonerId}" 通过summonerId获取玩家信息(貌似只能查队友,查敌人会报404)主要获取puuid(应该是全球玩家唯一的标识ID)

对应正则

Regex regex = new Regex("(?<=\"puuid\":\").*(?=\",\"rerollPoints\":)")//Puuid
Regex nameRegex = new Regex("(?<=\"displayName\":\").*(?=\",\"gameName\")");//玩家名字
"/lol-login/v1/session"获取自己的信息

下面是其他代码,主程序就是简单的

while(true){

控制台读取k

if(k1).....

if(k2)....

}

    public static void Record(string summonersId,string reason)
    {       var context1 = new Context();
           

                  var puuid = Getpuuid(summonersId);
                  var name = GetName(summonersId);

                  context1.Users.Add(new User(puuid,name,reason,DateTime.Now));
                context1.SaveChanges();
    }

    public static string GetName(string summonersId)
    {
            Regex nameRegex = new Regex("(?<=\"displayName\":\").*(?=\",\"gameName\")");
            
            var result = get($"/lol-summoner/v1/summoners/{summonersId}");
                 return  nameRegex.Match(result).ToString();
    }




    public static List<Team> Getduiyou()
    {   
        
            
            var result= get("/lol-champ-select/v1/session");
            Regex summoner = new Regex("\"summonerId\":([0-9]*)");//从result中提取summoner
            Regex summonerId = new Regex(@"[0-9]+");//获取ID
            
            
            
            
            //构建正则获取team
            Regex team = new Regex("\"team\":([0-9]*)");//从result中提取队伍
            Regex teamId = new Regex(@"[0-9]+");//获取队伍ID
           
            var summonerIds = summoner.Matches(result);
            var teams = team.Matches(result);
            
            string[] a1 =new string[summonerIds.Count];
            string[] a2 =new string[summonerIds.Count];
            int i = 0;
            foreach (var g in summonerIds)
            { 
                    a1[i]= summonerId.Match(g.ToString()).Value;
                    i++;
            }
            int j = 0;
            foreach (var h in teams)
            {
                    a2[j] = teamId.Match(h.ToString()).Value;
                    j++;
            }
            List<Team> list = new List<Team>();
            for (int k = 0; k < summonerIds.Count; k++)
            {
                    Team s = new Team(a1[k], a2[k]);
                    list.Add(s);
            }
            var sky = get("/lol-login/v1/session");
            var sky1 = summoner.Match(sky).Value;
            var myId = summonerId.Match(sky1).Value;
            var id = list.FirstOrDefault(p => p.SummonerId.Equals(myId)).TeamId;
            List<Team> duiyou=new List<Team>();
            foreach (var k in list)
            {
                    if (k.TeamId.Equals(id))
                    {
                            duiyou.Add(k);
                    }
            }

            return duiyou;
    }

    public static void CheckUser(string summonersId)
    {
            
            Context context=new Context();
            var puuid = Getpuuid(summonersId);
            var user = context.Users.FirstOrDefault(p=>p.Id==puuid);
           
            if (user!=null)
            {          
                    Console.Write("存在仇恨玩家:" +user.GameName+" ID:"+summonersId+" 原因:"+user.Reason+" 时间:"+user.Date);
                  
            }
    }

    public static string Getpuuid(string summonerId)
    {  
            var result = get($"/lol-summoner/v1/summoners/{summonerId}");
            Regex regex = new Regex("(?<=\"puuid\":\").*(?=\",\"rerollPoints\":)");
            var puuid = regex.Match(result).ToString();
            return puuid;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值