diff --git a/chat.js b/chat.js new file mode 100644 index 0000000..ffedb1e --- /dev/null +++ b/chat.js @@ -0,0 +1,36 @@ +client = require("./client") + +const http = require('http'); +const {once} = require("node:events"); + +const server = http.createServer(async (req, res) => { + let body = ''; + req.on('data', chunk => { + body += chunk.toString(); // 将Buffer转换为字符串 + }); + + await once(req, 'end'); + + let requests = JSON.parse(body); + + console.log(requests.id) + console.log(requests.msg) + + client.steamUser.chat.sendFriendMessage(requests.id, requests.msg, (err, response) => { + if (err) { + console.log(err); + res.statusCode = 500; + res.setHeader('Content-Type', 'text/plain'); + res.end('Internal Server Error\n'); + return; + } + + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Success\n'); + }) +}); + +server.listen(3000, '127.0.0.1', () => { + console.log('Server running at http://127.0.0.1:3000/'); +}); diff --git a/client.js b/client.js new file mode 100644 index 0000000..a53888d --- /dev/null +++ b/client.js @@ -0,0 +1,87 @@ +SteamID = require('steamid'); +SteamUser = require('steam-user'); +SteamTotp = require('steam-totp'); +fs = require('fs'); +winston = require("winston"); + +logger = winston.createLogger({ + level: 'info', + format: winston.format.json(), + defaultMeta: {service: 'steam-logger'}, + transports: [ + new winston.transports.Console(), + ] +}); + +const users = {}; + +const steamUser = new SteamUser(); + +steamUser.setOption("renewRefreshTokens", true); +steamUser.on("refreshToken", (refreshToken) => { + logger.info("Refresh token: " + refreshToken); + fs.writeFileSync('refresh.token', refreshToken); +}); + +config = require("./config.js"); + +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, + }); +} +steamUser.on('loggedOn', () => { + logger.info(`login to Steam as ${steamUser.steamID}`); +}); + +async function getUserInfo(steamID, onUserInfoReceived) { + let sender = users[steamID.getSteamID64()]; + // if user is not cached + if (!sender) { + try { + let personasResult = await steamUser.getPersonas([steamID]); + users[steamID.getSteamID64()] = personasResult.personas[steamID.getSteamID64()]; + sender = users[steamID.getSteamID64()]; + + 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 = { + steamUser: steamUser, + getUserInfo: getUserInfo, +} + diff --git a/logger.js b/logger.js index 5edd391..a68bd34 100644 --- a/logger.js +++ b/logger.js @@ -1,20 +1,7 @@ -SteamID = require('steamid'); -SteamUser = require('steam-user'); -SteamTotp = require('steam-totp'); -fs = require('fs'); -winston = require("winston"); dateformat = require('@matteo.collina/dateformat'); -logger = winston.createLogger({ - level: 'info', - format: winston.format.json(), - defaultMeta: {service: 'steam-logger'}, - transports: [ - new winston.transports.Console(), - ] -}); - -const users = {}; +client = require("./client.js") +steamUser = client.steamUser fs.mkdir("./logs", {recursive: true}, (err) => { if (err) { @@ -22,75 +9,6 @@ fs.mkdir("./logs", {recursive: true}, (err) => { } }); -const steamUser = new SteamUser(); - -steamUser.setOption("renewRefreshTokens", true); -steamUser.on("refreshToken", (refreshToken) => { - logger.info("Refresh token: " + refreshToken); - fs.writeFileSync('refresh.token', refreshToken); -}); - -config = require("./config.js"); - -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, - }); -} -steamUser.on('loggedOn', () => { - logger.info(`login to Steam as ${steamUser.steamID}`); -}); - -/** - * @param {SteamID} steamID - * @returns {Promise<{player_name: string}>} - */ -async function getUserInfo(steamID) { - let sender = users[steamID.getSteamID64()]; - // if user is not cached - if (!sender) { - try { - let personasResult = await steamUser.getPersonas([steamID]); - users[steamID.getSteamID64()] = personasResult.personas[steamID.getSteamID64()]; - sender = users[steamID.getSteamID64()]; - - importChatHistory(steamID); - - // 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; -} - /** * @param {string} date * @param {SteamID} steamID @@ -143,6 +61,16 @@ function dateToString(date) { return dateformat(date, "yyyy-mm-dd HH:MM:ss.l"); } +/** + * @param {SteamID} steamID + * @returns {Promise<{player_name: string}>} + */ +async function getUserInfo(steamID) { + return client.getUserInfo("76561199051592938", (ignore) => { + importChatHistory(steamID); + }); +} + function importChatHistory(steamID) { if (steamID === steamUser.steamID) { return;