Last commit not found
import express from 'express'; | |
import axios from 'axios'; | |
import { Database } from '../database/database.js'; | |
import { predictCreationDate } from '../lib/create-date.js'; | |
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js'; | |
const AntibanRoutes = express.Router(); | |
const protectedUsers = [6477856957, 1191668125, 1448273246, 1054295664, 6444305696]; | |
const TelegramUser = async (user_id) => { | |
const options = { | |
method: 'GET', | |
url: 'https://randydev-meta-ai.hf.space/user/get_user', | |
params: { | |
user_id: user_id | |
} | |
}; | |
try { | |
const response = await axios.request(options); | |
return response.data; | |
} catch (error) { | |
console.error(error); | |
return null; | |
} | |
} | |
const TelegramUserStatusBan = async (user_id) => { | |
const options = { | |
method: 'GET', | |
url: 'https://randydev-meta-ai.hf.space/user/status/ban', | |
params: { | |
username: user_id | |
} | |
}; | |
try { | |
const response = await axios.request(options); | |
return response.data; | |
} catch (error) { | |
console.error(error); | |
return null; | |
} | |
} | |
const TelegramUserStoryDL = async (link) => { | |
const options = { | |
method: 'GET', | |
url: 'https://randydev-meta-ai.hf.space/user/get_story', | |
params: { | |
link: link | |
} | |
}; | |
try { | |
const response = await axios.request(options); | |
return response.data; | |
} catch (error) { | |
console.error(error); | |
return null; | |
} | |
} | |
const GetChatRaw = async (username) => { | |
const options = { | |
method: 'GET', | |
url: 'https://randydev-meta-ai.hf.space/user/raw/getchat', | |
params: { | |
username: username | |
} | |
}; | |
try { | |
const response = await axios.request(options); | |
return response.data; | |
} catch (error) { | |
console.error(error); | |
return null; | |
} | |
} | |
const GetAuthorChat = async (username) => { | |
const options = { | |
method: 'GET', | |
url: 'https://randydev-meta-ai.hf.space/user/author/admin', | |
params: { | |
username: username | |
} | |
}; | |
try { | |
const response = await axios.request(options); | |
return response.data; | |
} catch (error) { | |
console.error(error); | |
return null; | |
} | |
} | |
/** | |
* @swagger | |
* /api/v1/user/status/ban: | |
* get: | |
* summary: Telegram User Status Ban | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: username | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/status/ban", authenticateApiKey, apiLimiter, async (req, res) => { | |
const Username = req.query.username; | |
if (!Username) { | |
return res.status(400).json({ error: "Invalid or missing username" }); | |
} | |
try { | |
const result = await TelegramUserStatusBan(Username); | |
res.json(result); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/author/admin: | |
* get: | |
* summary: Telegram Author Admin | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: username | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/author/admin", authenticateApiKey, apiLimiter, async (req, res) => { | |
const Username = req.query.username; | |
if (!Username) { | |
return res.status(400).json({ error: "Invalid or missing username" }); | |
} | |
try { | |
const result = await GetAuthorChat(Username); | |
res.json(result); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/raw/getchat: | |
* get: | |
* summary: Telegram Get Chat | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: username | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/raw/getchat", authenticateApiKey, apiLimiter, async (req, res) => { | |
const Username = req.query.username; | |
if (!Username) { | |
return res.status(400).json({ error: "Invalid or missing username" }); | |
} | |
try { | |
const result = await GetChatRaw(Username); | |
res.json(result); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/story-dl: | |
* get: | |
* summary: Telegram User Story Downloader | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: link | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/story-dl", authenticateApiKey, apiLimiter, async (req, res) => { | |
const Links = req.query.link; | |
if (!Links) { | |
return res.status(400).json({ error: "Invalid or missing link" }); | |
} | |
try { | |
const result = await TelegramUserStoryDL(Links); | |
res.json(result); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/info: | |
* get: | |
* summary: Telegram User Info | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/info", authenticateApiKey, apiLimiter, async (req, res) => { | |
const userId = req.query.user_id; | |
if (!userId) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
try { | |
const result = await TelegramUser(userId); | |
res.json(result); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/creation-date: | |
* get: | |
* summary: Telegram creation date User | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: number | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
AntibanRoutes.get("/api/v1/user/creation-date", authenticateApiKey, apiLimiter, (req, res) => { | |
const userId = Number(req.query.user_id); | |
if (!userId || isNaN(userId)) { | |
return res.status(400).json({ error: "Invalid or missing user_id" }); | |
} | |
const result = predictCreationDate(userId); | |
res.json({ user_id: userId, estimated_creation: result }); | |
}); | |
AntibanRoutes.get("/api/v1/user/api-key-info", authenticateApiKey, apiLimiter, async (req, res) => { | |
const dbClient = new Database("AkenoXJs"); | |
const collectionKey = dbClient.collection("api_keys"); | |
const apiKey = req.headers["x-api-key"]; | |
try { | |
if (!apiKey) { | |
return res.status(400).json({ error: "Missing API key" }); | |
} | |
const existingUserKey = await collectionKey.findOne({ key: apiKey }); | |
if (!existingUserKey) { | |
return res.status(401).json({ message: "API key not found" }); | |
} | |
res.json({ | |
owner_id: existingUserKey.owner, | |
key: existingUserKey.key, | |
ip_addresses: existingUserKey.ip_addresses || [] | |
}); | |
} catch (error) { | |
res.status(500).json({ error: "Failed to fetch user info" }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/ban-user: | |
* post: | |
* summary: Telegram Ban User | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: number | |
* - in: query | |
* name: reason | |
* required: false | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
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 | |
}); | |
} | |
const result = await collectionKey.find({}).toArray(); | |
let userIds = []; | |
for (const data of result) { | |
if (data.owner !== undefined) { | |
userIds.push(data.owner); | |
} | |
} | |
if (userIds.includes(userIdNumber)) { | |
return res.status(403).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}` }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/anti-broadcast: | |
* post: | |
* summary: Telegram Anti broadcast | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: number | |
* - in: query | |
* name: text | |
* required: true | |
* description: null | |
* schema: | |
* type: string | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
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 | |
}); | |
} | |
if (protectedUsers.includes(userIdNumber)) { | |
return res.status(403).json({ | |
message: `User ${userIdNumber} is a protected admin and cannot be banned`, | |
is_ban: 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}` }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/check-broadcast: | |
* get: | |
* summary: Telegram Check Anti broadcast | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: number | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
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}` }); | |
} | |
}); | |
/** | |
* @swagger | |
* /api/v1/user/check-ban: | |
* get: | |
* summary: Telegram Check Banned | |
* tags: [User] | |
* parameters: | |
* - in: query | |
* name: user_id | |
* required: true | |
* description: null | |
* schema: | |
* type: number | |
* - in: header | |
* name: x-api-key | |
* required: true | |
* description: API key for authentication | |
* schema: | |
* type: string | |
* responses: | |
* 200: | |
* description: Success | |
*/ | |
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 }; |