리그 오브 레전드 소환사 조회 LoL SMS로 소환사 조회

나는 가끔 리그 오브 레전드 게임을 즐긴다.

그래서 저는 종종 Riot Games API를 사용하여 재미있고 흥미로운 것을 만드는 것에 대해 생각했습니다. 나는 결국 Text를 통해 소환사 이름을 수락하고 해당 소환사에 대한 정보를 반환하는 매우 간단한 SMS 봇에 정착했습니다. 다음과 같은 기본 사항을 배우려는 경우 훌륭한 초보자 프로젝트입니다.
  • Twilio 프로그래밍 가능 SMS
  • Twilio 함수
  • 노드/자바스크립트
  • Riot Games API 사용

  • 더 이상 고민하지 않고 시작하겠습니다!

    라이엇 게임즈 API 키



    먼저 Riot Games API 키를 설정해 보겠습니다. Here's Riot의 개발자 포털을 시작하는 방법, 이 프로젝트의 경우 애플리케이션이 승인될 때까지 임시 키를 사용하여 테스트하고 개발할 수 있습니다.

    그 키를 계속 누르고 있으면 이제 SMS 및 조회 논리를 강화할 Twilio로 넘어갈 것입니다.

    트윌리오 기능



    Twilio 함수를 사용하여 SMS 봇의 논리를 강화할 것이므로 먼저 작업해 보겠습니다.

    이전에 Twilio 계정을 설정하지 않은 경우 내 추천 링크here를 사용할 수 있습니다! ( Non referral link )

    새 서비스를 만들거나 Twilio 기능에서 기존 서비스를 사용하십시오(확실하지 않은 경우 지금은 새 서비스를 만드십시오).

    서비스가 준비되면 몇 가지 환경 변수를 만듭니다. 구체적으로:

  • Riot_Base_Url: Riot Requests의 기본 URL을 저장하는 데 사용합니다. 이것은 소환사를 조회하려는 지역에 따라 결정됩니다. 북미(NA1)의 경우 https://na1.api.riotgames.com 입니다.

  • Riot_Api_Key: Riot Games에서 받은 API 키를 저장하는 데 사용합니다.

  • Riot_Champion_Pool_Url: Riot의 Data Dragon URL을 저장하는 데 사용합니다. 이것을 사용하여 정적 챔피언 정보를 검색합니다.

  • 잘했어! 코드에 들어가기 전에 마지막으로 한 가지! 함수 서비스의 종속성 섹션으로 이동하고 axios 버전 0.20.0을 종속성으로 추가합니다.

    코드로! 추가 버튼을 사용하여 서비스에 새 빈 함수를 만듭니다(이름은 원하는 대로 지정). 다음 코드 청크에 붙여넣습니다.

    const axios = require('axios');
    
    exports.handler = function(context, event, callback) {
      /* Assemble vars */
      const { Body } = event;
      const summonerName = Body;
      const championPoolUrl = context.Riot_Champion_Pool_Url;
      const summonerGetUrl = context.Riot_Base_Url + '/lol/summoner/v4/summoners/by-name/' + summonerName + "?api_key=" + context.Riot_Api_Key;
    
      /* Set up inital axios HTTP promises */
      // Retrieves static champion information from Data Dragon
      let championsPromise = 
        axios
          .get(championPoolUrl)
          .catch((error) => logErrorAndReturn(error, callback));
    
      // Retrieves summoner information
      let summonerPromise = 
        axios
          .get(summonerGetUrl)
          .catch((error) => {
            if(error.response.status == 404)
              handleSummonerNotFound(summonerName, callback)
            else
              logErrorAndReturn(error, callback)
          });
    
      /* Promise Logic */
      Promise
        .all([championsPromise, summonerPromise])
        .then((responses) => {
          /* Parse out responses */
          let championsResponse = responses[0];
          let summonerResponse = responses[1];
          let champions = championsResponse.data.data;
    
          /* Successful summoner lookup */
          if (summonerResponse.status == 200)
          {
            handleSummonerFound(summonerName, summonerResponse.data.summonerLevel, summonerResponse.data.id, champions, context, callback);
          }
          /* Other status code */
          else
          {
            logErrorAndReturn("Whoops! Looks like an issue communicating with Riot! Please try again later.", callback);
          }
        })
    };
    
    /* Matches champion Id from the Masteries information to the static information from DataDragon to get the champion name */
    function getTopChampionName(champions, topChampionId) {
      for(const prop in champions)
      {
        if(champions[prop] != null && 
          champions[prop] !== 'undefined' && 
          champions[prop].key.toString() == topChampionId.toString())
        {
          return champions[prop].id;
        }
      }
    }
    
    /* Assembles the text response with releveant summoner and champion mastery information */
    function handleSummonerFound(summonerName, summonerLevel, summonerId, champions, context, callback){
      /* Variable Set Up */
      const masteriesBaseUrl = context.Riot_Base_Url + '/lol/champion-mastery/v4/champion-masteries/by-summoner/' + summonerId + '?api_key=' + context.Riot_Api_Key;
      let message = "Summoner " + summonerName + " found. " + summonerName + " is level " + summonerLevel + ". ";
      let twiml = new Twilio.twiml.MessagingResponse()
    
      console.log("Summoner found!");
    
      axios
        .get(masteriesBaseUrl)
        .then((masteryResponse) => {
          let topChampionId = masteryResponse.data[0].championId;
          let topChampionPoints = masteryResponse.data[0].championPoints;
          let topChampion = getTopChampionName(champions, topChampionId);
          message += summonerName + "'s champion with the highest points is " + topChampion + ", at " + topChampionPoints + " points!";
          twiml.message(message);
          completeCallback(twiml, callback);
        })
        .catch((error) => {
          logErrorAndReturn(error, callback);
        })
    }
    
    /* Handles no summoner found cleanly */
    function handleSummonerNotFound(summonerName, callback) {
      let twiml = new Twilio.twiml.MessagingResponse()
      twiml.message("Summoner " + summonerName + " was not found.")
      console.log("Summoner not found.");
      completeCallback(twiml, callback);
    }
    
    /* Generic error and log catching function */
    function logErrorAndReturn(error, callback) {
      console.log(error);
      callback(error, null);
    }
    
    /* Generic callback completion function */
    function completeCallback(twiml, callback){
      callback(null, twiml)
    }
    


    함수를 저장하고 배포합니다.

    Twilio 번호 구매



    거의 다 왔어! 이제 기능이 설정되고 사용할 준비가 되었으므로 전화 번호에 연결해야 합니다. Twilio의 전화번호 모듈로 이동하여 새 번호로 구매합니다. 현재 다른 용도가 없다고 가정하면 기존 번호를 사용할 수도 있습니다.

    원하는 번호를 선택하고 첫눈에 무엇을 하는지 알 수 있도록 멋진 이름을 지정하십시오( League Bot 또는 Summoner Bot , 아마도).

    메시지 섹션으로 이동하여 메시지가 수신될 때 기능을 트리거하려고 합니다. "메시지 수신"에서 "기능"을 선택한 다음 LoL 봇에 대해 생성한 서비스를 선택합니다. 적절한 환경을 선택한 다음 함수가 정의된 경로를 선택합니다(함수를 처음 만들 때 이 경로를 설정했을 것입니다).

    저장을 누르고 붐! 작동하는 소환사 이름 확인 봇이 있습니다! LoL 소환사 이름으로 새 번호에 문자를 보내고 어떻게 되는지 확인하세요!

    문제 해결



    이 봇에 대한 운이 좋지 않다면 다음 중 일부를 시도하십시오.
  • Riot의 올바른 지역 기본 URL을 사용하고 있는지 확인하십시오
  • .
  • Riot Games API 키가 정확하고 만료되지 않았는지 확인하십시오
  • .
  • twilio 기능에 대한 라이브 디버깅을 활성화하고 코드 실행의 문제 지점을 콘솔에서 로그아웃합니다.
  • Twilio의 디버거 도구를 사용하여 문제가 발생한 위치를 역추적합니다
  • .

    좋은 웹페이지 즐겨찾기