Meiki
-
Posts
3 -
Joined
-
Last visited
Posts posted by Meiki
-
-
1. That`s the funny thing, I don`t understand why, but when personas is before err, it is just logging into console all the data instead of errors, like:
{ '22222222222222222': { rich_presence: [], persona_state: 3, game_played_app_id: 0, ...etc } }
The only way it works correctly in this order is like this, the problem still persists :
client.getPersonas([receivers[i]], function (personas, err) { if (personas) { console.log(personas) } else { let data = err[receivers[i]].persona_state
2. Actually in the real code I am fetching data row by row from sqlite database, checking for each row a column wasMessagedToday, if it is false, then calling getPersonas() and if messaged successfully, updating wasMessagedToday value in database to true. Maybe there is a better way, but I am an absolute newbie in database stuff.
3. Thank you, thank you!!! I`ve tried already few ways to delay time including setTimeout(checkOnline, 2000) after setting persona to Online, but it wasn`t working. Tried now to increase the delay to 10 seconds and now data from getPersonas() is correct at every run! I guess Steam is really slow with status updates. So the fix looks like this:
client.on('loggedOn', function () { console.log("Logged into Steam as " + client.steamID.getSteam3RenderedID()); client.setPersona(SteamUser.EPersonaState.Online) setTimeout(checkOnline, 10000); });
-
I am trying to create a program, which every specified ammount of time sends a message to my steam friends, if conditions are met. The thing is that I call messaging function after setting bot status to Online, but at the first run client.getPersonas() returns all the users data, like the bot`s persona is offline (most parameters are null or 0). Everything works fine at second and subsequent runs of checkOnline(). Please, I am almost sure this is because of some stupid mistake, but I cannot find this mistake for two days already. Please tell me, where I messed up. Simplified code below.
steam-user v4.25.0
import SteamUser from "steam-user"; import SteamTotp from "steam-totp"; const receivers = [ '11111111111111111', //IDs for example '22222222222222222', ] function main() { const client = new SteamUser(); function steamLogin() { client.logOn({ "accountName": process.env.accountName, "password": process.env.password, twoFactorCode: SteamTotp.generateAuthCode(process.env.twoFactorCode) }); client.on('loggedOn', function () { console.log("Logged into Steam as " + client.steamID.getSteam3RenderedID()); client.setPersona(SteamUser.EPersonaState.Online) checkOnline() //calling the second function }); } function checkOnline() { for (let i = 0; i < receivers.length; i++) { client.getPersonas([receivers[i]], function (personas, err) { if (err) { console.log(err) } else { let data = personas[receivers[i]].persona_state if (data === 1 || data === 2 || data === 3) { client.chat.sendFriendMessage(receivers[i], `It works!`); console.log('Message sent!', receivers[i]) } } }) } setTimeout(checkOnline, 10000); } steamLogin() } main()
need help with client.getPersonas()
in node-steam-user
Posted
1. I am using the latest version of "steam-user", 4.25.0
2. Yes, this is a better implementation, thank you
3. Tried to do this, but now every time at the first run of checkOnline() instead of nonexisting data I receive timeouts, one per every receiver, at the second run everything is fine again. So, I guess, I`ll stuck with setTimeout(). Example of code:
Example of timeout:
Error: Request timed out at Timeout._onTimeout (C:\Users\Andrew\WebstormProjects\Notif-steam-bot\node_modules\@doctormckay\stdlib\components\promises.js:17:12) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7)