impl web chat service
This commit is contained in:
36
chat.js
Normal file
36
chat.js
Normal 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
87
client.js
Normal 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,
|
||||||
|
}
|
||||||
|
|
||||||
96
logger.js
96
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');
|
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;
|
||||||
|
|||||||
Reference in New Issue
Block a user