一个基于隔壁傻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
亲自部署
亲自去广告 :lol:lol:lol:lol 收藏!点赞1 好东西,多谢分享
赞! 老哥部署好回复机器人转发的消息无法传送给咨询人:o:o 度百 发表于 2025-7-31 14:59
老哥部署好回复机器人转发的消息无法传送给咨询人
应该没问题,我刚才亲自部署了一个 666 可以转发但是无法回复消息
页:
[1]
2
