全球主机交流论坛

标题: 一个基于隔壁傻b论坛开发的TG机器人 [打印本页]

作者: 小学生    时间: 2025-7-31 11:44
标题: 一个基于隔壁傻b论坛开发的TG机器人
本帖最后由 小学生 于 2025-8-8 15:22 编辑

曹你妈的发个开源机器人都要植入你们傻b论坛的链接,是不是舔5K狗的屁/眼子把脑子舔坏了?

去广告版来了,直接部署在CF workers,部署教程:

从@BotFather获取token,并且可以发送/setjoingroups来禁止此Bot被添加到群组
从uuidgenerator获取一个随机uuid作为secret (打开https://www.uuidgenerator.net/ 生成)
从@username_to_id_bot获取你的用户id
登录cloudflare,创建一个worker
配置workers的变量
增加一个ENV_BOT_TOKEN变量,数值为从步骤1中获得的token
增加一个ENV_BOT_SECRET变量,数值为从步骤2中获得的secret
增加一个ENV_ADMIN_UID变量,数值为从步骤3中获得的用户id
绑定kv数据库,创建一个Namespace Name为sbnodeseek的kv数据库,在CF workers 中绑定一下这个,变量名填 nfd

通过打开https://xxx.workers.dev/registerWebhook来注册websoket,显示OK说明成功了

使用方法
当其他用户给bot发消息,会被转发到bot创建者
用户回复普通文字给转发的消息时,会回复到原消息发送者



  1. // =================================================================
  2. //                      配置信息 (必须填写)
  3. // =================================================================

  4. const TOKEN = ENV_BOT_TOKEN;      // 从 @BotFather 获取
  5. const WEBHOOK = '/endpoint';
  6. const SECRET = ENV_BOT_SECRET;    // 一个安全的随机字符串 (A-Z, a-z, 0-9, _ and -)
  7. const ADMIN_UID = ENV_ADMIN_UID;  // 您的 Telegram User ID

  8. // =================================================================
  9. //                      核心功能 (无需修改)
  10. // =================================================================

  11. function apiUrl(methodName, params = null) {
  12.   let query = '';
  13.   if (params) {
  14.     query = '?' + new URLSearchParams(params).toString();
  15.   }
  16.   return `https://api.telegram.org/bot${TOKEN}/${methodName}${query}`;
  17. }

  18. function requestTelegram(methodName, body, params = null) {
  19.   return fetch(apiUrl(methodName, params), {
  20.     method: 'POST',
  21.     headers: {
  22.       'content-type': 'application/json'
  23.     },
  24.     body: JSON.stringify(body)
  25.   }).then(r => r.json());
  26. }

  27. function sendMessage(msg = {}) {
  28.   return requestTelegram('sendMessage', msg);
  29. }

  30. function copyMessage(msg = {}) {
  31.   return requestTelegram('copyMessage', msg);
  32. }

  33. function forwardMessage(msg) {
  34.   return requestTelegram('forwardMessage', msg);
  35. }

  36. addEventListener('fetch', event => {
  37.   const url = new URL(event.request.url);
  38.   if (url.pathname === WEBHOOK) {
  39.     event.respondWith(handleWebhook(event));
  40.   } else if (url.pathname === '/registerWebhook') {
  41.     event.respondWith(registerWebhook(event, url, WEBHOOK, SECRET));
  42.   } else if (url.pathname === '/unRegisterWebhook') {
  43.     event.respondWith(unRegisterWebhook(event));
  44.   } else {
  45.     event.respondWith(new Response('No handler for this request'));
  46.   }
  47. });

  48. async function handleWebhook(event) {
  49.   if (event.request.headers.get('X-Telegram-Bot-Api-Secret-Token') !== SECRET) {
  50.     return new Response('Unauthorized', { status: 403 });
  51.   }

  52.   const update = await event.request.json();
  53.   event.waitUntil(onUpdate(update));
  54.   return new Response('Ok');
  55. }

  56. async function onUpdate(update) {
  57.   if ('message' in update) {
  58.     await onMessage(update.message);
  59.   }
  60. }

  61. async function onMessage(message) {
  62.   const chatId = message.chat.id.toString();

  63.   // 如果来自管理员
  64.   if (chatId === ADMIN_UID) {
  65.     const reply = message.reply_to_message;

  66.     // 检查是否在回复转发消息
  67.     if (reply && (reply.forward_from || reply.forward_sender_name)) {
  68.       const guestChatId = await nfd.get('msg-map-' + reply.message_id);
  69.       if (guestChatId) {
  70.         return copyMessage({
  71.           chat_id: guestChatId,
  72.           from_chat_id: message.chat.id,
  73.           message_id: message.message_id,
  74.         });
  75.       } else {
  76.         return sendMessage({
  77.           chat_id: ADMIN_UID,
  78.           text: '⚠️ 未找到原用户映射,可能消息太旧或被清理了缓存。'
  79.         });
  80.       }
  81.     } else {
  82.       // 非合法回复
  83.       return sendMessage({
  84.         chat_id: ADMIN_UID,
  85.         text: '提示:请直接“回复由机器人转发的用户消息”来进行回复。'
  86.       });
  87.     }
  88.   } else {
  89.     // 访客发消息
  90.     return handleGuestMessage(message);
  91.   }
  92. }

  93. async function handleGuestMessage(message) {
  94.   const forwardReq = await forwardMessage({
  95.     chat_id: ADMIN_UID,
  96.     from_chat_id: message.chat.id,
  97.     message_id: message.message_id
  98.   });

  99.   if (forwardReq.ok && forwardReq.result && forwardReq.result.message_id) {
  100.     await nfd.put('msg-map-' + forwardReq.result.message_id, message.chat.id.toString());
  101.   } else {
  102.     await sendMessage({
  103.       chat_id: ADMIN_UID,
  104.       text: `❌ 转发消息失败:${JSON.stringify(forwardReq)}`
  105.     });
  106.   }
  107. }

  108. // =================================================================
  109. //                      Webhook 设置工具 (无需修改)
  110. // =================================================================

  111. async function registerWebhook(event, requestUrl, suffix, secret) {
  112.   const webhookUrl = `${requestUrl.protocol}//${requestUrl.hostname}${suffix}`;
  113.   const r = await (await fetch(apiUrl('setWebhook', { url: webhookUrl, secret_token: secret }))).json();
  114.   return new Response('ok' in r && r.ok ? 'Ok' : JSON.stringify(r, null, 2));
  115. }

  116. async function unRegisterWebhook(event) {
  117.   const r = await (await fetch(apiUrl('setWebhook', { url: '' }))).json();
  118.   return new Response('ok' in r && r.ok ? 'Ok' : JSON.stringify(r, null, 2));
  119. }
复制代码

作者: b66667777    时间: 2025-7-31 11:48
亲自部署  
作者: 小学生    时间: 2025-7-31 11:50
b66667777 发表于 2025-7-31 11:48
亲自部署

亲自去广告
作者: 度百    时间: 2025-7-31 14:35

作者: jintong    时间: 2025-7-31 14:36
收藏!点赞1
作者: jianshan    时间: 2025-7-31 14:38
好东西,多谢分享
赞!
作者: 度百    时间: 2025-7-31 14:59
老哥部署好回复机器人转发的消息无法传送给咨询人
作者: 小学生    时间: 2025-7-31 15:23
度百 发表于 2025-7-31 14:59
老哥部署好回复机器人转发的消息无法传送给咨询人

应该没问题,我刚才亲自部署了一个
作者: NodeLoc    时间: 2025-7-31 15:25
666
作者: 凤凰竹们    时间: 2025-7-31 15:55
可以转发但是无法回复消息
作者: williamc2    时间: 2025-7-31 16:15
谢谢大佬
作者: 小学生    时间: 2025-7-31 16:19
凤凰竹们 发表于 2025-7-31 15:55
可以转发但是无法回复消息

奇怪了,我测试没问题,等下我再部署一个试试
作者: 凤凰竹们    时间: 2025-7-31 16:27
小学生 发表于 2025-7-31 16:19
奇怪了,我测试没问题,等下我再部署一个试试

等大佬修一下
作者: 小学生    时间: 2025-7-31 17:21
凤凰竹们 发表于 2025-7-31 16:27
等大佬修一下

你是直接在输入框回复,还是右键消息回复的。直接在输入框回复是不行的
作者: 凤凰竹们    时间: 2025-7-31 17:28
小学生 发表于 2025-7-31 17:21
你是直接在输入框回复,还是右键消息回复的。直接在输入框回复是不行的 ...

选择转发的消息回复,提示请直接回复由机器人转发的用户消息来进行回复,但是实际已经选择了
作者: 小学生    时间: 2025-8-1 10:27
凤凰竹们 发表于 2025-7-31 17:28
选择转发的消息回复,提示请直接回复由机器人转发的用户消息来进行回复,但是实际已经选择了 ...

再试试
作者: 凤凰竹们    时间: 2025-8-1 14:37
小学生 发表于 2025-8-1 10:27
再试试

已经可以了




欢迎光临 全球主机交流论坛 (https://443502.xyz/) Powered by Discuz! X3.4