kinnay / NintendoClients

Python package to communicate with Switch, Wii U and 3DS servers
MIT License
537 stars 63 forks source link

Scope of this repository #89

Closed kinnay closed 1 year ago

kinnay commented 1 year ago

Currently, this repository implements everything that is required to access NEX services from a PC. Should it support other services as well? I've been thinking about this for a while.

First, some observations:

Also:

I'm not against adding support for other services, but I also want to avoid feature creep. And:

I've been thinking about creating a github organization. This would have the following benefits:

As far as I know, github automatically redirects the old repository when it is transferred to an organization, so existing links will remain intact.

If we do this, a few questions remain:

Just wanted to dump my thoughts here. If you want to share your opinion, leave a comment below.

jonbarrow commented 1 year ago

If you go the organization route you could follow a similar repository structure that we use at Pretendo, though we entirely focus on the server side of things not the client side

We have many repositories all dedicated to specific functions. For example we have the following for NEX servers:

Then on top of that we have dedicated repositories for each server such as the account server, the BOSS server, etc

jonbarrow commented 1 year ago

Some people do want to expand the scope of this repository (for example https://github.com/kinnay/NintendoClients/pull/85 and https://github.com/kinnay/NintendoClients/issues/87)

To be clear (since my issue was mentioned here), my goal is not to expand the scope of the repository. The way it looks, the wiki is supposed to be full documentation on all things Nintendo related? I only wanted to complete this documentation

On that note though, I think if we do go with an org, it would be important to make the wiki into maybe it's own dedicated repository. That way other people can directly contribute, rather than making issues and hoping things get updated

For example #57 is an on-going list of wiki issues which we have no way of fixing ourselves

My team over at Pretendo quite often makes new discoveries or finds new issues which should be documented, but doing so is difficult right now without having fragmented documentation. Right now we keep notes on Discord while making issues here and DMing you on Discord, but that is inefficient and slow

kinnay commented 1 year ago

Alright so I tried out github's organization features here. Organizations feel like a really nice way to group related repositories.

I'm a bit hesitant about creating an organization for the NintendoClients repo though. I think the reason is that it doesn't have a clear goal, unlike the playground.

For example, let's say that we want to implement Pia in this organization. Should we implement the game-specific layer of Pia in this organization as well, and if yes, for which games?

Also, while using one repository per service makes sense for server code, I don't think this is the right approach for client code. I mean, dauth.py is less than 300 lines of code. If we use one repository per service, the splitting becomes way too fine.

I'm thinking that the best choice might be to keep NintendoClients a monorepo and only create separate repositories when the effort to implement a new service is huge. So Pia would still get its own repository. Still, what about NPLN?

kinnay commented 1 year ago

it would be important to make the wiki into maybe it's own dedicated repository. That way other people can directly contribute, rather than making issues and hoping things get updated

We can do this even if we do not create an organization. There is a big downside though: it would break all existing links to the wiki. I guess I could replace all wiki pages with a big note that says that the wiki has moved, but this is not really ideal. It's just unfortunate that github doesn't support pull requests on wiki pages :confused:

jonbarrow commented 1 year ago

I agree that is not ideal and GitHub lacking PR support for wiki's is a disappointing. I figured if things were moving to an org anyway it might be best to keep everything in one place

I'm a big fan of not having fragmented tools and information spread all around the internet, in my opinion that just makes information harder to find (which is also why I extended that offer on Discord)

I had actually be thinking about asking you for permission to re-host the wiki as a dedicated repo for some time now, so that way we at Pretendo can document our changes/findings more easily (obviously with the disclaimer that you are the original author)

kinnay commented 1 year ago

So, we are implementing dragons as well now (this was necessary for aauth). The main reason I've been hesitant to add more services and methods is the ban risk. But I kind of want to start implementing more services.

Of course I will implement the HTTP requests as accurately as possible, but this does not eliminate the ban risk. For example, even if I implement dragons correctly, the user can still provide an invalid elicense id. I have no idea if this causes a ban, but it does seem like something that Nintendo would be able to detect.

Maybe I should just put a big warning at the top of the readme and go on with it.

I think I want to worry less about the user anyway. More precisely, I'm thinking about:

Then, maybe the goal of this repository would become providing a framework to communicate with Nintendo's servers, to:

  1. Learn more about how they are designed. In my opinion, they are really well designed, and it is always helpful to see how such systems are designed in the real world. It is also fun to know how the games that I play work behind the scenes.
  2. Facilitate cool projects such as mkdatabase.com.

I also removed the Pia code from this repository. Pia should definitely get its own repository if we ever manage to implement it correctly. I really want to focus on client-server communication here, so no Pia.

Again, just wanted to dump my thoughts.