win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

1 按照第一集的部署完成后,我们就开始考虑给小龙虾增加telegram机器人和搜索网站能力,实现效果如下:

在这里插入图片描述


在这里插入图片描述

2 telegram机器人能力部署

C:\Users\Administrator.openclaw的配置文件openclaw.json

在这里插入图片描述


在这里插入图片描述

增加一段内容

"channels":{"telegram":{"enabled": true, "dmPolicy":"pairing", "botToken":"你的telegram机器人的token", "groupPolicy":"allowlist", "streamMode":"partial", "network":{"autoSelectFamily":true}, "proxy":"http://你的代理IP:你的代理端口", "actions":{"reactions": true, "sendMessage": true, "deleteMessage": true, "sticker":true}}}, 

五、对接 Telegarm 电报机器人

打开你的 Telegram,搜索 @BotFather,发送 /newbot,来创建一个新的机器人,按提示设置:

在这里插入图片描述

给 Bot 起个名字,比如我设置为 人工智能我来了

在这里插入图片描述

设置用户名(必须以 bot 结尾,比如Renggongai0219Bot )

最后会给你一串 Token:你的token

输入 token 进行对接,并进入到刚才创建的机器人里,第一次打开会显示还未正式对接,但是会在里面提供配对码,比如我的是 Pairing code: 你的token

XX

现在只需重新打开一个新的 Powershell 窗口,然后在里面输入配对命令即可

openclaw pairing approve telegram 这里填写你的配对码 
在这里插入图片描述

当你看到这个界面的话说明已经和Telegram配对成功了!

版本升级到3.12后配置有点不一样了

1.打开 Telegram → 搜索 @userinfobot → 发送 /start → 机器人会直接回复你的数字 ID(格式:Id: 1987654321)。

在这里插入图片描述

2.1 openclaw配置

openclaw onboard
◇ Telegram allowFrom (numeric sender id; @username resolves to id)
│ XXXXXX(输入上图ID的数字)

3 搜索网站能力部署

C:\Users\Administrator.openclaw的配置文件openclaw.json

在这里插入图片描述


在这里插入图片描述

增加一段内容

"tools":{"web":{"search":{}, "fetch":{"maxChars":20000, "timeoutSeconds":30, "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}}}, 

4 openclaw.json配置文件全部内容

{"meta":{"lastTouchedVersion":"2026.2.19-2", "lastTouchedAt":"2026-02-21T06:04:19.113Z"}, "wizard":{"lastRunAt":"2026-02-21T06:04:19.057Z", "lastRunVersion":"2026.2.19-2", "lastRunCommand":"onboard", "lastRunMode":"local"}, "logging":{"level":"info"}, "models":{"providers":{"ollama":{"baseUrl":"http://127.0.0.1:11434/v1", "apiKey":"ollama-local", "api":"openai-completions", "models":[{"id":"gpt-oss:20b", "name":"gpt-oss:20b", "reasoning": false, "input":["text"], "cost":{"input":0, "output":0, "cacheRead":0, "cacheWrite":0}, "contextWindow":131072, "maxTokens":16384}]}}}, "agents":{"defaults":{"model":{"primary":"ollama/gpt-oss:20b"}, "models":{"ollama/gpt-oss:20b":{}}, "workspace":"C:\\Users\\Administrator\\.openclaw\\workspace", "compaction":{"mode":"safeguard"}, "maxConcurrent":4, "subagents":{"maxConcurrent":8}}}, "tools":{"web":{"search":{}, "fetch":{"maxChars":20000, "timeoutSeconds":30, "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}}}, "messages":{"ackReactionScope":"group-mentions"}, "commands":{"native":"auto", "nativeSkills":"auto", "restart":true}, "hooks":{"internal":{"enabled": true, "entries":{"boot-md":{"enabled":true}, "session-memory":{"enabled":true}}}}, "channels":{"telegram":{"enabled": true, "dmPolicy":"pairing", "botToken":"用你自己的代替", "groupPolicy":"allowlist", "streamMode":"partial", "network":{"autoSelectFamily":true}, "proxy":"http://127.0.0.1:7897", "actions":{"reactions": true, "sendMessage": true, "deleteMessage": true, "sticker":true}}}, "gateway":{"port":18789, "mode":"local", "bind":"loopback", "auth":{"mode":"token", "token":"用你自己的代替"}, "tailscale":{"mode":"off", "resetOnExit":false}, "remote":{"url":"ws://127.0.0.1:18789", "token":"你设置的密码代替"}, "nodes":{"denyCommands":["camera.snap", "camera.clip", "screen.record", "calendar.add", "contacts.add", "reminders.add"]}}, "skills":{"install":{"nodeManager":"npm"}}, "plugins":{"entries":{"telegram":{"enabled":true}}}}

Read more

动态库中不透明数据结构的设计要点总结

在 Linux 平台下开发动态链接库(.so)时,“不透明数据结构(Opaque Data Type)” 是实现接口封装、二进制兼容性和代码解耦的核心技术。它通过隐藏数据结构的内部细节,仅对外暴露指针类型,既能保护核心逻辑,又能让库的内部实现自由迭代而不破坏外部调用者。本文将系统讲解不透明数据结构的设计要点、实现细节及工程最佳实践。 一、什么是不透明数据结构?         不透明数据结构(也常被称为 “不透明指针”)是一种封装手段:对外仅声明数据结构的名称(不定义成员),将具体实现隐藏在库内部。外部程序只能通过库提供的 API 操作该结构的指针,无法直接访问或修改其成员。 核心特征:         对外可见    仅包含typedef struct XXX XXX;形式的声明;         对内可见    完整的结构体定义和成员操作逻辑;         外部访问    只能通过库提供的创建、销毁、读写函数间接操作。 二、Linux 动态库中设计不透明数据结构的核心要点 1. 头文件:仅声明,不定义

By Ne0inhk
【牛客JZ31】—栈的压入弹出序列判断算法详解

【牛客JZ31】—栈的压入弹出序列判断算法详解

坚持用清晰易懂的图解+代码语言,让每个知识点变得简单! 🚀呆头个人主页详情 🌱 呆头个人Gitee代码仓库 📌 呆头详细专栏系列 座右铭:“不患无位,患所以立。” 【牛客JZ31】—栈的压入弹出序列判断算法详解 * 摘要 * 目录 * 题目描述 * 核心思路 * 完整代码实现 * 算法步骤详解 * 执行过程模拟 * 算法复杂度分析 * 时间复杂度 * 空间复杂度 * 边界情况处理 * 空序列处理 * 单元素序列 * 总结 * 参考链接 * 关键词标签 摘要 目录 题目描述 牛客链接直达----------请点击 给定两个整数序列: * pushV:压栈序列 * popV:待验证的弹栈序列 需要判断 popV 是否可能是 pushV 对应的弹栈序列。 核心思路 要解决这个问题,我们需要理解栈的工作机制:压栈操作:元素按照 pushV 的顺序依次入栈弹栈操作:在任意时刻,只能弹出栈顶元素时机选择:

By Ne0inhk
【LeetCode_206】反转链表

【LeetCode_206】反转链表

刷爆LeetCode系列 * LeetCode第206题:反转链表 * github地址 * 前言 * 题目描述 * 题目与思路分析 * 思路一:反转链表的指针指向 * 思路二:取链表的结点,头插到新链表中 * 代码实现 * 思路一:反转指针指向 * 以下两种写法是保存curNext指针的方式不同 * 思路二:取原链表中的节点,头插到新链表 * 试错代码 * 算法代码优化 * 思路一优化: LeetCode第206题:反转链表 github地址 有梦想的电信狗 前言 本文用C++实现LeetCode第206题:反转链表 题目描述 * 题目链接:https://leetcode-cn.com/problems/reverse-linked-list/description/ 题目与思路分析 目标分析: 1. 有单链表的头节点 head ,反转原链表 2. 返回反转后的链表的头指针 3. 提高要求:时间复杂度为O(n)

By Ne0inhk
【组合数学 动态规划】P6870 [COCI2019-2020#5] Zapina|普及+

【组合数学 动态规划】P6870 [COCI2019-2020#5] Zapina|普及+

本文涉及知识点 组合数学汇总 C++动态规划 [COCI2019-2020#5] Zapina 题目描述 有 n n n 个不同的人和 n n n 道不同的题。 第 i i i 个人开心当且仅当他被分配到 i i i 道题,题号不限。 求让至少一个人开心的分配方案数。 输入格式 一个正整数: n n n。 输出格式 一个数字:你的答案 m o d 10 9 + 7 \bmod 10^9+7 mod109+7。 样例 #1

By Ne0inhk