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