直接放到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 请求事件
});

包含的标签:

教程

最后更新: November 11, 2024