From 8aa0d37ed306cc87f7ed6d7d59b995c9beb9dfe5 Mon Sep 17 00:00:00 2001 From: tursom Date: Thu, 10 Oct 2024 13:59:17 +0800 Subject: [PATCH] add img send method --- chat.js | 124 +++++++++++++++++++++++++++++++++++----------- client.js | 19 +++++-- package-lock.json | 52 +++++++++++++++++++ package.json | 1 + 4 files changed, 163 insertions(+), 33 deletions(-) diff --git a/chat.js b/chat.js index 2f566e7..38cf15f 100644 --- a/chat.js +++ b/chat.js @@ -1,40 +1,108 @@ -client = require("./client") - +const client = require("./client") +const axios = require('axios'); const http = require('http'); -const {once} = require("node:events"); +const { once } = require("node:events"); + +async function sendMsg(req, res) { + let body = ''; + req.on('data', chunk => { + body += chunk.toString(); // 将Buffer转换为字符串 + }); + + await once(req, 'end'); + + let requests = JSON.parse(body); + + console.log(requests) + + 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'); + }) +} + +async function sendImg(req, res) { + let body = ''; + req.on('data', chunk => { + body += chunk.toString(); // 将Buffer转换为字符串 + }); + + await once(req, 'end'); + + let requests = JSON.parse(body); + + console.log(requests) + + if (requests.url) { + img = await readUrlAsBuffer(requests.url) + } else if (requests.img) { + img = Buffer.from(requests.img, 'base64'); + } else { + res.statusCode = 400; + res.setHeader('Content-Type', 'text/plain'); + res.end('Bad Request\n'); + return; + } + + client.steamCommunity.sendImageToUser(requests.id, img, function (err, imageUrl) { + if (err) { + logger.error("an error occurred while sending image: ", 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'); + }); +} const server = http.createServer(async (req, res) => { try { - 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'); - }) + if (req.url == "/img") { + await sendImg(req, res); + } else { + await sendMsg(req, res); + } } catch (e) { console.error("An error occurred while processing the request: ", e); + res.statusCode = 500; + res.setHeader('Content-Type', 'text/plain'); + res.end('Internal Server Error\n'); } }); +async function readUrlAsBuffer(url) { + try { + const response = await axios.get(url, { responseType: 'arraybuffer' }); + return Buffer.from(response.data); + } catch (err) { + throw new Error(`Failed to fetch URL: ${err.message}`); + } +} + +function readFileAsBuffer(filePath) { + return new Promise((resolve, reject) => { + fs.readFile(filePath, (err, data) => { + if (err) { + return reject(err); + } + resolve(data); + }); + }); +} + server.listen(3000, '0.0.0.0', () => { console.log('Server running at http://0.0.0.0:3000/'); }); diff --git a/client.js b/client.js index 2e5807c..3816be9 100644 --- a/client.js +++ b/client.js @@ -1,13 +1,14 @@ -SteamID = require('steamid'); -SteamUser = require('steam-user'); -SteamTotp = require('steam-totp'); +const SteamID = require('steamid'); +const SteamUser = require('steam-user'); +const SteamTotp = require('steam-totp'); +const SteamCommunity = require('steamcommunity'); fs = require('fs'); winston = require("winston"); logger = winston.createLogger({ level: 'info', format: winston.format.json(), - defaultMeta: {service: 'steam-logger'}, + defaultMeta: { service: 'steam-logger' }, transports: [ new winston.transports.Console(), ] @@ -16,6 +17,7 @@ logger = winston.createLogger({ const users = {}; const steamUser = new SteamUser(); +const steamCommunity = new SteamCommunity(); steamUser.setOption("renewRefreshTokens", true); steamUser.on("refreshToken", (refreshToken) => { @@ -53,8 +55,14 @@ try { steamID: config.steamID, }); } -steamUser.on('loggedOn', () => { +steamUser.on('loggedOn', async () => { logger.info(`login to Steam as ${steamUser.steamID}`); + + steamUser.webLogOn(); +}); +steamUser.on('webSession', async (sessionID, cookies) => { + steamCommunity.setCookies(cookies); + steamCommunity.startConfirmationChecker(10000, config.identitySecret); }); async function getUserInfo(steamID, onUserInfoReceived) { @@ -85,6 +93,7 @@ async function getUserInfo(steamID, onUserInfoReceived) { module.exports = { steamUser: steamUser, + steamCommunity: steamCommunity, getUserInfo: getUserInfo, } diff --git a/package-lock.json b/package-lock.json index 676f117..0f2d6f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@matteo.collina/dateformat": "^5.0.1", + "axios": "^1.7.7", "steam-totp": "^2.1.2", "steam-user": "^5.0.8", "steamcommunity": "^3.48.2", @@ -223,6 +224,31 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://mvn.tursom.cn:20080/repository/npm/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://mvn.tursom.cn:20080/repository/npm/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -511,6 +537,26 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://mvn.tursom.cn:20080/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -891,6 +937,12 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://mvn.tursom.cn:20080/repository/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/package.json b/package.json index bb6bf5d..4dadff4 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "license": "ISC", "dependencies": { "@matteo.collina/dateformat": "^5.0.1", + "axios": "^1.7.7", "steam-totp": "^2.1.2", "steam-user": "^5.0.8", "steamcommunity": "^3.48.2",