cnguy / kayn

superagent-inspired Node.js lib (w/ **some** TypeScript support) for accessing Riot's League of Legend's API (discord: cnguy#3614)
MIT License
134 stars 34 forks source link

Special characters disallowed #29

Closed UghThatGuyAgain closed 7 years ago

UghThatGuyAgain commented 7 years ago

It's possible that it's a mistake on my part, but I've been doing some testing and it appears that special characters that are allowed on League (in my case, the Á in ÁssBlaster) aren't working with the library. Testing the same method with different usernames without them works, which leads me to believe that these characters are screwing it up.

UghThatGuyAgain commented 7 years ago

To provide some more information: I'm using the summoner call to get the account id of a player to get a matchlist, with the discord.js library. The command would be %summoner , and it works in the case of a name such as Dropkicked, but doing %summoner ÁssBlaster returns a 404. Full error: 404 DATA NOT FOUND @ https://na1.api.riotgames.com/lol/summoner/v3/summoners/232394225?api_key=

UghThatGuyAgain commented 7 years ago

Finally, a basic example of what I'm doing:

api.Summoner.by.name(name) .then(data => { api.Matchlist.by.id(data.accountId) .then(matchdata => { console.log(matchdata.matches[0].lane); }).catch(error => console.error(error)) // Matchlist by id }).catch(error => console.error(error)) // Summoner by name

When name is ÁssBlaster, it returns the 404. When name is Dropkicked, it returns the lane, (usually JUNGLE or BOTTOM).

(Apologies for spacing and such, Github's code option with the backticks was even worse.

cnguy commented 7 years ago

you should be doing

api.Matchlist.by.account(data.accountId)

by.id = SummonerId // You put an accountId in this id function, causing a 404 because there's no summoner with a summoner id that equals that account id (sometimes, these situations do occur though). by.account = AccountId

https://github.com/ChauTNguyen/kindred-api/wiki/SUMMONER-V3

It can be somewhat confusing, but at the time I decided to go with the shorter names because I didn't think Riot would use account ids for the endpoints; Based on that, I decided that the primary id is the summoner id, which is why I simply use by.id instead of by.summonerId or something like that. In hindsight, that was a bad idea. :) Other libraries that spawned after mine use more verbose names like by.summonerId and by.accountId (these are much better).

Note that there is a shortcut for what you're doing:


k.Matchlist.by.name('ÁssBlaster')

will handle the summoner conversion for you.

UghThatGuyAgain commented 7 years ago

Okay, thanks! But just for confirmation, this still takes 1 rate count off of summoner, and then 1 off matchlist, correct? It shouldn't matter, considering rates are crazy high, but I was just curious.

cnguy commented 7 years ago

@UghThatGuyAgain

Yeah, unfortunately it still does haha. It's just a small way of cleaning up a lot of function chaining.

UghThatGuyAgain commented 7 years ago

Alright, thanks. Completely missed that there was a matchlist by name method, I should really read closer. Keep up the good work!