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",