Skip to content
This repository has been archived by the owner on Jun 11, 2022. It is now read-only.

Help with installation #6

Closed
itzkin opened this issue Oct 3, 2013 · 9 comments
Closed

Help with installation #6

itzkin opened this issue Oct 3, 2013 · 9 comments
Labels

Comments

@itzkin
Copy link

itzkin commented Oct 3, 2013

I am very new to all this, please provide some instructions for this.
From what I gather I need to have installed:

  1. http://nodejs.org/

  2. (not sure about this one) https://github.com/Obvious/ursa

  3. https://github.com/RJacksonm1/node-steam (which is somewhat older then https://github.com/seishun/node-steam)

  4. finally install this.
    Am I correct?

@rjackson
Copy link
Member

rjackson commented Oct 3, 2013

Hi

When you install Node.js you also install a tool called npm - which is the node package manager. You can install this library into your projects with simply npm install dota2, and then use it as you would any other library.

If you're wanting to play around with the actual repository, just clone that somewhere on your drive and run npm install in the test directory - npm will open test/package.json and install the required dependencies.

If you run into problems compiling dependencies (which is perhaps why you mentioned ursa - I too had problems with that on Windows iirc) then you need to set up the dependencies for node-gyp, and if you're on Windows you then run the npm install commands through the visual studio command prompt.

I'm using linux as my development platform, so if you are indeed on Windows I might not be able to help you with everything. Regardless, let me know how you get on,

RJ

@itzkin
Copy link
Author

itzkin commented Oct 5, 2013

Thank you for your fast reply.
I am trying to bother you with as few noobish questions as possible. Using Windows this is what I did:

  1. I installed nodejs
  2. I followed this guide to make a steam trade bot http://www.youtube.com/watch?v=ggiTg5_ZO9g
  3. I went in '\GitHub\SteamBot\SteamBot' using git shell
  4. Typed npm install -g node-gyp
  5. Typed npm install dota2
    At this point I got several errors about Python not present. While I had installed Python some time ago it was version 2.6.6.
  6. I updated to 2.7.5 and did npm install dota2 again.
    Now I get errors about missing Visual C++ components. I do have Microsoft visual studio 2012 express, which should be sufficient. But apparently I need more?

Assuming I get this installed correctly do I add it to my SteamBot by adding a using node-dota2 in my handler file?
Will that be enough to use the create practice lobby command or do I have to make my own function to call that?

I suppose I have to assimilate the readme first.

@rjackson
Copy link
Member

rjackson commented Oct 5, 2013

Yes you will need Python for some of the installation scripts.

This library is built to be used with @seishun's node-steam, you write your bot with node-steam and initialize node-dota2 with an instance of that bot, then node-dota2 uses node-steam's API to send and receive messages via that bot. You cannot use this library with any C# or Steamkit-based projects like @Jessecar96's SteamBot.

The ./tests/ directory in the root of this repository is a kind of skeleton on using node-steam and node-dota2 together. Some more examples include MatchProvider-steam.js from my matchurls project, steam_relay.js from my irc_rbotson project (this is node-steam only, no dota 2 code), and also perhaps worth a look is bot.js from my dotapls project - this project was my hacky experimentation with Dota 2 related code that prompted me to write this library.

If you choose to stick with SteamBot or a SteamKit-based project then I can't offer any help. I'm not aware of any dota2 libraries for SteamKit, nor am I experienced with it outside of occasionally browsing it's code for reference.

@itzkin
Copy link
Author

itzkin commented Oct 5, 2013

OK, regarding the visual studio components error earlier I found this http://stackoverflow.com/questions/14278417/cannot-install-node-modules-that-require-compilation-on-windows-7-x64-vs2012 , just have to add --msvs_version=2012 in the end.

I am getting confused. The reason I mentioned ursa was because this line from node-steam Windows note: this module depends on ursa. Follow its installation prerequisites first. I'll just add it as well I guess.

This you write your bot with node-steam is the critical part for me. I have some experience in coding, but I just don't understand what are the initial steps to get something working. If you can direct me to any tutorials/guides how to work with node-steam I would be very grateful.

@itzkin
Copy link
Author

itzkin commented Oct 7, 2013

I finally made some progress. I will post a summary of what I did, hopefully will make the life easier for anybody who stumbles here unprepared like I did.

  1. You need Nodejs ( http://nodejs.org/ ). In one sentence - it is something that runs javascript as console application
  2. With the installation of node you should be able to use the npm command in your console, I don't remember if I did anything else to make that working
    This node-dota2 is dependant on node-steam. Node-steam has its own dependencies, which for windows you have to install manually.
  3. Get Visual studio (there is a free microsoft visual studio called 'express' , you will need to add --msvs_version=2012 for VS2012 when you install stuff with npm)
  4. Get Python . I am working with 2.7.5, (2.6 didn't do it for me)
  5. Get Openssl
    Last 2 steps are needed because node-steam requires https://github.com/Obvious/ursa to run on windows and ursa requires those 2. Things might change over time so check node-steam and ursa descriptions on github.
  6. Go to the folder for your project using the console
  7. Type npm install ursa --msvs_version=2012 to install first dependency
  8. Type npm install steam --msvs_version=2012 to install second dependency
  9. Download this project and put its contents inside the newly created node_modules folder
  10. I needed to copy the folder protobuf from \node_modules\steam\node_modules to \node_modules to make var dota2 = require('dota2') to work. Not sure why...
  11. Copy the file \node_modules\steam\example.js to the root of your project folder
  12. Edit the bot.logOn at line 10 to have your bot's username and password. I had to remove steam guard from my bot cause it was asking for a new code in every launch.
  13. inside the project folder type node example.js in the console and enjoy your bot

Anyway that is how I finally got node-steam to work.
The reason why I am not closing this issue is because I get an error when I add Dota2.launch(); to the node-steam example.js. I have added

var steamClient = new Steam.SteamClient(),
    dota2 = require('dota2'),
    Dota2 = new dota2.Dota2Client(steamClient, true);

, but I get the following error: http://pastebin.com/YTr05Uz2

@rjackson
Copy link
Member

rjackson commented Oct 7, 2013

You need to create a node-steam client and log into Steam with it before node-dota2 can do anything; node-dota2 piggybacks the client, but it doesn't manage it for you.

Here is a simple skeleton:

var steam = require("steam"),
    util = require("util"),
    fs = require("fs"),
    dota2 = require("dota2"),
    bot = new steam.SteamClient(),
    Dota2 = new dota2.Dota2Client(bot, true);

global.config = require("./config");


/* Steam logic */

var onSteamLogOn = function onSteamLogOn(){
        bot.setPersonaState(steam.EPersonaState.Busy); // to display your bot's status as "Online"
        bot.setPersonaName(config.steam_name); // to change its nickname
        util.log("Logged on.");

        Dota2.launch();
    },

    onSteamSentry = function onSteamSentry(sentry) {
        util.log("Received sentry.");
        require('fs').writeFileSync('sentry', sentry);
    },

    onSteamServers = function onSteamServers(servers) {
        util.log("Received servers.");
        fs.writeFile('servers', JSON.stringify(servers));
    };


/* Dota 2 logic */

var onD2Ready = function onD2Ready () {
        console.log("Node-dota2 ready.");

        /* Dota 2 is ready; do things. */
    },

    onD2Unready = function onD2Unready(){
        console.log("Node-dota2 unready.");

        /* Dota 2 is became unready (lost connection to GC / other potential reasons); do any cleanup, if necessary, here. */
    },

    onD2UnhandledMessage = function onD2UnhandledMessage (kMsg) {
        util.log("UNHANDLED MESSAGE " + kMsg);
    }


/* Hook up event listeners */

Dota2
    .on("ready", onD2Ready)
    .on("unready", onD2Unready)
    .on("unhandled", onD2UnhandledMessage);

bot.on("loggedOn", onSteamLogOn)
    .on('sentry', onSteamSentry)
    .on('servers', onSteamServers);


/* Log in to Steam*/

bot.logOn({
    "accountName": config.steam_user,
    "password": config.steam_pass,
    "authCode": config.steam_guard_code,
    "shaSentryfile": fs.readFileSync('sentry')
});
// Configure and mv to config.js
var config = {};

config.steam_name = "";
config.steam_user = "";
config.steam_pass = "";
config.steam_guard_code = "";


module.exports = config;

@itzkin
Copy link
Author

itzkin commented Oct 7, 2013

I am not sure if I understand.
The skeleton that you provide looks a lot like the index.js from the test folder but I can't run either and both provide the same error - http://pastebin.com/5GJ6rjyg
I can't find a file called sentry anywhere.

@rjackson
Copy link
Member

rjackson commented Oct 7, 2013

Make a blank file called 'sentry'. Its simply a place to store a token that identifies the client with Steam Guard - so if you use Steam Guard you only need to verify the logon once.

If you're not using steam guard you can just comment out the related lines.

@itzkin
Copy link
Author

itzkin commented Oct 7, 2013

Thank you!

@itzkin itzkin closed this as completed Oct 7, 2013
jimmydorry pushed a commit that referenced this issue Oct 21, 2015
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants