KiviBot 轻量、跨平台的 QQ 机器人框架

机器人框架


插件开发技巧

<h1>插件开发技巧</h1> <ul> <li>[插件开发技巧]() <ul> <li>[<em>判断首字符</em>]()</li> <li><a href="7"><em>发送图文</em></a></li> <li>[<em>数据存储</em>]() <ul> <li>[临时存储(重载丢失)]()</li> <li>[持久存储(ai 生成)]()</li> </ul></li> <li>[<em>网络请求</em>]()</li> <li>[待更新补充]()</li> </ul></li> </ul> <p><strong>下面均为部分代码!</strong></p> <h2><em>判断首字符</em></h2> <p>typescript</p> <pre><code>if (e.raw_message.startsWith(&amp;quot;点歌&amp;quot;)) { // 执行代码 }</code></pre> <h2><em>发送图文</em></h2> <p>typescript</p> <pre><code>import { definePlugin, segment } from &amp;quot;kivibot&amp;quot;; export default definePlugin({ name: &amp;quot;demo&amp;quot;, version: &amp;quot;1.0.0&amp;quot;, async setup(ctx) { ctx.handle(&amp;quot;message&amp;quot;, async (e) =&amp;gt; { const img = segment.image(&amp;quot;https://example.com/image.jpg&amp;quot;); const msg = &amp;quot;Hello World&amp;quot;; e.reply([img, msg]); }); }, });</code></pre> <h2><em>数据存储</em></h2> <h3>临时存储(重载丢失)</h3> <p>typescript</p> <pre><code>// 在插件作用域内使用 Map 存储临时数据 const tempData = new Map&amp;lt;string, any&amp;gt;(); export default definePlugin({ name: &amp;quot;demo&amp;quot;, version: &amp;quot;1.0.0&amp;quot;, async setup(ctx) { tempData.set(&amp;quot;key&amp;quot;, &amp;quot;value&amp;quot;); console.log(tempData.get(&amp;quot;key&amp;quot;)); // 输出: value }, });</code></pre> <h3>持久存储(ai 生成)</h3> <p>typescript</p> <pre><code>import { definePlugin } from &amp;quot;kivibot&amp;quot;; import { join } from &amp;quot;path&amp;quot;; import { readFileSync, writeFileSync, existsSync } from &amp;quot;fs&amp;quot;; export default definePlugin({ name: &amp;quot;demo&amp;quot;, version: &amp;quot;1.0.0&amp;quot;, async setup(ctx) { // 数据文件路径 const dataPath = join(__dirname, &amp;quot;config.json&amp;quot;); // 默认配置 const defaultConfig = { name: &amp;quot;kivibot&amp;quot;, enabled: true, }; // 读取数据 function loadData() { try { if (existsSync(dataPath)) { const data = readFileSync(dataPath, &amp;quot;utf8&amp;quot;); return JSON.parse(data); } // 首次运行时创建默认配置 saveData(defaultConfig); return defaultConfig; } catch (err) { console.error(&amp;quot;读取配置文件失败:&amp;quot;, err); return defaultConfig; } } // 保存数据 function saveData(data: any) { try { writeFileSync(dataPath, JSON.stringify(data, null, 2)); return true; } catch (err) { console.error(&amp;quot;保存配置文件失败:&amp;quot;, err); return false; } } // 使用示例 const config = loadData(); config.lastUpdate = Date.now(); saveData(config); }, });</code></pre> <h2><em>网络请求</em></h2> <p>KiviBot 内置了 axios,可直接使用:</p> <p>typescript</p> <pre><code>import { definePlugin, axios } from &amp;quot;kivibot&amp;quot;; export default definePlugin({ name: &amp;quot;demo&amp;quot;, version: &amp;quot;1.0.0&amp;quot;, async setup(ctx) { ctx.handle(&amp;quot;message&amp;quot;, async (e) =&amp;gt; { try { const res = await axios.get(&amp;quot;https://api.example.com&amp;quot;); e.reply(res.data); } catch (err) { console.error(&amp;quot;请求失败:&amp;quot;, err); } }); }, });</code></pre> <h2>待更新补充</h2> <p>如果您有好的技巧,欢迎在群内分享或提交 PR,感谢您的贡献!</p>

页面列表

ITEM_HTML