sentanos / roblox-js Goto Github PK
View Code? Open in Web Editor NEW!!!THIS PROJECT IS NO LONGER MAINTAINED!!! Execute ROBLOX website actions in node.js
License: MIT License
!!!THIS PROJECT IS NO LONGER MAINTAINED!!! Execute ROBLOX website actions in node.js
License: MIT License
Exact error:
Error: Invalid permissions, make sure the user is in the group and is allowed to handle join requests at path\node_modules\roblox-js\lib\util\handleJoinRequestId.js:29:13 at tryCatcher (path\node_modules\bluebird\js\release\util.js:16:23)
I know for a fact that sending PMs, promotion, and all other functions I have tried so far relating to groups and the account (which is ranked in the target group with join request roles, as I am able to get pending join requests) has no permissions error.
Perhaps an API change?
Dear Sentanos,
Is there a method to delete an item or model from a rbx.user inventory? if not, is there another resource to do so, or can you add one?
Also how to check if a user owns an item?
Thanks.
When hosting on cloud9, starting the Discord bot and logging into the account this error occurs : (I believe it's a roblox-js error)
Unhandled rejection RequestError: Error: ETIMEDOUT
at new RequestError (/home/ubuntu/workspace/node_modules/request-promise/lib/errors.js:14:15)
at Request.RP$callback [as _callback] (/home/ubuntu/workspace/node_modules/request-promise/lib/rp.js:60:25)
at self.callback (/home/ubuntu/workspace/node_modules/request/request.js:188:22)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at Timeout._onTimeout (/home/ubuntu/workspace/node_modules/request/request.js:855:16)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
Output:
Getting players
Unhandled rejection TypeError: rbx.getPlayers(...).then is not a function
at C:\Users\Michael\Documents\RobloxNode\nodejs\exile.js:13:4
at tryCatcher (C:\Users\Michael\Documents\RobloxNode\nodejs\node_modules\blu
ebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\Michael\Documents\RobloxNode
nodejs\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (C:\Users\Michael\Documents\RobloxNode\nodejs\node
_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (C:\Users\Michael\Documents\RobloxNode\nodejs\nod
e_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (C:\Users\Michael\Documents\RobloxNode\nodejs\nod
e_modules\bluebird\js\release\promise.js:693:18)
at Async._drainQueue (C:\Users\Michael\Documents\RobloxNode\nodejs\node_modu
les\bluebird\js\release\async.js:133:16)
at Async._drainQueues (C:\Users\Michael\Documents\RobloxNode\nodejs\node_mod
ules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (C:\Users\Michael\Documents\RobloxNode\nodejs
\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:651:20)
at tryOnImmediate (timers.js:624:5)
at processImmediate [as _immediateCallback] (timers.js:596:5)
Code:
var rbx = require('roblox-js');
rbx.login("Username", "Password")
.then(function(){
rbx.follow(23701121);
});
Error:
Unhandled rejection Error: Follow failed
at C:\Users\user\Desktop\NodeJS\node_modules\roblox-js\lib\user\follow.js:33:13
at tryCatcher (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\promise.js:693:18)
at Async._drainQueue (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\async.js:133:16)
at Async._drainQueues (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (C:\Users\user\Desktop\NodeJS\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)
at processImmediate [as _immediateCallback] (timers.js:611:5)
After checking what causes this I found out that the following if statement was not return true:
if (res.statusCode === 200) {
After printing out the statusCode I found out that ROBLOX is actually returning statuscode 302 when statuscode 200 is expected.
Always returns with the account not being able to find the user/user doesn't exist.
Link - http://prntscr.com/evqqlr
Can you provide an example demonstrating how to use this library to purchase an ad, please? I can't find that specific functionality in the wiki nor in the code.
Thanks
I've searched around and didn't seem to find any support to get whatever is inside the top status bar that is on players profile. Does this actually exist with roblox-js or do we have to make this ourselves?
Is it currently possible to get a user's age? If not, would it be possible to add this feature in a future version, either as the player's join data or the number of days since they joined?
so this is my current code
var rbx = require('roblox-js');
console.log('started');
var obj = rbx.getPlayers(2901888)
and it logged the following:
started
Http error: RequestError: Error: CERT_UNTRUSTED
at new RequestError (/home/ubuntu/node_modules/request-promise/lib/errors.:14:15)
at Request.RP$callback [as _callback] (/home/ubuntu/node_modules/request-pmise/lib/rp.js:60:25)
at self.callback (/home/ubuntu/node_modules/request/request.js:187:22)
at Request.EventEmitter.emit (events.js:95:17)
at Request.onRequestError (/home/ubuntu/node_modules/request/request.js:818)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at CleartextStream.socketErrorListener (http.js:1547:9)
at CleartextStream.EventEmitter.emit (events.js:95:17)
at SecurePair.<anonymous> (tls.js:1389:19)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:982:10)
at CleartextStream.read [as _read] (tls.js:469:13)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.write [as _write] (tls.js:366:25)
at doWrite (_stream_writable.js:223:10)
at writeOrBuffer (_stream_writable.js:213:5)
Unhandled rejection SyntaxError: Unexpected token u
at Object.parse (native)
at /home/ubuntu/node_modules/roblox-js/lib/util/getRoles.js:16:20
at tryCatcher (/home/ubuntu/node_modules/bluebird/js/release/util.js:16:23
at Promise._settlePromiseFromHandler (/home/ubuntu/node_modules/bluebird/jrelease/promise.js:510:31)
at Promise._settlePromise (/home/ubuntu/node_modules/bluebird/js/release/pmise.js:567:18)
at Promise._settlePromise0 (/home/ubuntu/node_modules/bluebird/js/release/omise.js:612:10)
at Promise._settlePromises (/home/ubuntu/node_modules/bluebird/js/release/omise.js:691:18)
at Async._drainQueue (/home/ubuntu/node_modules/bluebird/js/release/async.:138:16)
at Async._drainQueues (/home/ubuntu/node_modules/bluebird/js/release/asyncs:148:10)
at Async.drainQueues (/home/ubuntu/node_modules/bluebird/js/release/async.:17:14)
at process._tickCallback (node.js:415:13)
at Async._drainQueues (C:\Users\Dev\Desktop\misc\exileAllFromRank\node_modul
es\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (C:\Users\Dev\Desktop\misc\exileAllFromRank\n
ode_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)
at processImmediate [as _immediateCallback] (timers.js:611:5)
The errors come crashing down.
https://pastebin.com/4iu0znNY
Says time: 0.624 MS and then doesn't do anything to group.
+-- UNMET PEER DEPENDENCY bufferutil@^3.0.2
+-- UNMET PEER DEPENDENCY erlpack@hammerandchisel/erlpack
+-- UNMET PEER DEPENDENCY libsodium-wrappers@^0.5.4
+-- UNMET PEER DEPENDENCY node-opus@^0.2.6
+-- UNMET PEER DEPENDENCY opusscript@^0.0.3
+-- [email protected]
+-- UNMET PEER DEPENDENCY sodium@^2.0.1
`-- UNMET PEER DEPENDENCY uws@^0.14.5
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"ia32"})
npm WARN [email protected] requires a peer of bufferutil@^3.0.2 but none was installed.
npm WARN [email protected] requires a peer of erlpack@hammerandchisel/erlpack but none was installed.
npm WARN [email protected] requires a peer of node-opus@^0.2.6 but none was installed.
npm WARN [email protected] requires a peer of opusscript@^0.0.3 but none was installed.
npm WARN [email protected] requires a peer of sodium@^2.0.1 but none was installed.
npm WARN [email protected] requires a peer of libsodium-wrappers@^0.5.4 but none was installed.
npm WARN [email protected] requires a peer of uws@^0.14.5 but none was installed.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.```
I believe I've noticed an issue after a few days of using this API. I've been modifying my code to see if is anything on my part, but I I am 90% sure it isn't. I have a Node server running 24/7, but after I see the following in the console, it doesn't seem as if the onMessage event fires anymore.
Scheduled Reconnection: Error: read ECONNRESET
Reconnected!
Help is greatly appreciated.
I login with my account, which has no issues. As I wish to repeat the same action every ten minutes, there is a delay of 10 minutes. When the bot then attempts to getPlayers in my group, it returns a ECONNRESET error.
This error is not caused when there is no delay.
Full error:
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:874:11)
at TLSWrap.onread (net.js:544:26)
Code:
.then(function () {
console.log(da + ' Logged in with account ' + username);
rank();
function rank() {
setTimeout(function () {
console.log('Started!');
var promise = rbx.getPlayers(groupID, getPlayersID);
console.log(da + ' Getting Players in rank ' + getPlayersID);
promise.then(function (res) {
var plrs = res.players;
if (plrs.length == 0) {return console.log('No Players to rank')}
for (i = 0; i < plrs.length; i ++) {
var d = new Date()
var da = '' + (d.getHours() + 1) + ':' + (d.getMinutes() + 1) + ':' + (d.getSeconds() + 1);
console.log(da + ' User ' + plrs[i].name + ' was ranked');
rbx.setRank(groupID, plrs[i].id, RankTO)
.then(function (newRole) {
});
}
})
}, 600000)
}
});
If this is an issue with my code, I apologise greatly.
I am trying to write my own function, but i actually never got to the function yet. I am trying to handle it using the server.js. This is the code i have for that.
I am getting an error back from the wrap.js saying that a required field is missing, and i have no idea what that means because the only required field is array and nothing else, and i had it log the opt variable and the array field is there.
How would you wait for the promise to be returned without it causing an error?
Hi,
When I write the following code:
rbx.login(username, password).then(function() {
rbx.message(186642658, 'Welcome', 'Welcome to my group');
});
It errors in red with the following message: "Unhandled rejection Error: Message failed"
What am I doing wrong? Is there anything I can fix?
Thanks.
EDIT:
Same goes with following:
rbx.login(username, password).then(function() {
rbx.follow(186642658);
//rbx.message(186642658, 'Welcome', 'Welcome to my group');
});
"Unhandled rejection Error: Follow failed"
Hi. I'm using the roblox-js-server api and when I use the setRank method like so api.setRank(player.UserId, GroupID, 12)
is says that the role aka the last thing in the argument does not exist.
In the docs it says to use it like api.SetRank(GroupID, UserId, RoleID)
however, when I do it that way I get
"Set rank failed: Target user 3272666 is not in group 327266"
For some reason, the user id that I put is being ignored and it's just using the group id as the user id. Anyone know how to fix this?
Trying to do this:
http://pastebin.com/Bj4mEwrN
I get an internal server error and these are some errors i get:
A required argument is missing
at Object.groupPayout (/home/susa/public_html/immigration/roblox-js-server/node_modules/roblo x-js/lib/util/wrap.js:67:19)
at /home/susa/public_html/immigration/roblox-js-server/server.js:344:7
at Layer.handle [as handle_request] (/home/susa/public_html/immigration/roblox-js-server/node _modules/express/lib/router/layer.js:95:5)
at next (/home/susa/public_html/immigration/roblox-js-server/node_modules/express/lib/router/ route.js:131:13)
at authenticate (/home/susa/public_html/immigration/roblox-js-server/server.js:129:5)
Wrong one, closing
When using events (such as onMessage) does the 'bot' need to be logged in like so:
var rbx = require('roblox-js');
var onMessage = rbx.onMessage();
rbx.login('*****','*****')
.then(function (info) {
onMessage.on('data', function (message){
onMessage.emit('handle', message, true, function() {
const body = 'sdhdk';
rbx.message(message.sender.name,'Dear user',body)
.then(function (info){
console.log('Worked')
}).catch(function(err){
console.error(err.stack);
});
}).catch(function(err){
console.error(err.stack);
});
}).catch(function(err){
console.error(err.stack);
});
}).catch(function(err){
console.error(err.stack);
});
When I use rbx.buy(809988794), the script doesnt purchase the shirt and instead seems to try and purchase something totally different.
Code & Output:
rbx.buy(shirt_id)
.then(function(msg){
var msg = JSON.stringify(msg);
console.log("[Group 1]: Balance Stage 3 | Purchased Shirt. msg: " + msg);
[Group 1]: Balance Stage 3 | Purchased Shirt. msg: {"productId":74233074,"price":250}
ROBLOX has pushed an update to stop users from being spammed with bots making you buy robux, etc.
That being an update that requires you to complete a CAPTCHA when attempting to add someone as your friend.
There's no work-around to it.
-----> App not compatible with buildpack: https://codon-buildpacks.s3.amazonaws.com/buildpacks/heroku/nodejs.tgz
More info: https://devcenter.heroku.com/articles/buildpacks#detection-failure
! Push failed
I've added node js as a buildpack for the server but it still won't work.
One function to rule them all. Just a function that combines getting the Blurb, Status, Username, Age, etc. all into one function and returns the data in an array.
Code - https://hastebin.com/pofaderila.js
Error - http://prntscr.com/gbgb9n
tl;dr - I don't understand what I'm doing wrong, I've spent the last few days trying to fix this issue, but I'm truly lost.
This is ROBLOX's problem once again. They better fix it soon because I would not be thrilled to change the APIs for a second time.
The rbx user logged in has full group permissions to set ranks, shout etc. The target user is in the group as well. However i keep getting this persistent error within the command prompt upon running one of the functions. https://gyazo.com/82ad309adca128a27389cbf9d02f49b5 This all worked for me the first time i set it up, however it is not working now. Perhaps ROBLOX changed something on their API?
Hey, does anyone know how to use this with a discord bot?
Hello, when I try to download it says no description found, no respiratory found! So, how would I be able to use this, please help!
I've recently begun trying to use discord to manage a roblox bot, and I've been building a command to grab all the messages in the inbox.
My code is:
bot.on('message', (message) => {
if(message.content.toLowerCase() == ".getmessages") {
const man = bot.channels.get(Management_channelID);
rbxlogin()
.then(function () {
var msgs = robloxjs.getMessages();
robloxjs.getMessages()
.then(function (inbox) {
//man.send(inbox.messages.sender.name + " " + inbox.messages.subject + " " + inbox.messages.body);
console.log(inbox.messages.message);
});
});
};
});
The bot also does log in at the very bottom, but whenever I attempt to log a message in the console it will either work (with console.log(inbox.messages);) or not work and return undefined. I've also attempted to send messages to the management channel using just inbox.messages and it ends up returning a whole lot of [object Object]. Is there anything I can do to have discord properly post messages with a sender subject and body, or even just the entire message itself?
#This error keeps popping up every time I try to send a message, and yes I am logged in. I've made sure I was logged in by making the function wait until I was sure the bot was logged in and logging to the console, but it's still giving me this error.
Any help?
Error: "Error from getToken2: Failed to retrieve X-CSRF-TOKEN"
Can be recreated by
rbx.login(options); // options table is populated correctly
rbx.message(7177436, "hi", "test");
also please make an example for rbx.message I don't know if I'm doing it correctly.
I've been trying to create my bot as some sort of verification bot using roblox's blurb feature. I searched around inside Roblox-Js and came up with GetBlurb inside of util. I'm not sure if that effects it, but when I attempt to run it I get this error:
Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }
I'm not sure what that means, and am hoping for some assistance.
-Thanks!
It would be nice if you could add the enhancement tag to this since I am just suggesting a feature and providing some code that works with it.
So I decided it would be cool if you could get item Information first, since you have the buy command, but what if you have no clue what you are buying and want to find out information on it. So I decided to add a JS file called getItemInfo. it grabs a ton of item info when used. This includes things like Who created it, the item description. Its price in robux, if it is a limited item and a whole lot more.
Here is the code.
// Includes
var http = require('./http.js').func;
// Args
exports.required = ['assetID'];
// Define
exports.func = function (args) {
var httpOpt = {
url: '//api.roblox.com/Marketplace/ProductInfo?assetId=' + args.assetID,
options: {
resolveWithFullResponse: true,
method: 'GET',
followRedirect: false,
jar: jar
}
};
return http(httpOpt)
.then(function (res) {
if (res.statusCode !== 200) {
throw new Error('You are not logged in.');
} else {
var json = JSON.parse(res.body);
var result = (option ? json[option] : json);
return result;
}
});
};
I put the JS file inside of lib/util and run it using
var ItemID = 1;
rbxlogin().then(function () {
robloxjs.getItemInfo(ItemID).then(function (info) {
console.log(info)
});
});
I built this because I got really bored, and gave up attempting to build something to get the player's status.
Code:
getBlurb($hi); echo($blurb); ?>Error:
Notice: Undefined index: id in /var/www/html/blurb.php on line 2
Warning: require(roblox-js): failed to open stream: No such file or directory in /var/www/html/blurb.php on line 3
Fatal error: require(): Failed opening required 'roblox-js' (include_path='.:/usr/share/php') in /var/www/html/blurb.php on line 3
I fixed that error before i posted about but totally getting a new one, the response from roblox. I was hoping you can help me out.
This is just testing so i used the encoded version that roblox does when you tamper the post. So this is my actual sendtrade function
and this is the string "array" i am executing with:
I am pretty sure i did everything right as for this test version but roblox returns that there was an error processing the request.
It throws the following error regardless of which account I use and which group I try to join.
Unhandled rejection Error: Failed to join group, verify that you have enough group space
at C:\Users\Josh\node_modules\roblox-js\lib\group\joinGroup.js:17:13
at tryCatcher (C:\Users\Josh\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\Josh\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (C:\Users\Josh\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (C:\Users\Josh\node_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (C:\Users\Josh\node_modules\bluebird\js\release\promise.js:693:18)
at Async._drainQueue (C:\Users\Josh\node_modules\bluebird\js\release\async.js:133:16)
at Async._drainQueues (C:\Users\Josh\node_modules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (C:\Users\Josh\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:672:20)
at tryOnImmediate (timers.js:645:5)
at processImmediate [as _immediateCallback] (timers.js:617:5)
Code:
var username = "" //These values were removed for this issue
var password = ""
var rbx = require('roblox-js');
rbx.login(username, password)
.then(function () {
console.log("Successfully logged in with account " + username);
process.on('uncaughtException', err => {
log(err.stack);
});
var promise = rbx.joinGroup(group);
promise.then(function (res) {
console.log('User ' + username + 'Successfully joined group ' + group);
});
});
I would like to make a few suggestions/additions to the main functions:
onMessage() -- Executes when the bot receives a message (Use the ROBLOX notifications to catch this event maybe?)
Addition to message() -- If the player cant be messaged, have the bot follow them and then try, if still no skip over that person.
Every time I run the code below, I receive a, "Maximum call stack size exceeded", message.
Code...
if (message.content.startsWith(prefix + "shout")) { let modRole = message.guild.roles.find("name", "admin"); if (!message.member.roles.has(modRole.id)) { return message.author.send("You can't run the shout command!") } else{ let args = message.content.split(" ").slice(1); rbx.shout(3413402, args[1], jar) message.channel.send("I've successfully shouted that message!") } let channel = bot.channels.get('344621842289524746') const embed = new Discord.RichEmbed() .setColor('0x32b55b') .addField('Action(s) Taken', "Shouted Message!") .addField('Administrator',
${message.author}) .addField("User's Message",
${message.content}) bot.channels.get(channel.id).sendEmbed(embed) }
Error...
function arrayClone(arr, n) {
^
RangeError: Maximum call stack size exceeded
at arrayClone (events.js:514:20)
at emitNone (events.js:108:21)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (/Users/OnlyJumpAdministrator/Desktop/SOVEREIGN/botstuff/node_modules/request/request.js:950:39)
at emitNone (events.js:105:13)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (_http_client.js:370:11)
at emitNone (events.js:110:20)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (/Users/OnlyJumpAdministrator/Desktop/SOVEREIGN/botstuff/node_modules/request/request.js:950:39)
at emitNone (events.js:105:13)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (_http_client.js:370:11)
at emitNone (events.js:110:20)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (/Users/OnlyJumpAdministrator/Desktop/SOVEREIGN/botstuff/node_modules/request/request.js:950:39)
at emitNone (events.js:105:13)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (_http_client.js:370:11)
at emitNone (events.js:110:20)
at IncomingMessage.emit (events.js:207:7)
at IncomingMessage. (/Users/OnlyJumpAdministrator/Desktop/SOVEREIGN/botstuff/node_modules/request/request.js:950:39)
Hi, firstly thank you for this really useful library.
I've been using it successfully for a while now but I think the group that I'm monitoring has become too large.
We have over 2,500 members and recently getPlayers started to return nearly 8,000 players. In this case there are only 420 unique users and each is duplicated 19 times.
The groupID is 3146600.
Is this a known issue?
many thanks
fixed
[Primary] login complete.
[Primary] Token Connected.
[Primary] Sent A Payout.
events.js:141
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at exports._errnoException (util.js:870:11)
at TLSWrap.onread (net.js:544:26)
The documentation relating to involving writable streams is poor. There are no examples of how to set this up, and it appears that each 'chunk' is not the complete JSON despite what some of the documentation says.
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.