DoctorMcKay/node-steam-tradeoffer-manager

Offer State update()

D3s1gn3r opened this issue · 5 comments

Hello, I have a problem with update(callback) method.
I send offer to client with my bot, and when client accept/decline offer, STATE that returns in UPDATE method don't changing. It continue to send me with value 2.

Can you post code showing how you're trying to use it?

export const addItems = (req, res) => {
    res.status(200).end('Add items request added');
    const appid = 570;
    const contextid = 2;
    console.log(req.body)
    console.log(req.params)
    console.log(req.query)
    let items = req.body.items;
    const id = req.body.id;
    User.findOne({ id: id })
        .then(user => {
            console.log('items to send: ', items);
            if (user.tradeLink) {
                const offer = manager.createOffer(user.tradeLink);
                console.log('user tradelink: ', user.tradeLink);
                manager.getInventoryContents(appid, contextid, true, (err, myInv) => {
                    if (err) {
                        console.log(err);
                    } else {
                        offer.getPartnerInventoryContents(
                          appid,
                          contextid,
                          (err, theirInv) => {
                              if (err) {
                                  console.log(err);
                              } else {
                                  items.map(item => {
                                      const theirItem = theirInv.find(their => their.name === item.name);
                                      offer.addTheirItem(theirItem);
                                  });
                                  console.log("TRADE CURRENT STATE *init : ", offer);
                                  offer.send((err, status) => {
                                      console.log("NEW TRADE ERROR: ", err);
                                      let currentTime = moment();
                                      let check = setInterval(() => {
                                          let newTime = moment();
                                          if (newTime.diff(currentTime, 'm') > 3) {
                                              clearInterval(check);
                                              offer.cancel();
                                              io.to(`${req.body.socket}`).emit('error', 'trade offer failed')
                                          }
                                          offer.update((err) => {
                                              //console.log("TRADE ERROR: ", err);
                                              if(err){
                                                console.log("TRADE OFFER ERROR: ", err);
                                              }
                                              else{
                                                console.log("TRADE CURRENT STATE: ", offer);
                                                if (offer.state === 3) {

                                                    clearInterval(check);
                                                    user.inventory = [...user.inventory, ...items];
                                                    user.save((err, result) => {
                                                        io.to(`${req.body.socket}`).emit('deposit', items);
                                                    })
                                                }
                                              }
                                              
                                          });
                                      }, 10000);
                                      if (err) {
                                          console.log(err);
                                      } else {
                                          io.to(`${req.body.socket}`).emit('info', `Sent offer. Status: ${status}.`);
                                          // immediatelly add items
                                          

                                          // user.inventory = [...user.inventory, ...items];
                                          // user.save((err, result) => {
                                              // io.to(`${req.body.socket}`).emit('deposit', items);
                                          // })
                                      }
                                  });
                              }
                          }
                        );
                    }
                });
            } else {
                io.to(`${req.body.socket}`).emit('error', 'Set tradelink, please')
            }
        })
        .catch(err => res.end(err));
};

There you can see the whole function. Then on the line 42 update() func plus on line 49 checking for offerState equal 3 value

Still waiting for Your answer... Sorry for disturbing You

Cleaning up the code would definitely help with finding the problem.

Also I feel using sentOfferChanged event would be better in that situation.

Yes, sentOfferChanged is what you should be using here.