added steambot, trades and trasctions.

This commit is contained in:
2026-01-10 05:31:01 +00:00
parent 232968de1e
commit b90cdd59df
10 changed files with 3113 additions and 138 deletions

192
index.js
View File

@@ -20,6 +20,12 @@ import adminRoutes from "./routes/admin.js";
// Import services
import pricingService from "./services/pricing.js";
import { getSteamBotManager } from "./services/steamBot.js";
// Import models
import User from "./models/User.js";
import Trade from "./models/Trade.js";
import Transaction from "./models/Transaction.js";
/**
* Create and configure Fastify server
@@ -342,6 +348,192 @@ const start = async () => {
// Add WebSocket manager to fastify instance
fastify.decorate("websocketManager", wsManager);
// Initialize Steam Bot Manager
const botManager = getSteamBotManager();
// Setup trade event listeners
botManager.on("tradeAccepted", async (offer, tradeData) => {
console.log(`✅ Trade ${offer.id} accepted! Crediting user...`);
try {
// Find the trade record
const trade = await Trade.findOne({ offerId: offer.id });
if (!trade) {
console.error(`❌ Trade record not found for offer ${offer.id}`);
return;
}
if (trade.state === "accepted") {
console.log(`⚠️ Trade ${offer.id} already completed, skipping`);
return;
}
// Find the user
const user = await User.findById(trade.userId);
if (!user) {
console.error(`❌ User not found for trade ${offer.id}`);
return;
}
// Credit user balance
user.balance += trade.totalValue;
await user.save();
// Update trade status
trade.state = "accepted";
trade.completedAt = new Date();
await trade.save();
// Create transaction record
const transaction = new Transaction({
user: user._id,
type: "sale",
amount: trade.totalValue,
description: `Sold ${trade.items.length} item(s)`,
status: "completed",
metadata: {
tradeId: trade._id,
offerId: offer.id,
botId: tradeData.botId,
itemCount: trade.items.length,
verificationCode: trade.verificationCode,
},
});
await transaction.save();
console.log(
`✅ Credited $${trade.totalValue.toFixed(2)} to user ${
user.username
} (Balance: $${user.balance.toFixed(2)})`
);
// Notify user via WebSocket
wsManager.sendToUser(user.steamId, {
type: "trade_completed",
data: {
tradeId: trade._id,
offerId: offer.id,
amount: trade.totalValue,
newBalance: user.balance,
itemCount: trade.items.length,
timestamp: Date.now(),
},
});
// Also send balance update
wsManager.sendToUser(user.steamId, {
type: "balance_update",
data: {
balance: user.balance,
change: trade.totalValue,
reason: "trade_completed",
},
});
} catch (error) {
console.error(`❌ Error processing accepted trade ${offer.id}:`, error);
}
});
botManager.on("tradeDeclined", async (offer, tradeData) => {
console.log(`❌ Trade ${offer.id} declined`);
try {
const trade = await Trade.findOne({ offerId: offer.id });
if (trade && trade.state === "pending") {
trade.state = "declined";
trade.completedAt = new Date();
await trade.save();
// Notify user
const user = await User.findById(trade.userId);
if (user) {
wsManager.sendToUser(user.steamId, {
type: "trade_declined",
data: {
tradeId: trade._id,
offerId: offer.id,
timestamp: Date.now(),
},
});
}
}
} catch (error) {
console.error(`❌ Error processing declined trade ${offer.id}:`, error);
}
});
botManager.on("tradeExpired", async (offer, tradeData) => {
console.log(`⏰ Trade ${offer.id} expired`);
try {
const trade = await Trade.findOne({ offerId: offer.id });
if (trade && trade.state === "pending") {
trade.state = "expired";
trade.completedAt = new Date();
await trade.save();
// Notify user
const user = await User.findById(trade.userId);
if (user) {
wsManager.sendToUser(user.steamId, {
type: "trade_expired",
data: {
tradeId: trade._id,
offerId: offer.id,
timestamp: Date.now(),
},
});
}
}
} catch (error) {
console.error(`❌ Error processing expired trade ${offer.id}:`, error);
}
});
botManager.on("tradeCanceled", async (offer, tradeData) => {
console.log(`🚫 Trade ${offer.id} canceled`);
try {
const trade = await Trade.findOne({ offerId: offer.id });
if (trade && trade.state === "pending") {
trade.state = "canceled";
trade.completedAt = new Date();
await trade.save();
}
} catch (error) {
console.error(`❌ Error processing canceled trade ${offer.id}:`, error);
}
});
botManager.on("botError", (error, botId) => {
console.error(`❌ Bot ${botId} error:`, error);
});
// Initialize bots if config exists
if (process.env.STEAM_BOT_AUTO_START === "true") {
try {
console.log("🤖 Auto-starting Steam bots...");
// You can load bot config from file or env vars
// const botsConfig = require("./config/steam-bots.json");
// await botManager.initialize(botsConfig);
console.log("⚠️ Bot auto-start enabled but no config found");
console.log(
" Configure bots in config/steam-bots.json or via env vars"
);
} catch (error) {
console.error("❌ Failed to initialize bots:", error.message);
}
} else {
console.log(
"🤖 Steam bots not auto-started (set STEAM_BOT_AUTO_START=true to enable)"
);
}
// Register plugins
await registerPlugins(fastify);