impl web chat service

This commit is contained in:
2024-04-28 10:21:21 +08:00
parent c08ffa18b4
commit 19f92fec09
3 changed files with 135 additions and 84 deletions

36
chat.js Normal file
View File

@@ -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/');
});

87
client.js Normal file
View File

@@ -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,
}

View File

@@ -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'); dateformat = require('@matteo.collina/dateformat');
logger = winston.createLogger({ client = require("./client.js")
level: 'info', steamUser = client.steamUser
format: winston.format.json(),
defaultMeta: {service: 'steam-logger'},
transports: [
new winston.transports.Console(),
]
});
const users = {};
fs.mkdir("./logs", {recursive: true}, (err) => { fs.mkdir("./logs", {recursive: true}, (err) => {
if (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 {string} date
* @param {SteamID} steamID * @param {SteamID} steamID
@@ -143,6 +61,16 @@ function dateToString(date) {
return dateformat(date, "yyyy-mm-dd HH:MM:ss.l"); 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) { function importChatHistory(steamID) {
if (steamID === steamUser.steamID) { if (steamID === steamUser.steamID) {
return; return;