Jump to content
McKay Development

Recommended Posts

I have several questions that I have been looking for an answer for a long time.

Some of my questions are more for a node js, sorry for that. And thanks in advance for your help!
 
1:
If I need to decline/delete incoming offers that were not accepted in 10 minutes, would this be the right?
Maybe there are any cases, why can it be a bad option?
manager.on("newOffer", (OFFER) => {
    setTimeout(function() {
        OFFER.decline();
    }, $MINUTE * 10);

2:

I have to save completed trades. If not - sometimes some of them work 2-3 times. Why?
// "pollInterval": "10000",
// "dataDirectory": "./pool_data",
// "savePollData": true

var completedTrades = [];
manager.on("sentOfferChanged", (OFFER) => {
    if (completedTrades.indexOf(OFFER.id) >= 0) {
        console.log("aborted");
        return;
    }
    if (OFFER.state == 3) {
        completedTrades.push(OFFER.id);
        console.log("completed");

//Log: completed aborted aborted
3:
In some trading offers I add data:
trade.data("somedataname", myvar.toString());

After i check it this way (Is this correct or can it be different?):

manager.on("sentOfferChanged", (OFFER) => {
    if (!!OFFER.data("somedataname")) {
        console.log("trade with somedataname");

4:

If I want to make a counter offer to a user (not on the list of friends) - will it work as I am create a new offer?
manager.on("newOffer", (OFFER) => {
    let trade = OFFER.counter();
    trade.getUserDetails((ERR, BotDetails, UserDetails) => {
      OFFER.itemsToGive = [];
      OFFER.itemsToReceive = [];
      //... add items
        trade.send((ERR) => {

5:

How can I use more than 1 appid / txid?

manager.getUserInventoryContents(SENDER, 753, 6, true, (ERR, USERINVENTORY) => {

Here I will get only Steam (753-6);

What should I do to add for example TF items (440-2)

 

Link to comment
Share on other sites

  1. That might work, but I wouldn't recommend using it as you'd be calling decline on offers that might have already been accepted. I would use offerList and check the creation time of the offers.
  2. I don't understand the question. sentOfferChanged is being emitted multiple times for the same offer with state 3?
  3. That looks correct.
  4. Actually, no. That's a bug. As a workaround you can use getUserDetails on the original offer that you're countering. Also, you should never reassign itemsToGive or itemsToReceive. Use the add(My/Their)Item(s) methods instead.
  5. You can't. You need to call it once per appid/contextid.
Link to comment
Share on other sites

  • 8 months later...

I still have a problem using getUserDetails

Should I use getUserDetails before OFFER.counter ? Or maybe i can use for (let trade), which i create?

Could you check and tell me the best option that I should use? Thanks!

manager.on("newOffer", (OFFER=> {
    OFFER.itemsToGive = []; // removeTheirItems(OFFER.itemsToReceive);
    OFFER.itemsToReceive = []; // removeMyItems(OFFER.itemsToGive);
 
    //NOTE: Should I do this?
    // OFFER.getUserDetails((ERR, BotDetails, USERDETAILS) => {
    // if (ERR) return;
    // });
 
    //NOTE: Or:
    // OFFER.getUserDetails((ERR, BotDetails, USERDETAILS) => {
    // if (!ERR && USERDETAILS.escrowDays <= 3) {
    // let trade = OFFER.counter();
    // GoTrade(OFFER.partner, "trade", {tradedata: trade});
    // }
    // });
 
    GoTrade(OFFER.partnernull, {offerdata: OFFER});
});
 
client.on("friendMessage", (SENDERMSG=> {
    if (MSG == "trade") {
        GoTrade(SENDERMSG, {});
    }
    if (MSG.indexOf("https://steamcommunity.com/tradeoffer/new/?partner=">= 0) {
        GoTrade(nullnull, {tradelink: MSG});
    }
});
 
function GoTrade(SENDERMSGOPTIONS) { // SID, MSG, { OFFER, trade or tradelink }
    let trade;
    if (OPTIONS.offerdata) {
        trade = OPTIONS.offerdata.counter();
    } else if (OPTIONS.tradelink) {
        //TODO:
    } else if (OPTIONS.tradedata) {
        trade = JSON.stringify(tradedata);
    } else {
        trade = manager.createOffer(SENDER);
    }
    trade.getUserDetails((ERRBotDetailsUSERDETAILS=> {
        if (ERR) {
        //NOTE: Should I do this?
        // if (ERR && !OPTIONS.offerdata) {
            if (ERR.toString().indexOf("user_inventory_hidden">= 0) {
                //...
            } else if (ERR.toString().indexOf("user_cant_trade">= 0) {
                //...
            } else if (ERR.toString().indexOf("USER_NOT_FRIEND">= 0) {
                //...
            } else {
                //...
            }
        } else if (USERDETAILS.escrowDays > 3) {
            //...
        } else {
            // manager.getUserInventoryContents( ... ) => {
                // trade.addMyItems( ... );
                // trade.addTheirItems( ... );
                // trade.setMessage( ... );
                    // trade.send((ERR) => {
        }
    });
};

Also, I don’t understand how it works counter(). How does Steam know if I can send counter or not? Can i send more than one counteroffer usung duplicate()?

Link to comment
Share on other sites

getUserDetails cannot be called unless an offer is active, so you need to use it before you send a counter offer.

Using the counter() method will return a new, unsent trade offer object which, when sent, will be sent as a counter offer. Each offer can only be countered once, so if you try to send two counter offers (either by calling counter() twice or by calling duplicate() on a counter offer), it won't work.

In essence, the ID of a trade offer sent to you can be used in place of a trade offer access token (sort of, not literally) in order to send a trade offer, but only once. Once you send one counter offer, the original offer goes into "Countered" state and it can't be countered again.

Link to comment
Share on other sites

Thanks. I stopped on this option:

function GoTrade(SENDERMSGOPTIONS) { // SID, MSG, { OFFER, trade or tradelink }
    let trade;
    if (OPTIONS.offerdata) {
        // trade = OPTIONS.offerdata.counter(); // old
        trade = OPTIONS.offerdata// NEW
    } else if (OPTIONS.tradelink) {
        //TODO:
    } else {
        trade = manager.createOffer(SENDER);
    }
    trade.getUserDetails((ERRBotDetailsUSERDETAILS=> {
        if (ERR) {
        // ...
        } else {
 
            if (OPTIONS.offerdata) { // NEW
                trade = OPTIONS.offerdata.counter();
            }
            //...
Edited by PonyExpress
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...