steam-chat/client.js

114 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-10-10 13:59:17 +08:00
const SteamID = require('steamid');
const SteamUser = require('steam-user');
const SteamTotp = require('steam-totp');
const SteamCommunity = require('steamcommunity');
2024-10-17 11:27:40 +08:00
const fs = require('fs');
const winston = require("winston");
2024-04-28 10:21:21 +08:00
2024-10-17 11:27:40 +08:00
const logger = winston.createLogger({
2024-04-28 10:21:21 +08:00
level: 'info',
format: winston.format.json(),
2024-10-10 13:59:17 +08:00
defaultMeta: { service: 'steam-logger' },
2024-04-28 10:21:21 +08:00
transports: [
new winston.transports.Console(),
]
});
const users = {};
const steamUser = new SteamUser();
2024-10-10 13:59:17 +08:00
const steamCommunity = new SteamCommunity();
2024-04-28 10:21:21 +08:00
steamUser.setOption("renewRefreshTokens", true);
steamUser.on("refreshToken", (refreshToken) => {
logger.info("Refresh token: " + refreshToken);
fs.writeFileSync('refresh.token', refreshToken);
});
2024-10-17 11:27:40 +08:00
const config = require("./config.js");
2024-04-28 10:21:21 +08:00
try {
refreshToken = fs.readFileSync('refresh.token', 'utf8');
if (refreshToken && refreshToken.length > 0) {
const LogOnOptionsAUTO = {
logonID: config.logonID,
refreshToken: refreshToken,
steamID: config.steamID,
};
steamUser.logOn(LogOnOptionsAUTO);
} else {
steamUser.logOn({
accountName: config.accountName,
password: config.password,
logonID: config.logonID,
steamID: config.steamID,
});
}
} catch (e) {
logger.warn(`failed to load session: ${e.message}`)
steamUser.logOn({
accountName: config.accountName,
password: config.password,
logonID: config.logonID,
steamID: config.steamID,
});
}
2024-10-14 11:25:57 +08:00
2024-10-17 11:27:40 +08:00
steamLoginPromise = new Promise((resolve, reject) => {
steamUser.on('loggedOn', async () => {
logger.info(`login to Steam as ${steamUser.steamID}`);
2024-10-10 13:59:17 +08:00
2024-10-17 11:27:40 +08:00
resolve();
});
2024-10-10 13:59:17 +08:00
});
2024-10-17 11:27:40 +08:00
steamWebLoginPromise = new Promise((resolve, reject) => {
steamUser.on('webSession', async (sessionID, cookies) => {
logger.info(`web session received: ${sessionID}`);
webLogOn = true;
steamCommunity.setCookies(cookies);
steamCommunity.startConfirmationChecker(10000, config.identitySecret);
resolve()
});
2024-04-28 10:21:21 +08:00
});
async function getUserInfo(steamID, onUserInfoReceived) {
2024-10-02 00:16:00 +08:00
if (typeof steamID !== 'string') {
steamID = steamID.getSteamID64();
}
let sender = users[steamID];
2024-04-28 10:21:21 +08:00
// if user is not cached
if (!sender) {
try {
let personasResult = await steamUser.getPersonas([steamID]);
2024-10-02 00:16:00 +08:00
users[steamID] = personasResult.personas[steamID];
sender = users[steamID];
2024-04-28 10:21:21 +08:00
onUserInfoReceived(sender);
// noinspection ES6MissingAwait
logger.info("user data received: " + JSON.stringify(sender));
} catch (err) {
logger.error("an error occurred while getting user data: ", err);
sender = {
player_name: "Unknown",
};
}
}
return sender;
}
module.exports = {
2024-10-17 11:27:40 +08:00
logger: logger,
2024-04-28 10:21:21 +08:00
steamUser: steamUser,
2024-10-10 13:59:17 +08:00
steamCommunity: steamCommunity,
2024-04-28 10:21:21 +08:00
getUserInfo: getUserInfo,
2024-10-17 11:27:40 +08:00
steamLoginPromise: steamLoginPromise,
steamWebLoginPromise: steamWebLoginPromise,
2024-04-28 10:21:21 +08:00
}