直接放到pages上就好。
修改的部分:配置部分和帮助信息
// 配置部分
const TELEGRAM_TOKEN = 'xxxxxxxxxx'; // 替换为你的 Telegram Bot Token
const API_ENDPOINTS = {
'change_ip_hinet55': 'https://api.pqs.pw/ipch/xxxxx',
'change_ip_xxxx: 'https://api.pqs.pw/ipch/xxxxx'
}; // 定义可用的 API 端点 URL,用于更改不同服务的 IP
const WHITELISTED_USERS = new Set([
'123456789', // 允许的用户 tgUID
]); // 白名单用户的 ID,仅允许这些用户使用机器人
const IP_CHANGE_REQUEST_LIMIT = 60 * 1000; // IP 更改请求的频率限制(1分钟)
// 状态存储
const userLastIpChangeRequestTime = new Map(); // 存储每个用户最后一次 IP 更改请求的时间
// 帮助信息
const HELP_TEXT =
`/change_ip_hinet155 - 更改 Hinet 55 1号的IP
/change_ip_xxx - 更改 xxx 的IP
/help - 显示此帮助信息`; // 帮助信息的定义
// 输入验证和清理
function sanitizeInput(input) {
// 清理输入中的不必要的字符,只保留字母、数字和下划线
return input.replace(/[^a-zA-Z0-9_]/g, '');
}
async function handleTelegramUpdate(update) {
const message = update.message; // 获取消息内容
const chatId = message.chat.id; // 获取聊天 ID
const userId = message.from.id.toString(); // 获取用户 ID 并转换为字符串
let command = message.text.substring(1); // 去掉命令前的斜杠
// 验证和清理输入
command = sanitizeInput(command);
// 检查用户是否在白名单中
if (!WHITELISTED_USERS.has(userId)) {
return { status: 200, message: '未经授权的用户' }; // 如果用户不在白名单,返回未经授权的提示
}
// 处理帮助命令
if (command === 'help') {
return { status: 200, message: HELP_TEXT }; // 如果用户输入帮助命令,返回帮助信息
}
// 处理 IP 地址更改命令
if (API_ENDPOINTS.hasOwnProperty(command)) {
const currentTime = Date.now(); // 获取当前时间戳
const lastIpChangeRequestTime = userLastIpChangeRequestTime.get(userId) || 0; // 获取用户上次请求时间
// 检查 IP 更改请求频率限制
if (command.startsWith('change_ip_') && currentTime - lastIpChangeRequestTime < IP_CHANGE_REQUEST_LIMIT) {
return { status: 200, message: '请求过于频繁,请稍后再试' }; // 如果请求间隔不足,提示用户稍后再试
}
// 更新用户上次 IP 更改请求时间
if (command.startsWith('change_ip_')) {
userLastIpChangeRequestTime.set(userId, currentTime);
}
const apiUrl = API_ENDPOINTS[command]; // 获取对应命令的 API URL
try {
// 发送请求到 API 端点
const response = await fetch(apiUrl); // 发起 API 请求更改 IP
if (!response.ok) {
return { status: 500, message: 'API 请求失败' }; // 如果请求失败,返回失败信息
}
const newIpAddress = await response.text(); // 获取新 IP 地址
if (!newIpAddress.trim()) {
// 如果返回的 IP 地址为空,视为更改失败
return { status: 200, message: 'IP 地址更改失败,请检查 API 状态' };
}
return { status: 200, message: `IP 地址更改成功,新 IP 地址为 ${newIpAddress}` }; // 返回成功信息和新 IP 地址
} catch (error) {
return { status: 500, message: '发生错误,请稍后再试' }; // 捕获错误,提示稍后再试
}
} else {
return { status: 200, message: '无效的命令' }; // 如果命令无效,提示用户
}
}
async function sendTelegramMessage(chatId, text) {
const telegramApiUrl = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`; // Telegram API 的 URL
const payload = {
chat_id: chatId,
text: text
}; // 构建发送消息的载荷
// 发送消息到 Telegram
await fetch(telegramApiUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload) // 发送请求,将消息发送给用户
});
}
async function handleRequest(request) {
const { method } = request;
// 检查请求方法是否为 POST
if (method !== 'POST') {
return new Response('无效的方法', { status: 405 }); // 如果请求不是 POST,返回无效方法
}
const update = await request.json(); // 获取请求的 JSON 内容
// 验证请求中是否包含有效的消息和文本
if (!update.message || !update.message.text) {
return new Response('无效的更新', { status: 400 }); // 如果消息无效,返回错误
}
// 处理 Telegram 更新并发送响应消息
const result = await handleTelegramUpdate(update); // 调用处理更新函数
await sendTelegramMessage(update.message.chat.id, result.message); // 将结果消息发送给用户
return new Response(result.message, { status: result.status, headers: { 'Content-Type': 'text/plain' } }); // 返回响应
}
// 监听 fetch 事件
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request)); // 处理 fetch 请求事件
});