用Telegram Bot远程控制电脑:ClawdBot实战指南

用Telegram Bot远程控制电脑:ClawdBot实战指南 1. 项目概述当聊天工具变身遥控器上周在GitHub Trending上看到一个叫ClawdBot的开源项目简单来说就是让你能用Telegram等聊天工具远程控制自己的电脑。这个点子让我眼前一亮——想象一下躺在沙发上用手机发条消息就能让家里的电脑开始下载文件、整理照片甚至跑代码这不就是极客版的声控家居吗ClawdBot的核心原理其实不复杂它在你的电脑上运行一个Node.js服务通过Telegram Bot API建立通信通道。当你在聊天窗口发送特定指令时Bot会解析并执行对应的本地操作。最妙的是所有数据都走加密通道完全自托管不用担心隐私问题。我花了周末时间把这个系统搭了起来实测发现比想象中稳定得多。下面就把从环境准备到完整配置的详细过程记录下来包括几个官方文档没提到的实用技巧。整个过程大概需要一台能24小时运行的设备我用的是树莓派4BTelegram账号用来创建BotNode.js基础环境约5分钟的操作时间提示虽然ClawdBot支持多种IM平台但Telegram的Bot生态最成熟。下文都以Telegram为例其他平台配置逻辑类似。2. 环境准备与基础配置2.1 硬件选择方案根据使用场景不同我有三种推荐配置常驻主机方案树莓派/旧笔记本功耗5-15W优点24小时在线随时响应适合家庭自动化控制云服务器方案AWS Lightsail/$5 VPS优点公网可达响应快适合远程办公场景本地开发机方案主力工作电脑优点性能强资源丰富缺点必须保持开机我选择树莓派方案用这个命令检查设备架构uname -m # 输出armv7l/arm64/x86_642.2 关键软件安装Node.js环境必须≥16.x# 用nvm管理Node版本 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash nvm install 18 node -v # 确认版本ClawdBot本体安装git clone https://github.com/clawdbot/clawdbot.git cd clawdbot npm install --omitdev这里有个坑官方推荐用npm install但实测用--omitdev跳过开发依赖能减少30%的磁盘占用从450MB降到320MB。2.3 Telegram Bot申请在Telegram中搜索BotFather发送/newbot按提示操作记录下API Token形如123456:ABC-DEF1234开启Bot的Inline模式发送/setinline安全提示Token相当于Bot的密码千万不要上传到GitHub后面我们会用环境变量保护它。3. 核心配置解析3.1 配置文件详解项目根目录的config/default.json是核心配置这几个参数最关键{ telegram: { token: ${TELEGRAM_TOKEN}, // 从环境变量读取 adminId: 你的Telegram用户ID, whitelist: [允许使用的用户ID] }, commands: { shell: { timeout: 30000, maxBuffer: 1024 * 1024 } } }获取用户ID的快捷方法给userinfobot发送任意消息它会返回你的数字ID。3.2 安全防护配置为了防止Bot被滥用建议设置白名单机制只允许特定用户访问命令权限分级// custom_commands.js module.exports { rm -rf: { level: admin, // 只有管理员能执行 handler: () {} } }日志审计所有命令记录到文件npm install winston3.3 开机自启动方案用PM2管理进程最稳定npm install pm2 -g pm2 start index.js --name clawdbot pm2 save pm2 startup # 生成自启动脚本实测发现用--max-memory-restart 200M参数可以预防内存泄漏问题。4. 高级功能实战4.1 自定义命令开发在commands/目录下新建mycmd.jsmodule.exports { command: 截图, description: 截取当前屏幕, action: async (ctx) { const { exec } require(child_process); exec(scrot /tmp/screen.png, () { ctx.replyWithPhoto({ source: /tmp/screen.png }); }); } }重启Bot后就能用/截图命令了效果比TeamViewer还快。4.2 文件传输方案通过Bot传输文件需要特殊处理发送文件时用ctx.replyWithDocument()接收文件时监听on(document)事件重要文件建议加密后传输const crypto require(crypto); const cipher crypto.createCipheriv(aes-256-cbc, key, iv);4.3 与HomeAssistant联动通过HTTP API控制智能家居const axios require(axios); module.exports { command: 开灯, action: (ctx) { axios.post(http://hassio:8123/api/services/light/turn_on, { entity_id: light.bedroom }, { headers: { Authorization: Bearer YOUR_TOKEN } }); } }5. 故障排查手册5.1 常见错误代码错误现象可能原因解决方案ECONNREFUSEDBot未启动检查pm2 list401 UnauthorizedToken错误重新申请Bot TokenETIMEDOUT网络封锁更换MTProto代理5.2 性能优化技巧减少内存占用node --max-old-space-size256 index.js加速响应// 设置5秒超时 ctx.reply(执行中..., { reply_to_message_id: ctx.message.message_id }) .catch(() {});日志轮转pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 10M5.3 隐私保护方案敏感操作二次确认ctx.reply(确定要关机, { reply_markup: { inline_keyboard: [[ { text: 确认, callback_data: shutdown_confirm } ]] } });关键信息模糊处理const hideInfo (text) text.replace(/\d{4}/g, ****);这个项目最让我惊喜的是它的扩展性——你可以把它当作一个可编程的远程控制中枢。我现在用它管理着三台设备的定时任务比crontab直观多了。最近还在开发一个插件让Bot能接收语音指令转换成文字命令等完善了再和大家分享具体实现。