Spaces:
Paused
Paused
import express from 'express'; | |
import { Database } from '../database/database.js'; | |
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js'; | |
const AntibanRoutes = express.Router(); | |
const protectedUsers = [6477856957, 1191668125, 1448273246, 1054295664, 6444305696]; | |
AntibanRoutes.post("/api/v1/user/ban-user", authenticateApiKey, apiLimiter, async (req, res) => { | |
const dbClient = new Database("AkenoXJs"); | |
const collection = dbClient.collection("ban_users"); | |
const collectionKey = dbClient.collection("api_keys"); | |
try { | |
const apiKey = req.headers["x-api-key"]; | |
const userIdString = req.query.user_id; | |
const reasonString = req.query.reason; | |
const userIdNumber = Number(userIdString); | |
if (!apiKey) { | |
return res.status(400).json({ error: "Missing API key in headers" }); | |
} | |
if (isNaN(userIdNumber)) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
const existingUserKey = await collectionKey.findOne({ key: apiKey }); | |
if (!existingUserKey) { | |
return res.status(401).json({ message: "API key not found" }); | |
} | |
if (existingUserKey.owner === userIdNumber) { | |
return res.status(200).json({ | |
message: `User ${userIdNumber} cannot be banned because they created the API key`, | |
is_ban: false | |
}); | |
} | |
if (protectedUsers.includes(userIdNumber)) { | |
return res.status(403).json({ | |
message: `User ${userIdNumber} is a protected admin and cannot be banned`, | |
is_ban: false | |
}); | |
} | |
const existingBan = await collection.findOne({ user_ban: userIdNumber }); | |
if (existingBan) { | |
return res.status(200).json({ message: `User ${userIdNumber} is already banned`, is_ban: true }); | |
} | |
await collection.updateOne( | |
{ key: existingUserKey.key }, | |
{ $addToSet: { user_ban: userIdNumber }, $set: { updatedAt: new Date(), owner: existingUserKey.owner } }, | |
{ upsert: true } | |
); | |
res.json({ message: `User ${userIdNumber} successfully banned`, is_ban: true }); | |
} catch (error) { | |
res.status(500).json({ error: `Internal server error: ${error.message}` }); | |
} | |
}); | |
AntibanRoutes.post("/api/v1/user/anti-broadcast", authenticateApiKey, async (req, res) => { | |
const dbClient = new Database("AkenoXJs"); | |
const collection = dbClient.collection("users_broadcast"); | |
const collectionKey = dbClient.collection("api_keys"); | |
try { | |
const apiKey = req.headers["x-api-key"]; | |
const userIdString = req.query.user_id; | |
const WorldString = req.query.text; | |
const userIdNumber = Number(userIdString); | |
if (!apiKey) { | |
return res.status(400).json({ error: "Missing API key in headers" }); | |
} | |
if (!WorldString) { | |
return res.status(400).json({ error: "Missing params: text" }); | |
} | |
if (isNaN(userIdNumber)) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
const existingUserKey = await collectionKey.findOne({ key: apiKey }); | |
if (!existingUserKey) { | |
return res.status(401).json({ message: "API key not found" }); | |
} | |
if (existingUserKey.owner === userIdNumber) { | |
return res.status(200).json({ | |
message: `User ${userIdNumber} cannot be broadcast because they created the API key`, | |
is_broadcast: false | |
}); | |
} | |
const existingBroadcast = await collection.findOne({ user_id: userIdNumber }); | |
if (existingBroadcast) { | |
return res.status(200).json({ message: `User ${userIdNumber} is already broadcasting`, is_broadcast: true }); | |
} | |
if (WorldString.length > 3096) { | |
return res.status(400).json({ message: `User ${userIdNumber} is sending a spam broadcast`, is_broadcast: true }); | |
} | |
await collection.updateOne( | |
{ user_id: userIdNumber }, | |
{ | |
$set: { | |
text: WorldString, | |
updatedAt: new Date(), | |
owner: existingUserKey.owner, | |
is_broadcast: true | |
} | |
}, | |
{ upsert: true } | |
); | |
res.json({ message: `User ${userIdNumber} successfully broadcast`, is_broadcast: true }); | |
} catch (error) { | |
res.status(500).json({ error: `Internal server error: ${error.message}` }); | |
} | |
}); | |
AntibanRoutes.get("/api/v1/user/check-broadcast", authenticateApiKey, async (req, res) => { | |
const dbClient = new Database("AkenoXJs"); | |
const collection = dbClient.collection("users_broadcast"); | |
try { | |
const userIdString = req.query.user_id; | |
const userIdNumber = Number(userIdString); | |
if (isNaN(userIdNumber)) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
const GikesUser = await collection.findOne({ user_id: userIdNumber }); | |
if (GikesUser) { | |
return res.status(200).json({ message: `User ${userIdNumber} is broadcast`, is_broadcast: true }); | |
} else { | |
return res.status(200).json({ message: `User ${userIdNumber} is not broadcast`, is_broadcast: false }); | |
} | |
} catch (error) { | |
res.status(500).json({ error: `Internal server error: ${error.message}` }); | |
} | |
}); | |
AntibanRoutes.get("/api/v1/user/check-ban", authenticateApiKey, async (req, res) => { | |
const dbClient = new Database("AkenoXJs"); | |
const collection = dbClient.collection("ban_users"); | |
try { | |
const userIdString = req.query.user_id; | |
const userIdNumber = Number(userIdString); | |
if (isNaN(userIdNumber)) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
const bannedUser = await collection.findOne({ user_ban: userIdNumber }); | |
if (bannedUser) { | |
return res.status(200).json({ message: `User ${userIdNumber} is banned`, is_ban: true }); | |
} else { | |
return res.status(200).json({ message: `User ${userIdNumber} is not banned`, is_ban: false }); | |
} | |
} catch (error) { | |
res.status(500).json({ error: `Internal server error: ${error.message}` }); | |
} | |
}); | |
export { AntibanRoutes }; |