aeonlucid / pogoprotos Goto Github PK
View Code? Open in Web Editor NEWA central repository for all proto files of PokémonGO.
License: MIT License
A central repository for all proto files of PokémonGO.
License: MIT License
Hi,
When compiling with python3 compile_single.py -l py
,
i get "protoc-gen-py: program not found or is not executable".
I'm currently using libprotoc 3.0.0 from https://github.com/google/protobuf.
Compiling the sources via protoc [FILE.proto] --python_out [python src folder]
works fine.
Can someone confirm this?
I'm using the C# api and basically
PostProtoPayload<Request, StartGymBattleResponse>(RequestType.StartGymBattle, message)
is always returning an empty reponse.
I need to find the Unlimited Incubator ID.
I dont get them. I only get the one with Uses left ( at EggIncubators )
and the UNLIMITED is an item without the explicit ItemID!
Thank You :)
When the number of items a player has exceeds the limit, say you have 370/350 because of a level up than the call to get the inventory items fails.
Compiling \POGOProtos\Networking\Responses\GetInventoryResponse.proto.. POGOProtos/Inventory/PokemonFamily.proto: File not found. POGOProtos/Inventory/InventoryItemData.proto: Import "POGOProtos/Inventory/PokemonFamily.proto" was not found or had errors. POGOProtos/Inventory/InventoryItemData.proto:25:9: ".POGOProtos.Inventory.Candy" is not defined. POGOProtos/Inventory/InventoryItem.proto: Import "POGOProtos/Inventory/InventoryItemData.proto" was not found or had errors. POGOProtos/Inventory/InventoryItem.proto:9:9: ".POGOProtos.Inventory.InventoryItemData" is not defined. POGOProtos/Inventory/InventoryDelta.proto: Import "POGOProtos/Inventory/InventoryItem.proto" was not found or had errors. POGOProtos/Inventory/InventoryDelta.proto:9:18: ".POGOProtos.Inventory.InventoryItem" is not defined. POGOProtos/Networking/Responses/GetInventoryResponse.proto: Import "POGOProtos/Inventory/InventoryDelta.proto" was not f
Uncaught Exception: \POGOProtos\Data\PlayerData did not read the full length.
Length left is "5"
Just needs an import sys
.
Any chance you could explain how you go the .proto files for Pokemon Go? I've tried for hours to find a way to extract them myself and eventually gave up. I'd love to better understand how you were able to get ahold of them.
UpgradePokemonMessage.proto has a uint64 for the pokemon_id and i think it's wrong...
I tried multiple times to get this to work but i can't,
so im guessing it has to be fixed64?!
In china, we should use a proxy or a vpn to visit google.
proxy = {'http': 'http://127.0.0.1:1080'}
Using the latest Protobufs, I get ERROR: Illegal wire type for field Message.Field .POGOProtos.Data.PlayerData.tutorialState: 2 (0 expected)
when trying to convert them using protobufjs.
This occurs when doing a RequestType.GET_PLAYER
request and I decode the response using the Networking.Responses.GetPlayerResponse
protobuf.
I guess the TutorialState enum is incorrect. I can convert the response correctly if I set https://github.com/AeonLucid/POGOProtos/blob/master/src/POGOProtos/Data/PlayerData.proto#L15 to bytes
Hi @Grover-c13, @AeonLucid
thanks for the awesome work.
I am having an issue and cannot retrieve the catchable pokemons (I am using the Java API from @Grover-c13 ). The error suggests an IndexOutOfBoundsException which makes me think something could have been changed on the API.
Any chance you guys have experienced some issues as well?
(Or maybe am I doing it wrong!)
How can I help? (Anything to get me started on protobuf and how to fix this ^^)
Thanks a lot
I cant find the proper Request in POGOProtos/src/POGOProtos/Networking/Requests/RequestType.proto
for getting all my pokemon
Exception in thread "main" java.lang.IllegalStateException: Syntax error in POGOProtos/src/POGOProtos/Data/Battle/BattleAction.proto at 1:1: expected a word at com.squareup.wire.schema.internal.parser.ProtoParser.unexpected(ProtoParser.java:1086) at com.squareup.wire.schema.internal.parser.ProtoParser.unexpected(ProtoParser.java:1082) at com.squareup.wire.schema.internal.parser.ProtoParser.readWord(ProtoParser.java:883) at com.squareup.wire.schema.internal.parser.ProtoParser.readDeclaration(ProtoParser.java:105) at com.squareup.wire.schema.internal.parser.ProtoParser.readProtoFile(ProtoParser.java:82) at com.squareup.wire.schema.internal.parser.ProtoParser.parse(ProtoParser.java:34) at com.squareup.wire.schema.SchemaLoader.loadFromDirectories(SchemaLoader.java:146) at com.squareup.wire.schema.SchemaLoader.load(SchemaLoader.java:106) at com.squareup.wire.WireCompiler.compile(WireCompiler.java:211) at com.squareup.wire.WireCompiler.main(WireCompiler.java:126)
This can be recreated by cloning square/wire, running mvn clean install, and using the generated jar as such
java -jar wire-compiler-2.2.0-jar-with-dependencies.jar --proto_path=src/POGOProtos/ --java_out=generated-java/wire
Let me know if there is any easy fix or if this is completely out of the scope of the library.
Thanks.
It shows always that you have 0 gyms.
Hi, @rastapasta wrote a script that compiles your protos to a desc file
. I quickly created a requirable node package for easy use across projects, no need to have to recompile the protos myself all the time if the libraries I depend on have them anyway. Here it is: https://github.com/rubenvereecken/node-pokemongo-protobuf
It's different from the code generation approach in that requiring this module gives you an object you can work with and has everything contained.
Think we could link this here?
Settings.Master.PokemonSettings uses "class" as one of the properties:
.POGOProtos.Enums.PokemonClass class = 14;
"class" is a reserved word in various languages and when running protoc for those languages, it can result in some invalid code.
Ideally the fix for this issue is in the code generators, but while we wait for those parsers to get better, a quick solution here is rename "class" to "clazz".
.POGOProtos.Enums.PokemonClass clazz = 14;
If we look in the RequestEnvelope.proto file there's a field called unknown12
.
According to this script there is a comment saying it might be a transaction ID and that anything goes. Anyone got some knowledge around this? https://github.com/seikur0/PGO-mapscan-opt/blob/91822ffa9887054fac15152b9804f300c8a71563/main0.py#L245
Hello from the JavaAPI, we are currently implementing the egg handling into our api, but we got problem with it this var .
As you can see that should be a pokemonID or smth like that, but we always get a big number that doesnt look like a PokemonID, any idea for this ?
Get ARC issues when trying to integrate into a project.
ResponseEnvelope.status_code
very occasionally seems to be length-delimited, as in these two log excerpts:
[+++] Request to pgorelease.nianticlabs.com//plfe/287/rpc
[+] Request for action GetMapObjects:
[+] Request for action GetHatchedEggs:
[+] Request for action GetInventory:
[+] Request for action CheckAwardedBadges:
[+] Request for action DownloadSettings:
[+] Waiting for response...
[+] Response for action GetMapObjects
[+] Response for action GetHatchedEggs
[+] Response for action GetInventory
[+] Response for action CheckAwardedBadges
[+] Response for action DownloadSettings
[-] Parsing protobuf of ResponseEnvelope failed: Error: Illegal wire type for field Message.Field .POGOProtos.Networking.Envelopes.ResponseEnvelope.status_code: 2 (0 expected)[+++] Request to pgorelease.nianticlabs.com//plfe/287/rpc
[+] Request for action GetAssetDigest:
[+] Request for action GetHatchedEggs:
[+] Request for action GetInventory:
[+] Request for action CheckAwardedBadges:
[+] Request for action DownloadSettings:
[+] Waiting for response...
[+] Response for action GetAssetDigest
[+] Response for action GetHatchedEggs
[+] Response for action GetInventory
[+] Response for action CheckAwardedBadges
[+] Response for action DownloadSettings
[-] Parsing protobuf of ResponseEnvelope failed: Error: Illegal wire type for field Message.Field .POGOProtos.Networking.Envelopes.ResponseEnvelope.status_code: 2 (0 expected)
Some of the .proto
files have a ByteOrderMark set which confuses some scanners/parser.
Could we please remove these?
Hello,
I am looking to see if there is a function to retrieve another user's basic details, like level, pokemon caught, etc.
The best I could see was the GetPlayerProfile call, but it seems to retrieve my own details even if I provide the player_name in the message... any ideas or tips?
Note: wouldnt let me label this as question, I guess I dont have permissions. :P
if you include a create_db.py file with contents:
import db
db.Base.metadata.create_all(db.get_engine())
one can create the db.sqlite without any typing
It seems like InventoryItem has an incorrect type. I'm currently running with the following changes applied and everything is great.. But this message is in a very commonly used request (GetInventoryResponse) so I'm hesitant to submit a PR because I feel like others would have run into this already.
Also when this key is set it means a Pokemon has been deleted from the player's "inventory" (i.e. it was released), and key
represents the pokemon_id. There may be other cases, but if so I haven't seen them yet.
Has anyone else seen this yet?
--- a/src/POGOProtos/Inventory/InventoryItem.proto
+++ b/src/POGOProtos/Inventory/InventoryItem.proto
@@ -5,6 +5,9 @@ import "POGOProtos/Inventory/InventoryItemData.proto";
message InventoryItem {
int64 modified_timestamp_ms = 1;
- int64 deleted_item_key = 2;
+ message DeletedItem {
+ fixed64 key = 1;
+ }
+ DeletedItem deleted_item_key = 2;
.POGOProtos.Inventory.InventoryItemData inventory_item_data = 3;
}
Hi,
i think that UseItemPotionMessage should be
fixed64 pokemon_id
instead of uint64
also this probably apply as well to ALL others pokemon_id, i can see that the value are mixed, some are uint64 someother fixed64
I tried to compile the latest master (cbf0b08
), it gave me a bunch of errors:
POGOProtos/Inventory/PokemonFamily.proto: File not found.
POGOProtos/Inventory/InventoryItemData.proto: Import "POGOProtos/Inventory/PokemonFamily.proto" was not found or had errors.
POGOProtos/Inventory/InventoryItemData.proto:25:9: ".POGOProtos.Inventory.Candy" is not defined.
POGOProtos/Inventory/InventoryItem.proto: Import "POGOProtos/Inventory/InventoryItemData.proto" was not found or had errors.
POGOProtos/Inventory/InventoryItem.proto:9:9: ".POGOProtos.Inventory.InventoryItemData" is not defined.
POGOProtos/Inventory/InventoryDelta.proto: Import "POGOProtos/Inventory/InventoryItem.proto" was not found or had errors.
POGOProtos/Inventory/InventoryDelta.proto:9:18: ".POGOProtos.Inventory.InventoryItem" is not defined.
POGOProtos/Networking/Responses/GetInventoryResponse.proto: Import "POGOProtos/Inventory/InventoryDelta.proto" was not found or had errors.
POGOProtos/Networking/Responses/GetInventoryResponse.proto:8:9:".POGOProtos.Inventory.InventoryDelta" is not defined.
POGOProtos/Settings/Master/PokemonSettings.proto: Import "POGOProtos/Enums/PokemonId.proto" was listed twice.
POGOProtos/Networking/Responses/DownloadItemTemplatesResponse.proto: Import "POGOProtos/Settings/Master/PokemonSettings.proto" was not found or had errors.
POGOProtos/Networking/Responses/DownloadItemTemplatesResponse.proto:29:17: ".POGOProtos.Settings.Master.PokemonSettings" is not defined.
POGOProtos/Networking/Responses/GetIncensePokemonResponse.proto:6:9: ".POGOProtos.Enums.PokemonId" is not defined.
POGOProtos/Inventory/PokemonFamily.proto: File not found.
POGOProtos/Inventory/InventoryItemData.proto: Import "POGOProtos/Inventory/PokemonFamily.proto" was not found or had errors.
POGOProtos/Inventory/InventoryItemData.proto:25:9: ".POGOProtos.Inventory.Candy" is not defined.
POGOProtos/Inventory/InventoryItem.proto: Import "POGOProtos/Inventory/InventoryItemData.proto" was not found or had errors.
POGOProtos/Inventory/InventoryItem.proto:9:9: ".POGOProtos.Inventory.InventoryItemData" is not defined.
POGOProtos/Inventory/InventoryDelta.proto: Import "POGOProtos/Inventory/InventoryItem.proto" was not found or had errors.
POGOProtos/Inventory/InventoryDelta.proto:9:18: ".POGOProtos.Inventory.InventoryItem" is not defined.
I think there are more but I just copied some of them. Am I doing something wrong or should these proto's be fixed?
I would love if this codebase had some kind of software license. I would suggest MIT since that protects you from liability and lets anyone use this for any project. Closed or open source. Thoughts?
The field "deployed_fort_id" should be of type string and not int32.
"Uncaught Exception: Incorrect wire format for field 8, expected: 0 got: 2"
This is just a question, not an issue - didn't know where else to ask.
How did you get all these .proto
files? Was it all intelligent guess work or there is some better, more formal method?
Testing against some data i got by mitming the game running on a virtual android ive found out that parsing the PokemonData results in some skiped bytes. This indicates strongly, that the current proto definition is not entierly correct. I'll investigate this further but since i havnt worked with protobuf before this will take some time (if i even manage to figure something out).
I can't get a GetMapObjects call to return anything. Other messages work so it's not my call mechanism. The only difference between my requests and pgoapi (working) requests is the latter uses a long instead of a double to represent the lat/lon.
Envelope:
status_code: 2
request_id: 8145806132888207460
requests {
request_type: GET_MAP_OBJECTS
request_message: "\n\310\001\200\200\200\200\264\317\235\356\200\001\200\200\200\200\274\317\235\356\200\001\200\200\200\200\304\317\235\356\200\001\200\200\200\200\314\317\235\356\200\001\200\200\200\200\324\317\235\356\200\001\200\200\200\200\334\317\235\356\200\001\200\200\200\200\344\317\235\356\200\001\200\200\200\200\354\317\235\356\200\001\200\200\200\200\364\317\235\356\200\001\200\200\200\200\374\317\235\356\200\001\200\200\200\200\204\320\235\356\200\001\200\200\200\200\214\320\235\356\200\001\200\200\200\200\224\320\235\356\200\001\200\200\200\200\234\320\235\356\200\001\200\200\200\200\244\320\235\356\200\001\200\200\200\200\254\320\235\356\200\001\200\200\200\200\264\320\235\356\200\001\200\200\200\200\274\320\235\356\200\001\200\200\200\200\304\320\235\356\200\001\200\200\200\200\314\320\235\356\200\001\022\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\324]h<\032\232@@!\276\337tM\360M]\300"
}
latitude: 33.20392565818807
longitude: -117.21779190457798
auth_info {
provider: "ptc"
token {
contents: "TGT-4285335-DMZW3ZpdoxiSOXl2hNDuJbQaV3aKjHrbWhoQgffA1MfkdTN0Oo-sso.pokemon.com"
unknown2: 59
}
}
unknown12: 989
Message:
cell_id: 9285426803457916928
cell_id: 9285426805605400576
cell_id: 9285426807752884224
cell_id: 9285426809900367872
cell_id: 9285426812047851520
cell_id: 9285426814195335168
cell_id: 9285426816342818816
cell_id: 9285426818490302464
cell_id: 9285426820637786112
cell_id: 9285426822785269760
cell_id: 9285426824932753408
cell_id: 9285426827080237056
cell_id: 9285426829227720704
cell_id: 9285426831375204352
cell_id: 9285426833522688000
cell_id: 9285426835670171648
cell_id: 9285426837817655296
cell_id: 9285426839965138944
cell_id: 9285426842112622592
cell_id: 9285426844260106240
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
since_timestamp_ms: 0
latitude: 33.20392565818807
longitude: -117.21779190457798
Response:
status_code: 3
request_id: 8145806132888207460
auth_ticket {
start: "\3622\252#\340\330D\365\356X\035\325\200\004w\200 \v\000\227\342\333R\004z\272\177{2\341eF>\3750\230E\304\231\304iq\256M`\351\274\253;UQ\322\344)\"&sp#\017\260D8c"
expire_timestamp_ms: 1469426830935
end: "G()\374\\J6\203U\'\366\206.](\016"
}
returns: ""
I am using a python compiled version of v1.0.
MapCells in GetMapObjectsMessage has only 2 fields as stated in the title.
Some important fields such as forts, spawn_points etc are missing
Is the something like a session.Shutdown()? I know there isn't that exact one but a similar functionally (besides killing the loop). I did not see anything in RequestMessages either for something like this. I have the startup code from the demo shoved into a function that gets called from the HandleCommands loop, and would like to add a disconnect command so a user could log out without closing the window and change the passed arguments to the StartUp. BTW great work on the API, once I get more familiar with it and setup some basic stuff I am hoping to wrap it all up inside an Xna project.
var myPokemonFamilies = await GetPokemonFamilies(); var pokemonFamilies = myPokemonFamilies as PokemonFamily[] ?? myPokemonFamilies.ToArray();
Server response contains eggs have egg_km_walked_target and egg_km_walked_start is 0
Is this protobuff problem?
When catching a pokemon, we never get a nice/great/execllent throw award, for whatever parameters we used.
Only award we can get now is the curve ball.
Request:
catch_pokemon(encounter_id=encounter_id,
pokeball=pokeball,
normalized_reticle_size=1.950,
spawn_point_id=self.spawn_point_guid,
hit_pokemon=1,
spin_modifier=1,
NormalizedHitPosition=1)
Response
'responses': {
'CATCH_POKEMON': {
'status': 1,
'capture_award': {
'xp': [100, 10],
'stardust': [100, 0],
'candy': [3, 0],
'activity_type': ['ACTIVITY_CATCH_POKEMON', 'ACTIVITY_CURVE_BALL']
},
'captured_pokemon_id': 14826612040371619295 L
}
},
Does the server have update CatchPokemon_Request or something?
It's easily fixed by changing line 50 in compile.py from destination_path,
to os.path.abspath(out_path),
.
Using the latest version of the Protos, I can't seem to get the forts and pokemon listed in the response dictionary when I call get_map_objects. The version used in the pgoapi (https://github.com/tejado/pgoapi) seems to work perfectly fine, but when the same request is made using the latest code, it doesn't seem to list any forts or pokemon. It still lists cell ids and session timestamps and the status returned is 1.
The pokemon_id field in the EggIncubator message seems to be uint64 instead of fixed64. After the last commit the returned pokemonId of an incubator is always 0 and the next fields are also wrong.
Example code that works with uint64
public async Task<IEnumerable<PokemonData>> GetPokemons()
{
var inventory = await session.GetInventory();
return
inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData?.PokemonData)
.Where(p => p != null);
}
private async Task<EggIncubators> GetPlayerIncubators()
{
var inventory = await session.GetInventory();
return
inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData.EggIncubators)
.Where(p => p != null).First();
}
private async Task IncubateEggs()
{
var playerPokemons = await GetPlayerPokemonsData();
var playerIncubators = await GetPlayerIncubators();
var eggs = playerPokemons
.Where(p => p.IsEgg)
.Where(p => p.EggIncubatorId == string.Empty)
.OrderByDescending(p => p.EggKmWalkedTarget).ToList();
if (eggs.Count() == 0)
return;
var incubators = playerIncubators.EggIncubator
.Where(p => p.IncubatorType != EggIncubatorType.IncubatorUnset)
.Where(p => p.UsesRemaining > 0 || p.ItemId == ItemId.ItemIncubatorBasicUnlimited)
.Where(p => p.PokemonId == 0)
.OrderByDescending(p => p.UsesRemaining).ToList();
if (incubators.Count() == 0)
return;
foreach (var incubator in incubators)
{
if (eggs.Count() == 0)
break;
var firstEgg = eggs.First();
eggs.Remove(firstEgg);
var useIncubatorResponse = await session.UseItemEggIncubator(incubator.Id, firstEgg.Id);
Log.Info($"incubator used [ {useIncubatorResponse?.Result} ]");
await Task.Delay(250);
}
}
Just wanted to start a discussion on the unknown fields in the request and response envelope to gather some intel.
Someone mentioned that Unknown12 might the the time in ms since last GPS refresh. Do we have any way to confirm that?
Unknown6.Unknown1 mostly seems to be 6. I saw it with 5 once when Requests[] was empty.
Discussion on reddit: https://www.reddit.com/r/pokemongodev/comments/4tzgbw/anyone_knowing_more_about_the_infamous_unknown/
Is there any response to get all lured forts? because the response isnt getting the lured forts, only non-lured.
This works fine:
message {{ "pokemonId": "123", "nickname": "My_Pinsir" }} Google.Protobuf.IMessage {POGOProtos.Networking.Requests.Messages.NicknamePokemonMessage}
But this does not:
message {{ "pokemonId": "123", "isFavorite": true }} Google.Protobuf.IMessage {POGOProtos.Networking.Requests.Messages.SetFavoritePokemonMessage}
It always sends back:
parsedPayload {{ "result": "ERROR_POKEMON_NOT_FOUND" }} POGOProtos.Networking.Responses.SetFavoritePokemonResponse
I just stumbled over the repo over reddit and did not think, the protos reengineering is already that far. Incredible.
As far as I can tell, is it possible to programmatically set lure modules on pokestops? I.e. I want to set two lure modules and have two players walk back and forth.
Currently using the node wrapper.
Using latest commits for protos
I can do: UseIncense -> GetIncensePokemon() -> IncenseEncounter() and here it complaints and throws "INCENSE_ENCOUNTER_NOT_AVAILABLE"
GetIncensePokemon() returns "INCENSE ENCOUNTER AVAILABLE". I then invoke IncenseEncounter with the fixed64 encounter_id and string encounter_location, but get the INCENSE_ENCOUNTER_NOT_AVAILABLE return.
I did modify my proto for IncenseEncounterMessage to be fixed64 for encounter_id to match the GetIncensePokemon response.
Still doesn't work unfortunately.
using python compiled version v1.0
2 fields:
e.g.
pokemon_id = (the super long pokemon integer id from pokemon['id'])
nickname = "test123"
response {status: 3}
pokemon_id = (the super long pokemon integer id from pokemon['id'])
nickname = "12.34-56A-78B-90D" # too long
response {status: 2}
I was planning to use the nickname feature to tag my pokemons with their IV values. All chars are ASCII, so there shouldn't be any encoding issue.
I'm currently using a bot based on an api wrote on c# and i noticed it actually catch lured pokemons. Checking out rocket api and their protos files, i found this:
On message PokemonFortProto, the number 13 points to MapPokemonProto (https://github.com/Maufeat/Pokemon-Go-Rocket-API/blob/master/PokemonGo/RocketAPI/Proto/MapObjectsResponse.proto#L83)
While on POGOProtos's protos the #13 points to FortLureInfo (https://github.com/AeonLucid/POGOProtos/blob/master/src/POGOProtos/Map/Fort/FortData.proto#L44)
Could you please take a second look to this? Seems likes its mappokemon instead of lureinfo.
e.g.
GymId = "the long gym ID I got with GetGymDetails"
DefendingPokemonId = the Id of the pokemon of the first member of the gym from GetGymDetails
AttackingPokemonIds = [list of 6 Ids of the player's pokemon - resp. 1 if the gym is owned by the player's team]
Response:
Status = 3
Success = Unset
Anyone else tried it and could confirm?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.