部署方法
1,在 Cloudflare Workers 中创建新的 Worker
![图片[1]-Telegram 搭建私聊机器人教程(转发私聊信息+ 保护隐私)这是一个基于Cloudflare Workers版本](https://xingfu111.com/wp-content/uploads/2025/02/202502281153496-1024x502.png)
2,去刚创建的设置,变量和机密添加下面3个 环境变量
类型 变量名称 值
纯文本 | ENV_ADMIN_UID | 1344566 | 值是你的ID号 不知道就去@weiwei666bot查看你id |
纯文本 | ENV_BOT_SECRET | 66666614612d54-a641-4f62-9133-91e16e486c1c | 值是自己去UUID网站生成一个填进值里面 |
纯文本 | ENV_BOT_TOKEN | 12345678:AAGjZK0o-kI4ph2ayiaZYhUIPiNkR25cURE | 值是你的机器人TOKEN |
![图片[2]-Telegram 搭建私聊机器人教程(转发私聊信息+ 保护隐私)这是一个基于Cloudflare Workers版本](https://xingfu111.com/wp-content/uploads/2025/02/2025022812093255-1024x368.png)
演示图
3,创建一个kv数据库命名为 nfd
后
![图片[3]-Telegram 搭建私聊机器人教程(转发私聊信息+ 保护隐私)这是一个基于Cloudflare Workers版本](https://xingfu111.com/wp-content/uploads/2025/02/2025022812164017-1024x184.png)
去设置绑定KV 命名空间选择刚才创建的nfd
![图片[4]-Telegram 搭建私聊机器人教程(转发私聊信息+ 保护隐私)这是一个基于Cloudflare Workers版本](https://xingfu111.com/wp-content/uploads/2025/02/2025022812211791-1024x460.png)
4,编辑代码复制添加下面全部代码部署保存
![图片[5]-Telegram 搭建私聊机器人教程(转发私聊信息+ 保护隐私)这是一个基于Cloudflare Workers版本](https://xingfu111.com/wp-content/uploads/2025/02/202502281224054-1024x63.png)
const TOKEN = ENV_BOT_TOKEN // 从 @BotFather 获取
const WEBHOOK = '/endpoint'
const SECRET = ENV_BOT_SECRET // 包含字母、数字、_和-
const ADMIN_UID = ENV_ADMIN_UID // 通过 @userinfobot 获取
const SYSTEM_MESSAGES = {
startMessage: `📮 匿名留言箱使用指南:
【发送消息】直接输入内容给管理员
【消息安全】完全端到端匿名
【隐私声明】不存储任何聊天内容`,
adminHelp: `管理员命令:
/ban - 封禁当前对话用户
/unban - 解除封禁
/checkban - 查看封禁状态`,
userBlocked: '⛔ 此账户已被限制使用',
newMessageAlert: '您有新消息'
}
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))
} else {
event.respondWith(new Response('服务正常', { status: 200 }))
}
})
async function handleWebhook(event) {
if (event.request.headers.get('X-Telegram-Bot-Api-Secret-Token') !== SECRET) {
return new Response('未授权访问', { status: 403 })
}
const update = await event.request.json()
event.waitUntil(processUpdate(update))
return new Response('OK')
}
async function processUpdate(update) {
if (update.message) {
await handleMessage(update.message)
}
}
async function handleMessage(msg) {
if (msg.text === '/start') {
return sendMessage({
chat_id: msg.chat.id,
text: SYSTEM_MESSAGES.startMessage,
parse_mode: 'Markdown'
})
}
if (isAdmin(msg.chat.id)) {
return handleAdminCommand(msg)
}
if (await isBannedUser(msg.chat.id)) {
return sendMessage({
chat_id: msg.chat.id,
text: SYSTEM_MESSAGES.userBlocked
})
}
// 转发用户消息给管理员
const forwardResult = await forwardMessage({
chat_id: ADMIN_UID,
from_chat_id: msg.chat.id,
message_id: msg.message_id
})
if (forwardResult.ok) {
await storeMessageLink(forwardResult.result.message_id, msg.chat.id)
sendMessage({
chat_id: ADMIN_UID,
text: SYSTEM_MESSAGES.newMessageAlert,
reply_to_message_id: forwardResult.result.message_id
})
}
}
async function handleAdminCommand(msg) {
if (!msg.reply_to_message) {
return sendMessage({
chat_id: ADMIN_UID,
text: SYSTEM_MESSAGES.adminHelp
})
}
const userChatId = await getLinkedChat(msg.reply_to_message.message_id)
// 处理封禁命令
switch (msg.text?.trim()) {
case '/ban':
await banUser(userChatId)
return sendMessage({
chat_id: ADMIN_UID,
text: `已封禁用户 ${userChatId}`
})
case '/unban':
await unbanUser(userChatId)
return sendMessage({
chat_id: ADMIN_UID,
text: `已解除封禁 ${userChatId}`
})
case '/checkban':
const status = await checkBanStatus(userChatId)
return sendMessage({
chat_id: ADMIN_UID,
text: `用户状态:${status ? '已封禁' : '正常'}`
})
default:
return copyMessage({
chat_id: userChatId,
from_chat_id: ADMIN_UID,
message_id: msg.message_id
})
}
}
// 基础功能函数
function apiUrl(method, params) {
return `https://api.telegram.org/bot${TOKEN}/${method}?` + new URLSearchParams(params)
}
async function sendMessage(params) {
return fetch(apiUrl('sendMessage', params), {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
}
async function forwardMessage(params) {
return fetch(apiUrl('forwardMessage', params), {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
}).then(r => r.json())
}
async function copyMessage(params) {
return fetch(apiUrl('copyMessage', params), {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
}
// 数据存储相关
async function storeMessageLink(adminMsgId, userChatId) {
await nfd.put(`msgLink:${adminMsgId}`, userChatId.toString())
}
async function getLinkedChat(adminMsgId) {
return nfd.get(`msgLink:${adminMsgId}`)
}
async function banUser(chatId) {
await nfd.put(`banned:${chatId}`, 'true')
}
async function unbanUser(chatId) {
await nfd.delete(`banned:${chatId}`)
}
async function checkBanStatus(chatId) {
return !!await nfd.get(`banned:${chatId}`)
}
async function isBannedUser(chatId) {
return !!await nfd.get(`banned:${chatId}`)
}
function isAdmin(chatId) {
return chatId.toString() === ADMIN_UID.toString()
}
// Webhook注册
async function registerWebhook(event, url) {
const webhookUrl = `${url.protocol}//${url.hostname}${WEBHOOK}`
const result = await fetch(apiUrl('setWebhook', {
url: webhookUrl,
secret_token: SECRET
}))
return new Response(await result.text())
}
最后用访问链接后面加上/registerWebhook
浏览器打开一次注册websoket显示ok就大功告成了
/registerWebhook
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容