Git Product home page Git Product logo

swproxy's Introduction

Summoners War Monsters & Runes Parser

This tool will parse data captured from the initial Summoners War login data and extract information on the monsters and runes of the user.

This tool was created with a single purpose: Exporting the runes so it can be used with external tools, such as the Rune Optimizer by Redeemer40 available here : http://swrunes.all.my/

SWProxy

The easiest and safest method is to use the SWProxy application which will run a small proxy server on your machine. You will then need to set the proxy settings in your Android or IOS device to the IP and Port displayed by SWProxy and wait for the data to appear. In order to get login data, make sure you quit Summoners War and log back in with the proxy enabled.

SWParser

The SWParser will parse a pcap file containing a network capture of the Summoners War login information. You will need a pcap file that can be captured either by configuring a proxy (such as Charles or Fiddler) and capturing the pcap file with Wireshark or using a capture application such as tPacketCapture. Using this method is not recommended, but it's a workaround if it's not possible to setup a proxy with SWProxy for example.

Once you have your pcap capture file, run the SWParser.py with the pcap file as an argument. It will parse the captured data, find the login information and export a few files with all the information on your account. That's all you need to do.

Files

.json: This is your login data in its pure JSON format. Read it if you're curious or use it to find data that this tool doesn't export -info.csv: A CSV file with information about your user -runes.csv: A CSV file with information about your runes -monsters.csv: A CSV file with information about your monsters visit--monsters.csv: A CSV file with information about the monsters of a user you visited visit-.json: The JSON data of the user you visited -optimizer.json: A json file to use with the Rune optimizer -swarfarm.json: A json file to use with the Swarfarm import utility.

CSV Files

The CSV files can be opened as a Spreadsheet with OpenOffice or Microsoft Excel. The monsters are listed in the same order they would appear in your box if you sort by Grade. The monsters listed for a visited friend are in the same order as his box as well (which is not actually sorted by grade).

Visiting friends

You can visit friends (or people from chat, or arena rankings, etc..) and the script will create a visit--monsters.csv file with all of their monsters and their equipped runes. Note that their monsters that are in storage will also be visible in the CSV file even though the game doesn't show them.

Optimizer data

The optimizer.json file can be directly loaded on the Rune Optimizer app available here : http://swrunes.all.my/ Simply open the file with a text editor and copy/paste the data into the import section of the web app and press Import.

Using it on Linux:

All you need to run it is the following dependencies :

  • Python 2.x
  • pycrypto
  • dpkt
  • yapsy

You can install python with your package manager and the python dependencies as well, or you can install the python dependencies with :

sudo pip install -r requirements.txt

Using it on a MAC:

Download the latest release source code from here https://github.com/kakaroto/SWParser/releases/latest and extract it in the folder of your choice in your Mac. Open Terminal and browse your folder. Make sure you have python installed by running python --version. It should print something like Python 2.7.9. Install pycrypto by doing the following command: sudo -H pip install pycrypto dpkt yapsy. It will ask you to enter your password in order to install the pycrypto dependency. Once you do, it should show a message similar to this :

Collecting pycrypto
  Downloading pycrypto-2.6.1.tar.gz (446kB)
    100% |████████████████████████████████| 446kB 873kB/s 
Installing collected packages: pycrypto
  Running setup.py install for pycrypto
Successfully installed pycrypto-2.6.1

If you do not have the 'pip' command installed, use 'sudo -H easy_install pycrypt dpkt yapsy' to install pycrypto.

Now you should be able to start the proxy. Simply run the following command: python SWProxy.py. If all went fine, you should see the following message:

SWParser v0.99 - Summoners War Proxy
	Written by KaKaRoTo

Licensed under LGPLv3 and available at : 
	https://github.com/kakaroto/SWParser

Running Proxy server at 192.168.x.y on port 8080

GUI

The optional GUI provided requires the pyqt package. Instal pyqt according to your OS's installation procedures (i.e. brew install pyqt on OS X) or you can compile it from source:

PyQt-x11-gpl-4.11.4.tar.gz - Linux source

PyQt-win-gpl-4.11.4.zip - Windows source

PyQt-mac-gpl-4.11.4.tar.gz - OS X source

After installing pyqt, running python SWProxy.py will launch the GUI automatically.

The story of the missing smon_decryptor.py file

The smon_decryptor.py file is not available for now because it contains the decryption key of the protocol. To avoid people abusing the system or creating bots or anything else that is not permitted by the Com2Us terms of service, I have decided not to make that decryption key available publicly. The binary file smon_decryptor.pyc is provided instead which allows SWProxy and SWParser to still function. That file, as it is only provided as a binary is not licensed under the same terms as the rest of the tool.

FAQ

Can I change the port the proxy server runs it

Yes, the first argument of SWProxy is the port number to use.

For some reason, I can't connect to the internet when I set the proxy settings in my device.

There can be many reasons for that. Here is a list of reasons some people have found caused this problem for them :

  • phone was connected to a different router (neighbor's wifi or connected to 3G instead of wifi)
  • Windows Firewall had to be disabled
  • SWProxy had to be run as administrator
  • Antivirus had to be disabled (which sometimes acts as a firewall)
  • Router had to be rebooted
  • Router had to be updated
  • Phone (iOS) had to be updated to the latest version
  • PC had to use a wireless dongle because router doesn't let wired and wireless computers communicate with each other

I can use the internet with the proxy but I can't start the game

The game itself seems to have a bug where it fails to connect to the server at boot (seems to affect everyone, whether using a proxy or not), and I think the proxy just makes that bug more apparent. Some people have reported that it works better if you launch the game without the proxy set, then when the message is "bringing your friend list", then switch to the phone settings and set the proxy before returning to the game. It will usually work when done that way.

Is there a risk for me to get banned ?

Technically, we're not doing anything wrong, but you can always get banned from the game, so use at your own risks. Some people have been banned in the past simply for having a rooted phone. The Terms of Service of Com2Us however, only says that you will get banned if you use unauthorized third party application designed to modify or interfere with or provide automated access to the service or any software that is used to abuse the game services. This application does not modify or interfere in any way with the game, it doesn't act as a bot that automated access to the game and it is not used to abuse any of the game services, so it is not against the ToS. You can read the full Terms of Services here : http://terms.withhive.com/terms/policy/view/M14

Also, if using the Proxy method, it is virtually undetectable since there is no application installed on the phone, and the Android or iOS operating system is the one that handles the proxy connection transparently. While it might be possible for the game to detect if a proxy is set, many people use proxies everyday (such as in offices), and banning anyone that uses a proxy is not realistic.

Can you add feature X to the app ?

Whatever the feature is, I'm simply not interested. I've received numerous requests and proposals but this application has a single purpose, it is to export the runes to be used with the rune optimizer apps during free rune removal days. Any extra feature will make the app more and more feature-rich until it becomes something that is against the Terms of Service. I have to draw a line somewhere and I drew a line at "exporting runes and monster information", and I don't want to add anything more to the app. You are free however to fork the repository and develop your own application with whatever feature you want, but please make sure to read the ToS and not to make anything that can abuse the game services. Also, if you use anything from my app, make sure you read the LICENSE file and respect the license and release your own apps with the same license.

swproxy's People

Contributors

alexandernst avatar azrethos avatar dotneb avatar fperegrinvs avatar jake-griffin avatar jbag1489 avatar jzgdev avatar kakaroto avatar mschettler avatar peteandersen avatar raphaelddl avatar rtdean avatar stanleykylee avatar xzandro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swproxy's Issues

"ur" Jsons

Hi,

u include ur jsons in the release file. Not sure if that was ur plan ;)

Greetings

Update 2.1.0 broke proxy again

Hello.. as the title states.. they have made some changes on the login process that makes the game to stop if you're using the proxy.. Don't know what, because if you start the game, login, and then change the proxy settings on your phone the requests gets detected by the proxy.. but if you close the game and open it again it will stay after the "reading data files" with the spinner animation only and nothing happens... Maybe they have changed the login system to be TCP or UDP based and the rest of the game stills HTTP?

[Windows] Loose files and console+gui

First off, I'm not very good with Python, in fact besides SWProxy I have very little experience with Python.

When that's said, what's with all the loose files that py2exe generates? When trying to compile the repo locally I don't even get working exes using the command python setup.py py2exe

However, running pyinstaller on SWProxy.py writes a new SWProxy.spec file that produces all the loose dependencies, I'm not sure why it's doing that. Is it supposed to be doing that?

Also, does most windows users need both the GUI and the console? I'm attaching my own .SPEC file that consolidates all dependencies into a single executable and disables the console. Maybe someone with some more knowledge can educate a simple peasant.

http://hastebin.com/laquhuyepi.vbs

Compile Mac Version throws /usr/lib/libSystem.B.dylib error

Creating a new issue to track this issue

As per @Fl3xX from #55

Error loading Python lib '/var/folders/g6/g6xWIqVUGuO6CmDUxKu2Rk+++TI/-Tmp-/_MEI7ueMOb/Python': dlopen(/var/folders/g6/g6xWIqVUGuO6CmDUxKu2Rk+++TI/-Tmp-/_MEI7ueMOb/Python, 10): Symbol not found: ___sincos_stret
Referenced from: /var/folders/g6/g6xWIqVUGuO6CmDUxKu2Rk+++TI/-Tmp-/_MEI7ueMOb/Python
Expected in: /usr/lib/libSystem.B.dylib
in /var/folders/g6/g6xWIqVUGuO6CmDUxKu2Rk+++TI/-Tmp-/_MEI7ueMOb/Python
logout

SwProxy not working mac/ios

I have a mac/ios and when I open the swproxy and do everything, the game doesn't load and the info doesnt download to swproxy. Not sure what I'm doing wrong as I followed every step from tutorials.

Uninstall previous version?

Do I need to uninstall the previous version of the SWProxy?

Do I then follow the same steps as before for installing this new version or did something change? It seems that there are a few differences in starting it up so I wanted to check.

I tried following the steps show, but it keeps telling me "No such file or directory" so I'm not sure what I have done wrong.

GUI Icon?

When running the GUI on Windows, it was just showing just a generic icon that made it look like there was an icon missing.

Threw this together for if you wanted to have an icon for the exe or top corner icon on Windows. Been awhile since I've used Linux or OS X, so I can't remember if they have the icon showing anywhere on open windows.

If you would like to use, I'm open to any tweaks and I can turn it into an actual ICO file.

swparser

Build a GUI

Eventually, I'd like to have a GUI pop open where you could start/stop the proxy, select the port for the proxy, it would have a status icon (red that turns green after the first request is received) so users know if they configured their phone/network correctly...
I'm sure there's plenty of other stuff that it could do too.

Find IDs for Water/Fire/Wind Scrolls

Find and confirm the id of Water/Fire/Wind Scrolls and add them to inventory_map in plugins/GenerateRunes.py. Right now our best guess is that they're 4,5,6 but we're unsure of the order

[question] What is "binary_cookie"

Just curious if in your exploration of the protocol you have determined what the "binary_cookie" field in the "HubUserLogin" request is. I'm curious because I don't recognize the encoding (alphanumeric + underscores) and it seems to change pretty often.

some people are getting wrong ip after this update

"First thing I noticed was that the IP on the cmd seemed to be using my local IP, whereas on the GUI version it was using a non local IP."
https://www.reddit.com/r/summonerswar/comments/490u23/swproxy_new_version_released/d0odyvb

I traced this relevant code change back to ffa2ff1

some interesting report :
". I have little observation, my pc have several network devices (virtual box, vpn, wifi, ethernet) and the app is not taking by default the wifi IP you should put to ignore 169.X.X.X IP following the standards of IP range i doubt most of ppl use those numbers"
https://www.reddit.com/r/summonerswar/comments/490u23/swproxy_new_version_released/d0ofux2

Mobile Version of Proxy

I don't know whether or not this is a reasonable request...but the idea of a mobile version of the proxy is very cool. To explain, I mean running the proxy on an additional mobile device and connecting your SW device through the second device the same as you would a PC. I play two accounts on a pair of old galaxy phones and often hotspot my main phone (nexus) and connect the two SW devices through my main phone's broadcast network. It would be cool to be able to run the proxy on my main (hotspot) device to capture the data of the two SW devices.

Setup a website for public proxy

A lot of people are having issues running the proxy, either because of a router or firewall problem or because they don't have wifi and only have 3G on their phone, etc.. so the best way to make the proxy work for them would be to use a public server for the proxy.
I'm thinking it would be nice to have a server that users can set as the proxy, and when they access it as a web server, it would give them their csv/json files.
Since there's no authentication possible for the proxy, it could either list the files based on IP address (not practical if user wants access from PC and they are on different networks, which is the reason to use this in the first place). Or it could list (in last access order) all captured usernames, and then you can select your username to get the data. Disadvantage is the loss of privacy (you can already visit users, but you can't see their inventory runes)...

In either case, IF such a thing is developed, it would need a big huge DISCLAIMER stating that the user needs to trust 100% the server, because it will capture user information, and could be used to hack/hijack user accounts. And point to the FAQ on how to use/troubleshoot SWProxy locally run, and tell the user that this needs to be a last resort solution to be used only if they trust the server and to use at their own risks, etc...

This is low priority and just an idea, doesn't mean it will get implemented.

Find ID for Legendary Scroll

Find and confirm the id of Legendary Scrolls and update inventory_map in plugins/GenerateRunes.py. Right now our best guess is that it's 7

0.99 release

I'm assuming that as @kakaroto is back he will create the release. Do we have any issue blocking the release or any kind of test to do ? @azrethos organized the issue tracker but I'm unsure if everybody is on the same page

Also, are we going to release a non-QT (console) version of SW Proxy ?

I can do the release if someone creates the mac package for me. I have already created a draft with the windows package

Fix logging

I just noticed that with the logging changes I did, if we get an ERROR from the proxy module, it doesn't show anymore in stdout, i.e: try running it twice, the 'Address already in use' exception only shows in proxy.log but not in stdout, and the app exits without any information on why.

Linux - Error when changing proxy port

OS: Ubuntu 14.04
Python: 2.7.6

Hi,

When launching SWProxy with -p parameter, an error it throwed and the process is stopped.

./SWProxy.py -g -d -p8085
########################################
# SWParser v0.98 - Summoners War Proxy # 
########################################
    Written by:
        KaKaRoTo

    Authors:
        Youness Alaoui
        Leonardo Stern
        Azrethos

    Plugins:
        Generate Visit Friend
        Print Unit Collection
        Barion Rune Efficiency Plugin
        Generate Runes
        Demo Plugin

Licensed under LGPLv3 and available at: 
    https://github.com/kakaroto/SWProxy

Running Proxy server at 91.121.211.44 on port [8085]
Traceback (most recent call last):
  File "./SWProxy.py", line 206, in <module>
    start_proxy_server(options)
  File "./SWProxy.py", line 174, in start_proxy_server
    p.run()
  File "/var/www/vhosts/shinsoft.fr/sw/swparser/SWProxy/proxy.py", line 554, in run
    self.socket.close()
AttributeError: 'HTTP' object has no attribute 'socket'

And the error in proxy.log

2016-03-22 17:11:30,946: proxy - ERROR - Exception while running the server TypeError('%d format: a number is required, not list',)
Traceback (most recent call last):
  File "SWProxy/proxy.py", line 540, in run
    logger.info('Starting server on %s, port %d' % (self.hostname, self.port))
TypeError: %d format: a number is required, not list
2016-03-22 17:11:30,947: proxy - INFO - Closing server socket

Exception when running on mac

I get the following error when running on a Mac using python 2.7.6

ERROR - Exception while executing plugin "DemoPlugin": 'command'
Traceback (most recent call last):
  File "SWProxy.py", line 51, in onResponse
    plugin.plugin_object.process_request(req_json, resp_json)
  File "/Users/jfry/Downloads/SWParser-master/plugins/DemoPlugin.py", line 6, in process_request
    print "Found Summoners War API request : %s" % req_json['command']
KeyError: 'command'

This is on the login screen very early in the process (Checking for Updates...)

Problem with swparser mac v0.99.1

Hi, all is good but when I start summoners war the data appears on the window "summoners war proxy" but not in my terminal window..

capture d ecran 2016-04-10 a 16 02 57

Nothing logged, but proxy working

Heya. I have been unable to get a log for a while now. I run swproxy.exe, get the phone connected to the proxy, but it makes no proxy.log or any of the various log files for the optimzer or swarfarm. I know the proxy is working at the correct port, because I cannot load any web pages as soon as I turn off the proxy. I am perplexed as to why I am not getting a proxy.log or anything. I do have it unzipped to c:\SWProxy as I had heard that is where it works by default. Anyone have any ideas?

Figure out where logging code went & consider moving to a plugin

@kakaroto do you remember at one point there was logging code; i believe it logged cairos runs to a csv file; it certainly was a good candidate for a plugin, (AFAIK the code is not in master in any form now). I wanted to explore moving it to a plugin; perhaps disabled by default?

Additionally how do you suggest we setup the concept of "disabled" plugins, (perhaps a folder? similar to sites-available sites-enabled for apache etc, [then they could be enabled via drag in drop by users])

KeyError: 'wizard_info'

Running version 0.94:

Traceback (most recent call last):
  File "SWParser.py", line 85, in parse_pcap
    parse_login_data(resp_json)
  File "/Users/justin.papez/Downloads/SWParser-0.94/SWParser/parser.py", line 244, in parse_login_data
    wizard = data['wizard_info']
KeyError: 'wizard_info'

Grindstone/Enchant inventory data

Is the data for unused grindstones & enchant gems buries somewhere (it must be)? I would be nice if this data could be packaged up and added to the optimizer file so it could at least list in a tab similar to the "adv rune" tab.

Project Not Compatible with GPL

The project has a GPL license, but the decryption code is a compiled binary only. This is not definitely not compatible with the GPL.

Out of curiosity, is there any reason the smon_decrypt library is not available as source?

Mac Installation Instructions

In the installation instructions for Mac users. Under the "setup.py install" an additional note about using "python setup.py install" would be very helpful for some users. I ran into this issues personally. Using Mac OS 10.10.5 with Python 2.7.11 installed. Sorry if this is the wrong place to submit this. First time posting in GitHub.

IP adress wrong?

on the new version 0.99.1 i cant download my awdata anymore, and i didnt change anything... last time i used version 0.97 which functioned perfectly and this version does nothing the only differents between them is their IP Adress, so can this be the problem?
(i have tried all solutions to solve the problem which you have wrote into the info)

![version99](https://cloud.githubusercontent.com/assets/10314332/14206469/9e52aa30-f813-11e5-9452-35c71c8d9f2f.png
here it doesnt work

version97
here it worked before patch XXXXX of summonerswar

What am I doing wrong?

Last login: Sun Mar 27 13:34:22 on ttys000
[] ruby-2.2.1 $ sudo -H easy_install pycrypt dpkt yapsy
Searching for pycrypt
Reading https://pypi.python.org/simple/pycrypt/
Couldn't find index page for 'pycrypt' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
No local packages or download links found for pycrypt
error: Could not find suitable distribution for Requirement.parse('pycrypt')
[
] ruby-2.2.1 $

Also apparently the yapsky plugins do not exist in these packages. Please help!

Move the barion efficiency into a plugin

The barion efficiency formula would benefit from being its own plugin, now with the new plugin system, it would be nice to even allow one plugin (rune extractor) to use other plugins to extend its functionality (add a new csv column).
I'm thinking plugins would have access to the plugins list, and we could use a csv.DictWriter, and plugins could have the method :

def process_csv_row(row, type, data)
    row['new_column'] = 'value'
    return row

where 'type' argument would be 'rune' or 'monster' or 'friend_rune', or 'scenario_run',etc.. these could be anything that the plugin that creates a CSV wants it to be (they'd need to be unique among plugins), and 'data' argument would be specific to the plugin, so for example 'rune' type would have a rune dictionary as 'data', etc...

Build a real Mac App

I see so many people completely lost on Mac, they don't even know how to change directory in a terminal. Having a single .app that they can double click and it opens for them (bundled with the dependencies) would be great. Would probably require the gui (issue #20) to be done first.

Chat plugin?

I am not sure if this is the appropriate place for suggestion, etc.

A chat plugin or some functionality would be helpful. Something that captures the chat messages and echos to console or store in file. I know I would find it useful to be alert when I get raid invites or certain individuals chat.

I do not think chat uses http so I a different kind of packet would need to be captured/parsed.

Unable to sync. (Again)

So is it just me or we can't sync the swproxy with the game again prior to the latest application?

Guild Attack List

As guildmaster i would like monitoring attacks of my guildmates.

Please make detailed List of Attacks from Guild Battle Log with next breakdown:
OppGuild_name, Guildmate_name, Oppguildmate_name, win/loss, Guildpoints_acquired, Max_guildpoints_from_GuildBattle.

Thanks

How does it work? (Windows) No executables.

Does it no longer support windows? Well, I'm sure it does because windows supports python... but there isn't a guide for using it on windows. It only explains mac and linux.

http://puu.sh/nUkvt/c85b2f1556.png

Edit: Just saw in an unrelated / closed issue, that it wasn't ready for .exes to be built yet. Did someone jump the gun by posting to reddit? :p

Minor UI Improvements

Just a few minor improvements to the UI...

The UI should auto scroll to the bottom as new items are added to the list.

Also, "Found Summoners War API Request: ##" could include the summoner's id. I have multiple accounts running on the proxy so it would be useful to see which account each item is associated with.

Not gathering data

When I run SWproxy.py i get this, and when i open my SW the data doesnt gathers.

Admins-iMac-2:~ admin$ /Users/admin/Downloads/SWProxy-0.99.1/SWProxy.py ; exit;

SWParser v0.99 - Summoners War Proxy

Written by:
    KaKaRoTo

Authors:

Plugins:

Licensed under LGPLv3 and available at:
https://github.com/kakaroto/SWProxy

# ## Failed to load GUI dependencies. Switching to CLI mode
Running Proxy server at 192.xxx.x.x on port 8080

Trying to run SWParser with a pcap file from wireshark.

Since SWProxy seems to be having some issues at the moment, I used Charles and Wireshark to grab a pcap file and I'm trying to put it through the decryption routine (Skroll did this successfully in #83).

I'm trying this in the SWProxy project folder:

> python SWParser.py myPCAPfile.pcap

But I'm getting this error:

Traceback (most recent call last):
  File "SWParser.py", line 3, in <module>
    from SWParser import parse_login_data, parse_visit_data
ImportError: cannot import name parse_login_data

Am I doing something wrong or is this because SWParser is no longer meant to be run by itself?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.