全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 1046|回复: 16
打印 上一主题 下一主题

[已解决] 一个基于隔壁傻b论坛开发的TG机器人

[复制链接]
跳转到指定楼层
1#
发表于 2025-7-31 11:44:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小学生 于 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. }
复制代码
2#
发表于 2025-7-31 11:48:45 | 只看该作者
亲自部署  
3#
 楼主| 发表于 2025-7-31 11:50:56 | 只看该作者

亲自去广告
6#
发表于 2025-7-31 14:38:42 | 只看该作者
好东西,多谢分享
赞!
7#
发表于 2025-7-31 14:59:54 | 只看该作者
老哥部署好回复机器人转发的消息无法传送给咨询人
8#
 楼主| 发表于 2025-7-31 15:23:27 | 只看该作者
度百 发表于 2025-7-31 14:59
老哥部署好回复机器人转发的消息无法传送给咨询人

应该没问题,我刚才亲自部署了一个
10#
发表于 2025-7-31 15:55:53 | 只看该作者
可以转发但是无法回复消息
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-9-13 02:21 , Processed in 0.062956 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表