小学生 发表于 2025-7-31 11:44:29

一个基于隔壁傻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创建者
用户回复普通文字给转发的消息时,会回复到原消息发送者



// =================================================================
//                      配置信息 (必须填写)
// =================================================================

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

// =================================================================
//                      核心功能 (无需修改)
// =================================================================

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

function requestTelegram(methodName, body, params = null) {
return fetch(apiUrl(methodName, params), {
    method: 'POST',
    headers: {
      'content-type': 'application/json'
    },
    body: JSON.stringify(body)
}).then(r => r.json());
}

function sendMessage(msg = {}) {
return requestTelegram('sendMessage', msg);
}

function copyMessage(msg = {}) {
return requestTelegram('copyMessage', msg);
}

function forwardMessage(msg) {
return requestTelegram('forwardMessage', msg);
}

addEventListener('fetch', event => {
const url = new URL(event.request.url);
if (url.pathname === WEBHOOK) {
    event.respondWith(handleWebhook(event));
} else if (url.pathname === '/registerWebhook') {
    event.respondWith(registerWebhook(event, url, WEBHOOK, SECRET));
} else if (url.pathname === '/unRegisterWebhook') {
    event.respondWith(unRegisterWebhook(event));
} else {
    event.respondWith(new Response('No handler for this request'));
}
});

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

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

async function onUpdate(update) {
if ('message' in update) {
    await onMessage(update.message);
}
}

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

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

    // 检查是否在回复转发消息
    if (reply && (reply.forward_from || reply.forward_sender_name)) {
      const guestChatId = await nfd.get('msg-map-' + reply.message_id);
      if (guestChatId) {
      return copyMessage({
          chat_id: guestChatId,
          from_chat_id: message.chat.id,
          message_id: message.message_id,
      });
      } else {
      return sendMessage({
          chat_id: ADMIN_UID,
          text: '⚠️ 未找到原用户映射,可能消息太旧或被清理了缓存。'
      });
      }
    } else {
      // 非合法回复
      return sendMessage({
      chat_id: ADMIN_UID,
      text: '提示:请直接“回复由机器人转发的用户消息”来进行回复。'
      });
    }
} else {
    // 访客发消息
    return handleGuestMessage(message);
}
}

async function handleGuestMessage(message) {
const forwardReq = await forwardMessage({
    chat_id: ADMIN_UID,
    from_chat_id: message.chat.id,
    message_id: message.message_id
});

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

// =================================================================
//                      Webhook 设置工具 (无需修改)
// =================================================================

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

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

b66667777 发表于 2025-7-31 11:48:45

亲自部署

小学生 发表于 2025-7-31 11:50:56

b66667777 发表于 2025-7-31 11:48
亲自部署

亲自去广告

度百 发表于 2025-7-31 14:35:24

:lol:lol:lol:lol

jintong 发表于 2025-7-31 14:36:25

收藏!点赞1

jianshan 发表于 2025-7-31 14:38:42

好东西,多谢分享
赞!

度百 发表于 2025-7-31 14:59:54

老哥部署好回复机器人转发的消息无法传送给咨询人:o:o

小学生 发表于 2025-7-31 15:23:27

度百 发表于 2025-7-31 14:59
老哥部署好回复机器人转发的消息无法传送给咨询人

应该没问题,我刚才亲自部署了一个

NodeLoc 发表于 2025-7-31 15:25:25

666

凤凰竹们 发表于 2025-7-31 15:55:53

可以转发但是无法回复消息
页: [1] 2
查看完整版本: 一个基于隔壁傻b论坛开发的TG机器人