本帖最后由 小学生 于 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));
- }
复制代码 |