177 lines
175 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>util | Marsho AI</title>
<meta name="description" content="Kawaii, Intelligent and Easy to Extend">
<meta name="generator" content="VitePress v1.6.3">
<link rel="preload stylesheet" href="/assets/style.BUX0sJO8.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.1yXGHHgl.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.RcKEpCgK.js">
<link rel="modulepreload" href="/assets/chunks/framework.CTVYQtO4.js">
<link rel="modulepreload" href="/assets/en_dev_api_util.md.DR5PlfqD.lean.js">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-23d7ee04><!--[--><!--]--><!--[--><span tabindex="-1" data-v-21500cc4></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-21500cc4>Skip to content</a><!--]--><!----><header class="VPNav" data-v-23d7ee04 data-v-fbfa125b><div class="VPNavBar" data-v-fbfa125b data-v-6aee6108><div class="wrapper" data-v-6aee6108><div class="container" data-v-6aee6108><div class="title" data-v-6aee6108><div class="VPNavBarTitle has-sidebar" data-v-6aee6108 data-v-05d55397><a class="title" href="/en/" data-v-05d55397><!--[--><!--]--><!--[--><!--[--><!--[--><img class="VPImage dark logo" src="/marsho-full.svg" alt="Marsho Logo" data-v-9ebe201e><!--]--><!--[--><img class="VPImage light logo" src="/marsho-full.svg" alt="Marsho Logo" data-v-9ebe201e><!--]--><!--]--><!--]--><span data-v-05d55397>Marsho AI</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aee6108><div class="content-body" data-v-6aee6108><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aee6108><!----></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aee6108 data-v-30adaf87><span id="main-nav-aria-label" class="visually-hidden" data-v-30adaf87> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en" tabindex="0" data-v-30adaf87 data-v-bae6b1fb><!--[--><span data-v-bae6b1fb>Home</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/start/install" tabindex="0" data-v-30adaf87 data-v-bae6b1fb><!--[--><span data-v-bae6b1fb>Usage</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/en/dev/extension" tabindex="0" data-v-30adaf87 data-v-bae6b1fb><!--[--><span data-v-bae6b1fb>Develop</span><!--]--></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-6aee6108 data-v-ef89c5a6 data-v-361e1e3d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Language" data-v-361e1e3d><span class="text" data-v-361e1e3d><span class="vpi-languages option-icon" data-v-361e1e3d></span><!----><span class="vpi-chevron-down text-icon" data-v-361e1e3d></span></span></button><div class="menu" data-v-361e1e3d><div class="VPMenu" data-v-361e1e3d data-v-3cb383e8><!----><!--[--><!--[--><div class="items" data-v-ef89c5a6><p class="title" data-v-ef89c5a6>English</p><!--[--><div class="VPMenuLink" data-v-ef89c5a6 data-v-e719711c><a class="VPLink link" href="/dev/api/util" data-v-e719711c><!--[--><span data-v-e719711c>简体中文</span><!--]--></a></div><div class="VPMenuLink" data-v-ef89c5a6 data-v-e719711c><a class="VPLink link" href="/ja/dev/api/util" data-v-e719711c><!--[--><span data-v-e719711c>日本語</span><!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-6aee6108 data-v-696d2565><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-696d2565 data-v-a2db82bb data-v-34d58b3a><span class="check" data-v-34d58b3a><span class="icon" data-v-34d58b3a><!--[--><span class="vpi-sun sun" data-v-a2db82bb></span><span class="vpi-moon moon" data-v-a2db82bb></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aee6108 data-v-8a15bdfe data-v-4736dec0><!--[--><a class="VPSocialLink no-icon" href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai" aria-label="github" target="_blank" rel="noopener" data-v-4736dec0 data-v-2c86eb22><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://git.liteyuki.icu/LiteyukiStudio/nonebot-plugin-marshoai" aria-label target="_blank" rel="noopener" data-v-4736dec0 data-v-2c86eb22><svg t="1725391346807" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5067" width="256" height="256"><path d="M1004.692673 466.396616l-447.094409-447.073929c-25.743103-25.763582-67.501405-25.763582-93.264987 0l-103.873521 103.873521 78.171378 78.171378c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928 0 14.827372-3.358686 28.856031-9.359266 41.389666l127.97824 127.97824c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928s-42.98709 96.00928-96.00928 96.00928-96.00928-42.98709-96.00928-96.00928c0-14.827372 3.358686-28.856031 9.359266-41.389666l-127.97824-127.97824c-3.051489 1.454065-6.184898 2.744293-9.379746 3.870681l0 266.97461c37.273227 13.188988 63.99936 48.721433 63.99936 90.520695 0 53.02219-42.98709 96.00928-96.00928 96.00928s-96.00928-42.98709-96.00928-96.00928c0-41.799262 26.726133-77.331707 63.99936-90.520695l0-266.97461c-37.273227-13.188988-63.99936-48.721433-63.99936-90.520695 0-14.827372 3.358686-28.856031 9.359266-41.389666l-78.171378-78.171378-295.892081 295.871601c-25.743103 25.784062-25.743103 67.542365 0 93.285467l447.114889 447.073929c25.743103 25.743103 67.480925 25.743103 93.264987 0l445.00547-445.00547c25.763582-25.763582 25.763582-67.542365 0-93.285467z" fill="#a2d8f4" p-id="5068"></path></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aee6108 data-v-a6a0480f data-v-361e1e3d><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-361e1e3d><span class="vpi-more-horizontal icon" data-v-361e1e3d></span></button><div class="menu" data-v-361e1e3d><div class="VPMenu" data-v-361e1e3d data-v-3cb383e8><!----><!--[--><!--[--><div class="group translations" data-v-a6a0480f><p class="trans-title" data-v-a6a0480f>English</p><!--[--><div class="VPMenuLink" data-v-a6a0480f data-v-e719711c><a class="VPLink link" href="/dev/api/util" data-v-e719711c><!--[--><span data-v-e719711c>简体中文</span><!--]--></a></div><div class="VPMenuLink" data-v-a6a0480f data-v-e719711c><a class="VPLink link" href="/ja/dev/api/util" data-v-e719711c><!--[--><span data-v-e719711c>日本語</span><!--]--></a></div><!--]--></div><div class="group" data-v-a6a0480f><div class="item appearance" data-v-a6a0480f><p class="label" data-v-a6a0480f>Theme</p><div class="appearance-action" data-v-a6a0480f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-a6a0480f data-v-a2db82bb data-v-34d58b3a><span class="check" data-v-34d58b3a><span class="icon" data-v-34d58b3a><!--[--><span class="vpi-sun sun" data-v-a2db82bb></span><span class="vpi-moon moon" data-v-a2db82bb></span><!--]--></span></span></button></div></div></div><div class="group" data-v-a6a0480f><div class="item social-links" data-v-a6a0480f><div class="VPSocialLinks social-links-list" data-v-a6a0480f data-v-4736dec0><!--[--><a class="VPSocialLink no-icon" href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai" aria-label="github" target="_blank" rel="noopener" data-v-4736dec0 data-v-2c86eb22><span class="vpi-social-github"></span></a><a class="VPSocialLink no-icon" href="https://git.liteyuki.icu/LiteyukiStudio/nonebot-plugin-marshoai" aria-label target="_blank" rel="noopener" data-v-4736dec0 data-v-2c86eb22><svg t="1725391346807" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5067" width="256" height="256"><path d="M1004.692673 466.396616l-447.094409-447.073929c-25.743103-25.763582-67.501405-25.763582-93.264987 0l-103.873521 103.873521 78.171378 78.171378c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928 0 14.827372-3.358686 28.856031-9.359266 41.389666l127.97824 127.97824c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928s-42.98709 96.00928-96.00928 96.00928-96.00928-42.98709-96.00928-96.00928c0-14.827372 3.358686-28.856031 9.359266-41.389666l-127.97824-127.97824c-3.051489 1.454065-6.184898 2.744293-9.379746 3.870681l0 266.97461c37.273227 13.188988 63.99936 48.721433 63.99936 90.520695 0 53.02219-42.98709 96.00928-96.00928 96.00928s-96.00928-42.98709-96.00928-96.00928c0-41.799262 26.726133-77.331707 63.99936-90.520695l0-266.97461c-37.273227-13.188988-63.99936-48.721433-63.99936-90.520695 0-14.827372 3.358686-28.856031 9.359266-41.389666l-78.171378-78.171378-295.892081 295.871601c-25.743103 25.784062-25.743103 67.542365 0 93.285467l447.114889 447.073929c25.743103 25.743103 67.480925 25.743103 93.264987 0l445.00547-445.00547c25.763582-25.763582 25.763582-67.542365 0-93.285467z" fill="#a2d8f4" p-id="5068"></path></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aee6108 data-v-17abe3c5><span class="container" data-v-17abe3c5><span class="top" data-v-17abe3c5></span><span class="middle" data-v-17abe3c5></span><span class="bottom" data-v-17abe3c5></span></span></button></div></div></div></div><div class="divider" data-v-6aee6108><div class="divider-line" data-v-6aee6108></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-23d7ee04 data-v-c757f451><div class="container" data-v-c757f451><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-c757f451><span class="vpi-align-left menu-icon" data-v-c757f451></span><span class="menu-text" data-v-c757f451>Option</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-c757f451 data-v-f2f3c892><button data-v-f2f3c892>To top</button><!----></div></div></div><aside class="VPSidebar" data-v-23d7ee04 data-v-70bbbbd4><div class="curtain" data-v-70bbbbd4></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-70bbbbd4><span class="visually-hidden" id="sidebar-aria-label" data-v-70bbbbd4> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-570ab647><section class="VPSidebarItem level-0 has-active" data-v-570ab647 data-v-dca74b64><div class="item" role="button" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><h2 class="text" data-v-dca74b64>MARSHOAI</h2><!----></div><div class="items" data-v-dca74b64><!--[--><section class="VPSidebarItem level-1 collapsible collapsed is-link has-active" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/index" data-v-dca74b64><!--[--><h3 class="text" data-v-dca74b64>api</h3><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/azure" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>azure</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/azure_onebot" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>azure_onebot</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 collapsible collapsed" data-v-dca74b64 data-v-dca74b64><div class="item" role="button" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><h4 class="text" data-v-dca74b64>plugins</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/marshoai_basic/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_basic</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/marshoai_basic/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>builtin_tools</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/chat" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>chat</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/file_io" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>file_io</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/liteyuki" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>liteyuki</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/manager" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>manager</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/network" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>network</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/builtin_tools/utils" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>utils</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/marshoai_bangumi/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_bangumi</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/marshoai_bangumi/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_megakits/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>twisuki_megakits</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_megakits/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_megakits/mk_morse_code" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_morse_code</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_megakits/mk_nya_code" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_nya_code</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>twisuki_petcat</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/pc_cat" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>pc_cat</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/pc_info" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>pc_info</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/pc_shop" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>pc_shop</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins/twisuki_petcat/pc_token" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>pc_token</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-dca74b64 data-v-dca74b64><div class="item" role="button" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><h4 class="text" data-v-dca74b64>plugins_test</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_basic/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_basic</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_basic/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_memory/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_memory</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_memory/command" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>command</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_memory/config" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/marshoai_memory/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/random_number_generator" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>random_number_generator</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/snowykami_testplugin/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>snowykami_testplugin</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/snowykami_testplugin/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugins_test/weather_demo" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>weather_demo</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-dca74b64 data-v-dca74b64><div class="item" role="button" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><h4 class="text" data-v-dca74b64>tools</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_bangumi/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_bangumi</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_bangumi/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_basic/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_basic</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_basic/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_megakits</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/mk_common" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_common</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/mk_info" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_info</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/mk_morse_code" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_morse_code</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_megakits/mk_nya_code" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mk_nya_code</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_memory/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_memory</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_memory/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_meogirl/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_meogirl</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_meogirl/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_meogirl/mg_info" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mg_info</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_meogirl/mg_introduce" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mg_introduce</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools/marshoai_meogirl/mg_search" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>mg_search</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><section class="VPSidebarItem level-2 collapsible collapsed" data-v-dca74b64 data-v-dca74b64><div class="item" role="button" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><h4 class="text" data-v-dca74b64>tools_wip</h4><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools_wip/marshoai_memory/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>marshoai_memory</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/tools_wip/marshoai_memory/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/config" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>config</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/constants" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>constants</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/deal_latex" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>deal_latex</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/dev" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>dev</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/hooks" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>hooks</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/hunyuan" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>hunyuan</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/instances" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>instances</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/marsho" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>marsho</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/marsho_onebot" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>marsho_onebot</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/metadata" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>metadata</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/models" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>models</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/observer" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>observer</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-2 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/index" data-v-dca74b64><!--[--><h4 class="text" data-v-dca74b64>plugin</h4><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/register" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>register</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-3 collapsible collapsed is-link" data-v-dca74b64 data-v-dca74b64><div class="item" tabindex="0" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/index" data-v-dca74b64><!--[--><h5 class="text" data-v-dca74b64>func_call</h5><!--]--></a><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-dca74b64><span class="vpi-chevron-right caret-icon" data-v-dca74b64></span></div></div><div class="items" data-v-dca74b64><!--[--><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/caller" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>caller</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/models" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>models</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/params" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>params</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-4 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/func_call/utils" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>utils</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>index</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/load" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>load</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/models" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>models</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/typing" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>typing</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-3 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/plugin/utils" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>utils</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/util" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>util</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-dca74b64 data-v-dca74b64><div class="item" data-v-dca74b64><div class="indicator" data-v-dca74b64></div><a class="VPLink link link" href="/en/dev/api/util_hunyuan" data-v-dca74b64><!--[--><p class="text" data-v-dca74b64>util_hunyuan</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-23d7ee04 data-v-f3c91dc2><div class="VPDoc has-sidebar has-aside" data-v-f3c91dc2 data-v-32bb7f8a><!--[--><!--]--><div class="container" data-v-32bb7f8a><div class="aside" data-v-32bb7f8a><div class="aside-curtain" data-v-32bb7f8a></div><div class="aside-container" data-v-32bb7f8a><div class="aside-content" data-v-32bb7f8a><div class="VPDocAside" data-v-32bb7f8a data-v-8dfeab0c><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-8dfeab0c data-v-99c700dd><div class="content" data-v-99c700dd><div class="outline-marker" data-v-99c700dd></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-99c700dd>On this page</div><ul class="VPDocOutlineItem root" data-v-99c700dd data-v-02599d5e><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-8dfeab0c></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-32bb7f8a><div class="content-container" data-v-32bb7f8a><!--[--><!--]--><main class="main" data-v-32bb7f8a><div style="position:relative;" class="vp-doc _en_dev_api_util" data-v-32bb7f8a><div><h1 id="module-nonebot-plugin-marshoai-util" tabindex="-1"><strong>Module</strong> <code>nonebot_plugin_marshoai.util</code> <a class="header-anchor" href="#module-nonebot-plugin-marshoai-util" aria-label="Permalink to &quot;**Module** `nonebot_plugin_marshoai.util`&quot;"></a></h1><h3 id="var-nickname-json" tabindex="-1">var <code>nickname_json</code> <a class="header-anchor" href="#var-nickname-json" aria-label="Permalink to &quot;var `nickname_json`&quot;"></a></h3><ul><li><p><strong>Description</strong>: 记录昵称</p></li><li><p><strong>Default</strong>: <code>None</code></p></li></ul><h3 id="var-praises-json" tabindex="-1">var <code>praises_json</code> <a class="header-anchor" href="#var-praises-json" aria-label="Permalink to &quot;var `praises_json`&quot;"></a></h3><ul><li><p><strong>Description</strong>: 记录夸赞名单</p></li><li><p><strong>Default</strong>: <code>None</code></p></li></ul><h3 id="var-loaded-target-list" tabindex="-1">var <code>loaded_target_list</code> <a class="header-anchor" href="#var-loaded-target-list" aria-label="Permalink to &quot;var `loaded_target_list`&quot;"></a></h3><ul><li><p><strong>Description</strong>: 记录已恢复备份的上下文的列表</p></li><li><p><strong>Default</strong>: <code>[]</code></p></li></ul><hr><h3 id="async-func-get-image-raw-and-type-url-str-timeout-int-10-optional-tuple-bytes-str" tabindex="-1"><em><strong>async func</strong></em> <code>get_image_raw_and_type(url: str, timeout: int = 10) -&gt; Optional[tuple[bytes, str]]</code> <a class="header-anchor" href="#async-func-get-image-raw-and-type-url-str-timeout-int-10-optional-tuple-bytes-str" aria-label="Permalink to &quot;***async func*** `get_image_raw_and_type(url: str, timeout: int = 10) -&gt; Optional[tuple[bytes, str]]`&quot;"></a></h3><p><strong>Description</strong>: 获取图片的二进制数据</p><p><strong>Arguments</strong>:</p><blockquote><ul><li>url: str 图片链接</li><li>timeout: int 超时时间 秒</li></ul></blockquote><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L61" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_image_raw_and_type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(url: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, timeout: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">int</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; Optional[tuple[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">bytes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]]:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> httpx.AsyncClient() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> client:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> response </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> client.get(url, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">headers</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">_browser_headers, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">timeout</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">timeout)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> response.status_code </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 200</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> content_type </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> response.headers.get(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Content-Type&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> not</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> content_type:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> content_type </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> mimetypes.guess_type(url)[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (response.content, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(content_type))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span></span></code></pre></div></details><hr><h3 id="async-func-get-image-b64-url-str-timeout-int-10-optional-str" tabindex="-1"><em><strong>async func</strong></em> <code>get_image_b64(url: str, timeout: int = 10) -&gt; Optional[str]</code> <a class="header-anchor" href="#async-func-get-image-b64-url-str-timeout-int-10-optional-str" aria-label="Permalink to &quot;***async func*** `get_image_b64(url: str, timeout: int = 10) -&gt; Optional[str]`&quot;"></a></h3><p><strong>Description</strong>: 获取图片的base64编码</p><p><strong>Arguments</strong>:</p><blockquote><ul><li>url: 图片链接</li><li>timeout: 超时时间 秒</li></ul></blockquote><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L88" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_image_b64</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(url: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, timeout: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">int</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; Optional[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (data_type </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_image_raw_and_type(url.replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;http://&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">), timeout))):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> base64_image </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> base64.b64encode(data_type[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]).decode(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data_url </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;data:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">;base64,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.format(data_type[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], base64_image)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data_url</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span></span></code></pre></div></details><hr><h3 id="async-func-make-chat-client-chatcompletionsclient-msg-list-model-name-str-tools-optional-list-none" tabindex="-1"><em><strong>async func</strong></em> <code>make_chat(client: ChatCompletionsClient, msg: list, model_name: str, tools: Optional[list] = None)</code> <a class="header-anchor" href="#async-func-make-chat-client-chatcompletionsclient-msg-list-model-name-str-tools-optional-list-none" aria-label="Permalink to &quot;***async func*** `make_chat(client: ChatCompletionsClient, msg: list, model_name: str, tools: Optional[list] = None)`&quot;"></a></h3><p><strong>Description</strong>: 调用ai获取回复</p><p><strong>Arguments</strong>:</p><blockquote><ul><li>client: 用于与AI模型进行通信</li><li>msg: 消息内容</li><li>model_name: 指定AI模型名</li><li>tools: 工具列表</li></ul></blockquote><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L110" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> make_chat</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(client: ChatCompletionsClient, msg: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, model_name: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, tools: Optional[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> client.complete(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">msg, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">model</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">model_name, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">tools</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tools, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">temperature</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_temperature, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">max_tokens</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_max_tokens, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">top_p</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_top_p)</span></span></code></pre></div></details><hr><h3 id="async-func-make-chat-openai-client-asyncopenai-msg-list-model-name-str-tools-optional-list-none" tabindex="-1"><em><strong>async func</strong></em> <code>make_chat_openai(client: AsyncOpenAI, msg: list, model_name: str, tools: Optional[list] = None)</code> <a class="header-anchor" href="#async-func-make-chat-openai-client-asyncopenai-msg-list-model-name-str-tools-optional-list-none" aria-label="Permalink to &quot;***async func*** `make_chat_openai(client: AsyncOpenAI, msg: list, model_name: str, tools: Optional[list] = None)`&quot;"></a></h3><p><strong>Description</strong>: 使用 Openai SDK 调用ai获取回复</p><p><strong>Arguments</strong>:</p><blockquote><ul><li>client: 用于与AI模型进行通信</li><li>msg: 消息内容</li><li>model_name: 指定AI模型名</li><li>tools: 工具列表</li></ul></blockquote><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L135" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> make_chat_openai</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(client: AsyncOpenAI, msg: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, model_name: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, tools: Optional[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> client.chat.completions.create(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">messages</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">msg, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">model</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">model_name, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">tools</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">tools </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NOT_GIVEN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">temperature</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_temperature </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NOT_GIVEN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">max_tokens</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_max_tokens </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NOT_GIVEN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">top_p</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_top_p </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> NOT_GIVEN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">timeout</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_timeout)</span></span></code></pre></div></details><hr><h3 id="func-get-praises" tabindex="-1"><em><strong>func</strong></em> <code>get_praises()</code> <a class="header-anchor" href="#func-get-praises" aria-label="Permalink to &quot;***func*** `get_praises()`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L161" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_praises</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">is</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_file </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> store.get_plugin_data_file(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;praises.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> not</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_file.exists():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(praises_file, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;w&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.dump(_praises_init_data, f, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ensure_ascii</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">False</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">indent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(praises_file, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.load(f)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json</span></span></code></pre></div></details><hr><h3 id="async-func-refresh-praises-json" tabindex="-1"><em><strong>async func</strong></em> <code>refresh_praises_json()</code> <a class="header-anchor" href="#async-func-refresh-praises-json" aria-label="Permalink to &quot;***async func*** `refresh_praises_json()`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L176" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> refresh_praises_json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_file </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> store.get_plugin_data_file(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;praises.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> not</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_file.exists():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(praises_file, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;w&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.dump(_praises_init_data, f, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ensure_ascii</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">False</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">indent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> aiofiles.open(praises_file, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.loads(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.read())</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data</span></span></code></pre></div></details><hr><h3 id="func-build-praises-str" tabindex="-1"><em><strong>func</strong></em> <code>build_praises() -&gt; str</code> <a class="header-anchor" href="#func-build-praises-str" aria-label="Permalink to &quot;***func*** `build_praises() -&gt; str`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L187" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> build_praises</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() -&gt; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_praises()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;你喜欢以下几个人物,他们有各自的优点:&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> item </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;like&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result.append(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;名字:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">item[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">,优点:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">item[</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;advantages&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.join(result)</span></span></code></pre></div></details><hr><h3 id="async-func-save-context-to-json-name-str-context-any-path-str" tabindex="-1"><em><strong>async func</strong></em> <code>save_context_to_json(name: str, context: Any, path: str)</code> <a class="header-anchor" href="#async-func-save-context-to-json-name-str-context-any-path-str" aria-label="Permalink to &quot;***async func*** `save_context_to_json(name: str, context: Any, path: str)`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L195" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> save_context_to_json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(name: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, context: Any, path: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (context_dir </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (store.get_plugin_data_dir() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path)).mkdir(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">parents</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">exist_ok</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(context_dir </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">name</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;w&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json_file:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.dump(context, json_file, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ensure_ascii</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">False</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">indent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div></details><hr><h3 id="async-func-load-context-from-json-name-str-path-str-list" tabindex="-1"><em><strong>async func</strong></em> <code>load_context_from_json(name: str, path: str) -&gt; list</code> <a class="header-anchor" href="#async-func-load-context-from-json-name-str-path-str-list" aria-label="Permalink to &quot;***async func*** `load_context_from_json(name: str, path: str) -&gt; list`&quot;"></a></h3><p><strong>Description</strong>: 从指定路径加载历史记录</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L204" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> load_context_from_json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(name: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, path: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (context_dir </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (store.get_plugin_data_dir() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> path)).mkdir(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">parents</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">exist_ok</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">True</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (file_path </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (context_dir </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">name</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)).exists():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> aiofiles.open(file_path, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json_file:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.loads(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json_file.read())</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> []</span></span></code></pre></div></details><hr><h3 id="async-func-get-nicknames" tabindex="-1"><em><strong>async func</strong></em> <code>get_nicknames()</code> <a class="header-anchor" href="#async-func-get-nicknames" aria-label="Permalink to &quot;***async func*** `get_nicknames()`&quot;"></a></h3><p><strong>Description</strong>: 获取nickname_json, 优先来源于全局变量</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L216" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_nicknames</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">is</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> filename </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> store.get_plugin_data_file(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;nickname.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> try</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> aiofiles.open(filename, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.loads(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.read())</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> except</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> Exception</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {}</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json</span></span></code></pre></div></details><hr><h3 id="async-func-set-nickname-user-id-str-name-str" tabindex="-1"><em><strong>async func</strong></em> <code>set_nickname(user_id: str, name: str)</code> <a class="header-anchor" href="#async-func-set-nickname-user-id-str-name-str" aria-label="Permalink to &quot;***async func*** `set_nickname(user_id: str, name: str)`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L230" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> set_nickname</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(user_id: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, name: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> filename </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> store.get_plugin_data_file(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;nickname.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> not</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> filename.exists():</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {}</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> aiofiles.open(filename, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.loads(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.read())</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data[user_id] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">==</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;&#39;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> and</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> user_id </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> del</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data[user_id]</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> open</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(filename, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;w&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.dump(data, f, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ensure_ascii</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">False</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">indent</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> data</span></span></code></pre></div></details><hr><h3 id="async-func-refresh-nickname-json" tabindex="-1"><em><strong>async func</strong></em> <code>refresh_nickname_json()</code> <a class="header-anchor" href="#async-func-refresh-nickname-json" aria-label="Permalink to &quot;***async func*** `refresh_nickname_json()`&quot;"></a></h3><p><strong>Description</strong>: 强制刷新nickname_json, 刷新全局变量</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L246" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> refresh_nickname_json</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> try</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> with</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> aiofiles.open(store.get_plugin_data_file(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;nickname.json&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">), </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;r&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">encoding</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;utf-8&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> nickname_json </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> json.loads(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.read())</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> except</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> Exception</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> logger.error(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;刷新 nickname_json 表错误:无法载入 nickname.json 文件&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div></details><hr><h3 id="func-get-prompt" tabindex="-1"><em><strong>func</strong></em> <code>get_prompt()</code> <a class="header-anchor" href="#func-get-prompt" aria-label="Permalink to &quot;***func*** `get_prompt()`&quot;"></a></h3><p><strong>Description</strong>: 获取系统提示词</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L259" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_prompt</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> prompts </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config.marshoai_additional_prompt</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config.marshoai_enable_praises:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_prompt </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> build_praises()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> prompts </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> praises_prompt</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config.marshoai_enable_time_prompt:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> prompts </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> _time_prompt.format(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">date_time</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(current_time </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> DateTime.now()).strftime(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;%Y年%m月</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">%d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">日 %H:%M:%S&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">), </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">weekday_name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">_weekdays[current_time.weekday()], </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">lunar_date</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">current_time.chinesize.date_hanzify(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;农历</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{干支年}{生肖}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"></span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{月份}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"></span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{数序日}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> marsho_prompt </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config.marshoai_prompt</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> spell </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> SystemMessage(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">content</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">marsho_prompt </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> prompts).as_dict()</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> spell</span></span></code></pre></div></details><hr><h3 id="func-suggest-solution-errinfo-str-str" tabindex="-1"><em><strong>func</strong></em> <code>suggest_solution(errinfo: str) -&gt; str</code> <a class="header-anchor" href="#func-suggest-solution-errinfo-str-str" aria-label="Permalink to &quot;***func*** `suggest_solution(errinfo: str) -&gt; str`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L282" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> suggest_solution</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(errinfo: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> suggestions </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;content_filter&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;消息已被内容过滤器过滤。请调整聊天内容后重试。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;RateLimitReached&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;模型达到调用速率限制。请稍等一段时间或联系Bot管理员。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;tokens_limit_reached&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;请求token达到上限。请重置上下文。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;content_length_limit&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;请求体过大。请重置上下文。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;unauthorized&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;访问token无效。请联系Bot管理员。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;invalid type: parameter messages.content is of type array but should be of type string.&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;聊天请求体包含此模型不支持的数据类型。请重置上下文。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;At most 1 image(s) may be provided in one request.&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;此模型只能在上下文中包含1张图片。如果此前的聊天已经发送过图片请重置上下文。&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> key, suggestion </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> suggestions.items():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> key </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> errinfo:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">suggestion</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;&#39;</span></span></code></pre></div></details><hr><h3 id="async-func-get-backup-context-target-id-str-target-private-bool-list" tabindex="-1"><em><strong>async func</strong></em> <code>get_backup_context(target_id: str, target_private: bool) -&gt; list</code> <a class="header-anchor" href="#async-func-get-backup-context-target-id-str-target-private-bool-list" aria-label="Permalink to &quot;***async func*** `get_backup_context(target_id: str, target_private: bool) -&gt; list`&quot;"></a></h3><p><strong>Description</strong>: 获取历史上下文</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L301" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_backup_context</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(target_id: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, target_private: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">bool</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> loaded_target_list</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> target_private:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> target_uid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;private_</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">target_id</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> target_uid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;group_</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">target_id</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> target_uid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">not</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> loaded_target_list:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> loaded_target_list.append(target_uid)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> load_context_from_json(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">f</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;back_up_context_</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">target_uid</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;contexts/backup&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> []</span></span></code></pre></div></details><hr><h3 id="func-extract-content-and-think-message-chatcompletionmessage-tuple-str-str-none-chatcompletionmessage" tabindex="-1"><em><strong>func</strong></em> <code>extract_content_and_think(message: ChatCompletionMessage) -&gt; tuple[str, str | None, ChatCompletionMessage]</code> <a class="header-anchor" href="#func-extract-content-and-think-message-chatcompletionmessage-tuple-str-str-none-chatcompletionmessage" aria-label="Permalink to &quot;***func*** `extract_content_and_think(message: ChatCompletionMessage) -&gt; tuple[str, str | None, ChatCompletionMessage]`&quot;"></a></h3><p><strong>Description</strong>: 处理 API 返回的消息对象,提取其中的内容和思维链,并返回处理后的消息,思维链,消息对象。</p><p><strong>Arguments</strong>:</p><blockquote><ul><li>message (ChatCompletionMessage): API 返回的消息对象。</li></ul></blockquote><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L470" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> extract_content_and_think</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(message: ChatCompletionMessage) -&gt; tuple[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, ChatCompletionMessage]:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> try</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> thinking </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message.reasoning_content</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> except</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> AttributeError</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> thinking </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> None</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> thinking:</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> delattr</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(message, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;reasoning_content&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> think_blocks </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> re.findall(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&lt;think&gt;(.*?)&lt;/think&gt;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message.content </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">flags</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">re.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">DOTALL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> thinking </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.join([block.strip() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> block </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> think_blocks </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> block.strip()])</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> content </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> re.sub(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&lt;think&gt;.*?&lt;/think&gt;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, message.content </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">or</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">flags</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">re.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">DOTALL</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).strip()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> message.content </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> content</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (content, thinking, message)</span></span></code></pre></div></details><h3 id="var-latex-convert" tabindex="-1">var <code>latex_convert</code> <a class="header-anchor" href="#var-latex-convert" aria-label="Permalink to &quot;var `latex_convert`&quot;"></a></h3><ul><li><p><strong>Description</strong>: 开启一个转换实例</p></li><li><p><strong>Default</strong>: <code>ConvertLatex()</code></p></li></ul><hr><p><code>@get_driver().on_bot_connect</code></p><h3 id="async-func-load-latex-convert" tabindex="-1"><em><strong>async func</strong></em> <code>load_latex_convert()</code> <a class="header-anchor" href="#async-func-load-latex-convert" aria-label="Permalink to &quot;***async func*** `load_latex_convert()`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L339" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">@get_driver</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;">.on_bot_connect</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> load_latex_convert</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">():</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> latex_convert.load_channel(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">None</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div></details><hr><h3 id="async-func-get-uuid-back2codeblock-msg-str-code-blank-uuid-map-list-tuple-str-str" tabindex="-1"><em><strong>async func</strong></em> <code>get_uuid_back2codeblock(msg: str, code_blank_uuid_map: list[tuple[str, str]])</code> <a class="header-anchor" href="#async-func-get-uuid-back2codeblock-msg-str-code-blank-uuid-map-list-tuple-str-str" aria-label="Permalink to &quot;***async func*** `get_uuid_back2codeblock(msg: str, code_blank_uuid_map: list[tuple[str, str]])`&quot;"></a></h3><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L342" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> get_uuid_back2codeblock</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(msg: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, code_blank_uuid_map: list[tuple[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]]):</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> torep, rep </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> code_blank_uuid_map:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg.replace(torep, rep)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg</span></span></code></pre></div></details><hr><h3 id="async-func-parse-richtext-msg-str-unimessage" tabindex="-1"><em><strong>async func</strong></em> <code>parse_richtext(msg: str) -&gt; UniMessage</code> <a class="header-anchor" href="#async-func-parse-richtext-msg-str-unimessage" aria-label="Permalink to &quot;***async func*** `parse_richtext(msg: str) -&gt; UniMessage`&quot;"></a></h3><p><strong>Description</strong>: 人工智能给出的回答一般不会包含 HTML 嵌入其中,但是包含图片或者 LaTeX 公式、代码块,都很正常。 这个函数会把这些都以图片形式嵌入消息体。</p><details><summary><b>Source code</b> or <a href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/util.py#L351" target="_blank">View on GitHub</a></summary><div class="language-python vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">python</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> def</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> parse_richtext</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(msg: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) -&gt; UniMessage:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> not</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> IMG_LATEX_PATTERN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.search(msg):</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> UniMessage(msg)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> UniMessage()</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> code_blank_uuid_map </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [(uuid.uuid4().hex, cbp.group()) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> cbp </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> CODE_BLOCK_PATTERN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.finditer(msg)]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> last_tag_index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> rep, torep </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> code_blank_uuid_map:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg.replace(torep, rep)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> each_find_tag </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> IMG_LATEX_PATTERN</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.finditer(msg):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> tag_found </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_uuid_back2codeblock(each_find_tag.group(), code_blank_uuid_map)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_uuid_back2codeblock(msg[last_tag_index:msg.find(tag_found)], code_blank_uuid_map)))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> last_tag_index </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> msg.find(tag_found) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> len</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(tag_found)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> each_find_tag.group(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> image_description </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> tag_found[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:tag_found.find(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)]</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> image_url </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> tag_found[tag_found.find(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;(&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (image_ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_image_raw_and_type(image_url))):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(ImageMsg(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">raw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">image_[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">mimetype</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">image_[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">], </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">image_description </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;.png&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">{}</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">.format(image_description)))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(tag_found))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> elif</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> each_find_tag.group(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> latex_exp </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_uuid_back2codeblock(each_find_tag.group().replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;$&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">(&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">)&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">[&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).replace(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">), code_blank_uuid_map)</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> latex_generate_ok, latex_generate_result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> latex_convert.generate_png(latex_exp, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">dpi</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">300</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">foreground_colour</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config.marshoai_main_colour)</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> latex_generate_ok:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(ImageMsg(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">raw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">latex_generate_result, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">mimetype</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;image/png&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;latex.png&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(latex_exp </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;(公式解析失败)&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> if</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> isinstance</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(latex_generate_result, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">str</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">):</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(latex_generate_result))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(ImageMsg(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">raw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">latex_generate_result, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">mimetype</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;image/png&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;latex_error.png&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(tag_found </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;(未知内容解析失败)&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">))</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg.append(TextMsg(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> get_uuid_back2codeblock(msg[last_tag_index:], code_blank_uuid_map)))</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> result_msg</span></span></code></pre></div></details><h3 id="var-thinking" tabindex="-1">var <code>thinking</code> <a class="header-anchor" href="#var-thinking" aria-label="Permalink to &quot;var `thinking`&quot;"></a></h3><ul><li><p><strong>Description</strong>: type: ignore</p></li><li><p><strong>Default</strong>: <code>message.reasoning_content</code></p></li></ul></div></div></main><footer class="VPDocFooter" data-v-32bb7f8a data-v-44e7d4c7><!--[--><!--]--><div class="edit-info" data-v-44e7d4c7><div class="edit-link" data-v-44e7d4c7><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai//util.py" target="_blank" rel="noreferrer" data-v-44e7d4c7><!--[--><span class="vpi-square-pen edit-link-icon" data-v-44e7d4c7></span> Edit this page<!--]--></a></div><div class="last-updated" data-v-44e7d4c7><p class="VPLastUpdated" data-v-44e7d4c7 data-v-e6b370f5>Last updated: <time datetime="2024-12-14T11:16:59.000Z" data-v-e6b370f5></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-44e7d4c7><span class="visually-hidden" id="doc-footer-aria-label" data-v-44e7d4c7>Pager</span><div class="pager" data-v-44e7d4c7><a class="VPLink link pager-link prev" href="/en/dev/api/plugin/utils" data-v-44e7d4c7><!--[--><span class="desc" data-v-44e7d4c7>Prev</span><span class="title" data-v-44e7d4c7>utils</span><!--]--></a></div><div class="pager" data-v-44e7d4c7><a class="VPLink link pager-link next" href="/en/dev/api/util_hunyuan" data-v-44e7d4c7><!--[--><span class="desc" data-v-44e7d4c7>Next</span><span class="title" data-v-44e7d4c7>util_hunyuan</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-23d7ee04 data-v-d6b1477e><div class="container" data-v-d6b1477e><p class="message" data-v-d6b1477e>The document is being improved. Suggestions are welcome.</p><p class="copyright" data-v-d6b1477e>© 2024 <a href="https://liteyuki.icu" target="_blank">Liteyuki Studio</a></p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"dev_api_azure.md\":\"B8-f9FUH\",\"dev_api_azure_onebot.md\":\"AF08dydV\",\"dev_api_config.md\":\"Cfe3T77C\",\"dev_api_constants.md\":\"CzodSzEx\",\"dev_api_deal_latex.md\":\"TC9acXCk\",\"dev_api_dev.md\":\"xtZBfvCK\",\"dev_api_hooks.md\":\"Oex5Osbq\",\"dev_api_hunyuan.md\":\"cwjzNkK4\",\"dev_api_index.md\":\"Cm--m-dj\",\"dev_api_instances.md\":\"DWIbF7zd\",\"dev_api_marsho.md\":\"Do6pvHEt\",\"dev_api_marsho_onebot.md\":\"CKXlpK6h\",\"dev_api_metadata.md\":\"gXVQsfb6\",\"dev_api_models.md\":\"Cbw0SnoS\",\"dev_api_observer.md\":\"DJa7EQIJ\",\"dev_api_plugin_func_call_caller.md\":\"ChdLIn42\",\"dev_api_plugin_func_call_index.md\":\"BYaO0YMf\",\"dev_api_plugin_func_call_models.md\":\"BqDLHq48\",\"dev_api_plugin_func_call_params.md\":\"5fFv65No\",\"dev_api_plugin_func_call_utils.md\":\"Cc06pgce\",\"dev_api_plugin_index.md\":\"D1cv5Bdt\",\"dev_api_plugin_load.md\":\"BThuue9-\",\"dev_api_plugin_models.md\":\"CMGeDMNV\",\"dev_api_plugin_register.md\":\"BcHWky_t\",\"dev_api_plugin_typing.md\":\"Bvzcc0i7\",\"dev_api_plugin_utils.md\":\"C8C60oh0\",\"dev_api_plugins_builtin_tools_chat.md\":\"EYzBkM7q\",\"dev_api_plugins_builtin_tools_file_io.md\":\"D8stO352\",\"dev_api_plugins_builtin_tools_index.md\":\"BZHQ5NNH\",\"dev_api_plugins_builtin_tools_liteyuki.md\":\"DiKmnkxA\",\"dev_api_plugins_builtin_tools_manager.md\":\"W6867JUV\",\"dev_api_plugins_builtin_tools_network.md\":\"CNUPusyd\",\"dev_api_plugins_builtin_tools_utils.md\":\"DDnRSzzR\",\"dev_api_plugins_marshoai_bangumi_index.md\":\"BLootinZ\",\"dev_api_plugins_marshoai_basic_index.md\":\"mHSCujgc\",\"dev_api_plugins_test_marshoai_basic_index.md\":\"Bi6J7R_z\",\"dev_api_plugins_test_marshoai_memory_command.md\":\"Cw7GmcD9\",\"dev_api_plugins_test_marshoai_memory_config.md\":\"DvFLax41\",\"dev_api_plugins_test_marshoai_memory_index.md\":\"ju9E5a1x\",\"dev_api_plugins_test_random_number_generator.md\":\"CzKwNN4y\",\"dev_api_plugins_test_snowykami_testplugin_index.md\":\"UDPC-Uc5\",\"dev_api_plugins_test_weather_demo.md\":\"-1KDL3oN\",\"dev_api_plugins_twisuki_megakits_index.md\":\"SJwjK6ir\",\"dev_api_plugins_twisuki_megakits_mk_morse_code.md\":\"BigBH96X\",\"dev_api_plugins_twisuki_megakits_mk_nya_code.md\":\"C6N9gA91\",\"dev_api_plugins_twisuki_petcat_index.md\":\"CyrVKk9d\",\"dev_api_plugins_twisuki_petcat_pc_cat.md\":\"Cw1-Jasb\",\"dev_api_plugins_twisuki_petcat_pc_info.md\":\"Hinys1nW\",\"dev_api_plugins_twisuki_petcat_pc_shop.md\":\"B1e0ZSxF\",\"dev_api_plugins_twisuki_petcat_pc_token.md\":\"iG64fH2l\",\"dev_api_tools_marshoai_bangumi_index.md\":\"Duze3TVP\",\"dev_api_tools_marshoai_basic_index.md\":\"BMkA9afb\",\"dev_api_tools_marshoai_megakits_index.md\":\"D48xEWt6\",\"dev_api_tools_marshoai_megakits_mk_common.md\":\"oRuEYCjm\",\"dev_api_tools_marshoai_megakits_mk_info.md\":\"DW5Ec5cn\",\"dev_api_tools_marshoai_megakits_mk_morse_code.md\":\"CmkxAt56\",\"dev_api_tools_marshoai_megakits_mk_nya_code.md\":\"BQAd-_l9\",\"dev_api_tools_marshoai_memory_index.md\":\"9yOjTtrq\",\"dev_api_tools_marshoai_meogirl_index.md\":\"BlcRo3XU\",\"dev_api_tools_marshoai_meogirl_mg_info.md\":\"Cay9kOBk\",\"dev_api_tools_marshoai_meogirl_mg_introduce.md\":\"dL8Yu_O0\",\"dev_api_tools_marshoai_meogirl_mg_search.md\":\"Dr7zV14D\",\"dev_api_tools_wip_marshoai_memory_index.md\":\"C1sn4qQD\",\"dev_api_util.md\":\"bY3K-Z46\",\"dev_api_util_hunyuan.md\":\"BcYu4BNL\",\"dev_extension.md\":\"DfIbM0Ke\",\"dev_index.md\":\"BbZ4wGtm\",\"dev_project.md\":\"CI3gYpYz\",\"en_dev_api_azure.md\":\"DT1uzYnu\",\"en_dev_api_azure_onebot.md\":\"CIa2eHTt\",\"en_dev_api_config.md\":\"DGpQD45h\",\"en_dev_api_constants.md\":\"sXFtrMz7\",\"en_dev_api_deal_latex.md\":\"BU7zmmQG\",\"en_dev_api_dev.md\":\"CIcPV23r\",\"en_dev_api_hooks.md\":\"9nKsutJk\",\"en_dev_api_hunyuan.md\":\"BVjQMbdk\",\"en_dev_api_index.md\":\"DIBcHO1C\",\"en_dev_api_instances.md\":\"Uv5rIROF\",\"en_dev_api_marsho.md\":\"DvWUjtQS\",\"en_dev_api_marsho_onebot.md\":\"Cv_1bxx2\",\"en_dev_api_metadata.md\":\"8d7RngMY\",\"en_dev_api_models.md\":\"CMIk6dnq\",\"en_dev_api_observer.md\":\"BwAsqPFr\",\"en_dev_api_plugin_func_call_caller.md\":\"D1KaE3UC\",\"en_dev_api_plugin_func_call_index.md\":\"CmTTjQrG\",\"en_dev_api_plugin_func_call_models.md\":\"Dnwx-XmI\",\"en_dev_api_plugin_func_call_params.md\":\"BL-ziAPI\",\"en_dev_api_plugin_func_call_utils.md\":\"DuAz8SQZ\",\"en_dev_api_plugin_index.md\":\"BAN2fSFL\",\"en_dev_api_plugin_load.md\":\"YI3IFDft\",\"en_dev_api_plugin_models.md\":\"CeUuFWL0\",\"en_dev_api_plugin_register.md\":\"CVhuYwtG\",\"en_dev_api_plugin_typing.md\":\"DAp7dLkh\",\"en_dev_api_plugin_utils.md\":\"BDIdQYrj\",\"en_dev_api_plugins_builtin_tools_chat.md\":\"QouqJGQV\",\"en_dev_api_plugins_builtin_tools_file_io.md\":\"CCeh5NmU\",\"en_dev_api_plugins_builtin_tools_index.md\":\"xlbKSHJ9\",\"en_dev_api_plugins_builtin_tools_liteyuki.md\":\"kig_vkcu\",\"en_dev_api_plugins_builtin_tools_manager.md\":\"CZHHLH84\",\"en_dev_api_plugins_builtin_tools_network.md\":\"CXnNVNQ9\",\"en_dev_api_plugins_builtin_tools_utils.md\":\"Bu_v2fAs\",\"en_dev_api_plugins_marshoai_bangumi_index.md\":\"BR4raixn\",\"en_dev_api_plugins_marshoai_basic_index.md\":\"BHDhYF6r\",\"en_dev_api_plugins_test_marshoai_basic_index.md\":\"CNf_cHwv\",\"en_dev_api_plugins_test_marshoai_memory_command.md\":\"DJp6ESfj\",\"en_dev_api_plugins_test_marshoai_memory_config.md\":\"BecBzvU1\",\"en_dev_api_plugins_test_marshoai_memory_index.md\":\"CWVQytvx\",\"en_dev_api_plugins_test_random_number_generator.md\":\"l4KwKr8L\",\"en_dev_api_plugins_test_snowykami_testplugin_index.md\":\"CMzYsA_L\",\"en_dev_api_plugins_test_weather_demo.md\":\"DOTNnU0K\",\"en_dev_api_plugins_twisuki_megakits_index.md\":\"BBZkPudD\",\"en_dev_api_plugins_twisuki_megakits_mk_morse_code.md\":\"Ctjy9eC6\",\"en_dev_api_plugins_twisuki_megakits_mk_nya_code.md\":\"D71eipr-\",\"en_dev_api_plugins_twisuki_petcat_index.md\":\"BIpL_9Jh\",\"en_dev_api_plugins_twisuki_petcat_pc_cat.md\":\"D0m52CV-\",\"en_dev_api_plugins_twisuki_petcat_pc_info.md\":\"Czl9u8_T\",\"en_dev_api_plugins_twisuki_petcat_pc_shop.md\":\"2qzvX9GG\",\"en_dev_api_plugins_twisuki_petcat_pc_token.md\":\"D_LPS-7c\",\"en_dev_api_tools_marshoai_bangumi_index.md\":\"BK2-XjPA\",\"en_dev_api_tools_marshoai_basic_index.md\":\"D0a7zECz\",\"en_dev_api_tools_marshoai_megakits_index.md\":\"Cwig9I0H\",\"en_dev_api_tools_marshoai_megakits_mk_common.md\":\"CYkF2Uxs\",\"en_dev_api_tools_marshoai_megakits_mk_info.md\":\"rPslsRfQ\",\"en_dev_api_tools_marshoai_megakits_mk_morse_code.md\":\"C95Z6FoT\",\"en_dev_api_tools_marshoai_megakits_mk_nya_code.md\":\"CVIfxCBs\",\"en_dev_api_tools_marshoai_memory_index.md\":\"1g_Xas0k\",\"en_dev_api_tools_marshoai_meogirl_index.md\":\"BvI4oQU-\",\"en_dev_api_tools_marshoai_meogirl_mg_info.md\":\"CuQ0tfy_\",\"en_dev_api_tools_marshoai_meogirl_mg_introduce.md\":\"DMtMdC8y\",\"en_dev_api_tools_marshoai_meogirl_mg_search.md\":\"FJOGG33D\",\"en_dev_api_tools_wip_marshoai_memory_index.md\":\"sjOBGGEt\",\"en_dev_api_util.md\":\"DR5PlfqD\",\"en_dev_api_util_hunyuan.md\":\"CAViCeqk\",\"en_dev_index.md\":\"CIa6awQX\",\"en_index.md\":\"7aTFsCP9\",\"en_start_index.md\":\"Dmsf-u4s\",\"en_start_install.md\":\"BSTaYxbk\",\"index.md\":\"C6IiGKJ9\",\"ja_index.md\":\"C2iyoUqN\",\"start_index.md\":\"DCdaSwFT\",\"start_install-old.md\":\"DPQpdH9A\",\"start_install.md\":\"DZ--LmKB\",\"start_use.md\":\"B-V7eDCC\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"VitePress\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":{\"light\":\"/marsho-full.svg\",\"dark\":\"/marsho-full.svg\",\"alt\":\"Marsho Logo\"},\"sidebar\":{\"/dev/\":{\"base\":\"/dev/\",\"items\":[{\"text\":\"MARSHOAI\",\"items\":[{\"text\":\"项目开发\",\"link\":\"project\"},{\"text\":\"扩展开发\",\"link\":\"extension\"},{\"text\":\"api\",\"link\":\"api/index.md\",\"items\":[{\"text\":\"azure\",\"link\":\"api/azure\"},{\"text\":\"azure_onebot\",\"link\":\"api/azure_onebot\"},{\"text\":\"plugins\",\"items\":[{\"text\":\"marshoai_basic\",\"link\":\"api/plugins/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"builtin_tools\",\"link\":\"api/plugins/builtin_tools/index.md\",\"items\":[{\"text\":\"chat\",\"link\":\"api/plugins/builtin_tools/chat\"},{\"text\":\"file_io\",\"link\":\"api/plugins/builtin_tools/file_io\"},{\"text\":\"index\",\"link\":\"api/plugins/builtin_tools/\"},{\"text\":\"liteyuki\",\"link\":\"api/plugins/builtin_tools/liteyuki\"},{\"text\":\"manager\",\"link\":\"api/plugins/builtin_tools/manager\"},{\"text\":\"network\",\"link\":\"api/plugins/builtin_tools/network\"},{\"text\":\"utils\",\"link\":\"api/plugins/builtin_tools/utils\"}],\"collapsed\":true},{\"text\":\"marshoai_bangumi\",\"link\":\"api/plugins/marshoai_bangumi/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/marshoai_bangumi/\"}],\"collapsed\":true},{\"text\":\"twisuki_megakits\",\"link\":\"api/plugins/twisuki_megakits/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/twisuki_megakits/\"},{\"text\":\"mk_morse_code\",\"link\":\"api/plugins/twisuki_megakits/mk_morse_code\"},{\"text\":\"mk_nya_code\",\"link\":\"api/plugins/twisuki_megakits/mk_nya_code\"}],\"collapsed\":true},{\"text\":\"twisuki_petcat\",\"link\":\"api/plugins/twisuki_petcat/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/twisuki_petcat/\"},{\"text\":\"pc_cat\",\"link\":\"api/plugins/twisuki_petcat/pc_cat\"},{\"text\":\"pc_info\",\"link\":\"api/plugins/twisuki_petcat/pc_info\"},{\"text\":\"pc_shop\",\"link\":\"api/plugins/twisuki_petcat/pc_shop\"},{\"text\":\"pc_token\",\"link\":\"api/plugins/twisuki_petcat/pc_token\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"plugins_test\",\"items\":[{\"text\":\"marshoai_basic\",\"link\":\"api/plugins_test/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins_test/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"marshoai_memory\",\"link\":\"api/plugins_test/marshoai_memory/index.md\",\"items\":[{\"text\":\"command\",\"link\":\"api/plugins_test/marshoai_memory/command\"},{\"text\":\"config\",\"link\":\"api/plugins_test/marshoai_memory/config\"},{\"text\":\"index\",\"link\":\"api/plugins_test/marshoai_memory/\"}],\"collapsed\":true},{\"text\":\"random_number_generator\",\"link\":\"api/plugins_test/random_number_generator\"},{\"text\":\"snowykami_testplugin\",\"link\":\"api/plugins_test/snowykami_testplugin/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins_test/snowykami_testplugin/\"}],\"collapsed\":true},{\"text\":\"weather_demo\",\"link\":\"api/plugins_test/weather_demo\"}],\"collapsed\":true},{\"text\":\"tools\",\"items\":[{\"text\":\"marshoai_bangumi\",\"link\":\"api/tools/marshoai_bangumi/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_bangumi/\"}],\"collapsed\":true},{\"text\":\"marshoai_basic\",\"link\":\"api/tools/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"marshoai_megakits\",\"link\":\"api/tools/marshoai_megakits/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_megakits/\"},{\"text\":\"mk_common\",\"link\":\"api/tools/marshoai_megakits/mk_common\"},{\"text\":\"mk_info\",\"link\":\"api/tools/marshoai_megakits/mk_info\"},{\"text\":\"mk_morse_code\",\"link\":\"api/tools/marshoai_megakits/mk_morse_code\"},{\"text\":\"mk_nya_code\",\"link\":\"api/tools/marshoai_megakits/mk_nya_code\"}],\"collapsed\":true},{\"text\":\"marshoai_memory\",\"link\":\"api/tools/marshoai_memory/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_memory/\"}],\"collapsed\":true},{\"text\":\"marshoai_meogirl\",\"link\":\"api/tools/marshoai_meogirl/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_meogirl/\"},{\"text\":\"mg_info\",\"link\":\"api/tools/marshoai_meogirl/mg_info\"},{\"text\":\"mg_introduce\",\"link\":\"api/tools/marshoai_meogirl/mg_introduce\"},{\"text\":\"mg_search\",\"link\":\"api/tools/marshoai_meogirl/mg_search\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"tools_wip\",\"items\":[{\"text\":\"marshoai_memory\",\"link\":\"api/tools_wip/marshoai_memory/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools_wip/marshoai_memory/\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"config\",\"link\":\"api/config\"},{\"text\":\"constants\",\"link\":\"api/constants\"},{\"text\":\"deal_latex\",\"link\":\"api/deal_latex\"},{\"text\":\"dev\",\"link\":\"api/dev\"},{\"text\":\"hooks\",\"link\":\"api/hooks\"},{\"text\":\"hunyuan\",\"link\":\"api/hunyuan\"},{\"text\":\"index\",\"link\":\"api/\"},{\"text\":\"instances\",\"link\":\"api/instances\"},{\"text\":\"marsho\",\"link\":\"api/marsho\"},{\"text\":\"marsho_onebot\",\"link\":\"api/marsho_onebot\"},{\"text\":\"metadata\",\"link\":\"api/metadata\"},{\"text\":\"models\",\"link\":\"api/models\"},{\"text\":\"observer\",\"link\":\"api/observer\"},{\"text\":\"plugin\",\"link\":\"api/plugin/index.md\",\"items\":[{\"text\":\"register\",\"link\":\"api/plugin/register\"},{\"text\":\"func_call\",\"link\":\"api/plugin/func_call/index.md\",\"items\":[{\"text\":\"caller\",\"link\":\"api/plugin/func_call/caller\"},{\"text\":\"index\",\"link\":\"api/plugin/func_call/\"},{\"text\":\"models\",\"link\":\"api/plugin/func_call/models\"},{\"text\":\"params\",\"link\":\"api/plugin/func_call/params\"},{\"text\":\"utils\",\"link\":\"api/plugin/func_call/utils\"}],\"collapsed\":true},{\"text\":\"index\",\"link\":\"api/plugin/\"},{\"text\":\"load\",\"link\":\"api/plugin/load\"},{\"text\":\"models\",\"link\":\"api/plugin/models\"},{\"text\":\"typing\",\"link\":\"api/plugin/typing\"},{\"text\":\"utils\",\"link\":\"api/plugin/utils\"}],\"collapsed\":true},{\"text\":\"util\",\"link\":\"api/util\"},{\"text\":\"util_hunyuan\",\"link\":\"api/util_hunyuan\"}],\"collapsed\":true}]}]},\"/start/\":{\"base\":\"/start/\",\"items\":[{\"text\":\"MARSHOAI\",\"items\":[{\"text\":\"安装 (old)\",\"link\":\"install-old\"},{\"text\":\"安装\",\"link\":\"install\"},{\"text\":\"使用\",\"link\":\"use\"}]}]},\"/en/dev/\":{\"base\":\"/en/dev/\",\"items\":[{\"text\":\"MARSHOAI\",\"items\":[{\"text\":\"api\",\"link\":\"api/index.md\",\"items\":[{\"text\":\"azure\",\"link\":\"api/azure\"},{\"text\":\"azure_onebot\",\"link\":\"api/azure_onebot\"},{\"text\":\"plugins\",\"items\":[{\"text\":\"marshoai_basic\",\"link\":\"api/plugins/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"builtin_tools\",\"link\":\"api/plugins/builtin_tools/index.md\",\"items\":[{\"text\":\"chat\",\"link\":\"api/plugins/builtin_tools/chat\"},{\"text\":\"file_io\",\"link\":\"api/plugins/builtin_tools/file_io\"},{\"text\":\"index\",\"link\":\"api/plugins/builtin_tools/\"},{\"text\":\"liteyuki\",\"link\":\"api/plugins/builtin_tools/liteyuki\"},{\"text\":\"manager\",\"link\":\"api/plugins/builtin_tools/manager\"},{\"text\":\"network\",\"link\":\"api/plugins/builtin_tools/network\"},{\"text\":\"utils\",\"link\":\"api/plugins/builtin_tools/utils\"}],\"collapsed\":true},{\"text\":\"marshoai_bangumi\",\"link\":\"api/plugins/marshoai_bangumi/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/marshoai_bangumi/\"}],\"collapsed\":true},{\"text\":\"twisuki_megakits\",\"link\":\"api/plugins/twisuki_megakits/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/twisuki_megakits/\"},{\"text\":\"mk_morse_code\",\"link\":\"api/plugins/twisuki_megakits/mk_morse_code\"},{\"text\":\"mk_nya_code\",\"link\":\"api/plugins/twisuki_megakits/mk_nya_code\"}],\"collapsed\":true},{\"text\":\"twisuki_petcat\",\"link\":\"api/plugins/twisuki_petcat/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins/twisuki_petcat/\"},{\"text\":\"pc_cat\",\"link\":\"api/plugins/twisuki_petcat/pc_cat\"},{\"text\":\"pc_info\",\"link\":\"api/plugins/twisuki_petcat/pc_info\"},{\"text\":\"pc_shop\",\"link\":\"api/plugins/twisuki_petcat/pc_shop\"},{\"text\":\"pc_token\",\"link\":\"api/plugins/twisuki_petcat/pc_token\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"plugins_test\",\"items\":[{\"text\":\"marshoai_basic\",\"link\":\"api/plugins_test/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins_test/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"marshoai_memory\",\"link\":\"api/plugins_test/marshoai_memory/index.md\",\"items\":[{\"text\":\"command\",\"link\":\"api/plugins_test/marshoai_memory/command\"},{\"text\":\"config\",\"link\":\"api/plugins_test/marshoai_memory/config\"},{\"text\":\"index\",\"link\":\"api/plugins_test/marshoai_memory/\"}],\"collapsed\":true},{\"text\":\"random_number_generator\",\"link\":\"api/plugins_test/random_number_generator\"},{\"text\":\"snowykami_testplugin\",\"link\":\"api/plugins_test/snowykami_testplugin/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/plugins_test/snowykami_testplugin/\"}],\"collapsed\":true},{\"text\":\"weather_demo\",\"link\":\"api/plugins_test/weather_demo\"}],\"collapsed\":true},{\"text\":\"tools\",\"items\":[{\"text\":\"marshoai_bangumi\",\"link\":\"api/tools/marshoai_bangumi/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_bangumi/\"}],\"collapsed\":true},{\"text\":\"marshoai_basic\",\"link\":\"api/tools/marshoai_basic/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_basic/\"}],\"collapsed\":true},{\"text\":\"marshoai_megakits\",\"link\":\"api/tools/marshoai_megakits/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_megakits/\"},{\"text\":\"mk_common\",\"link\":\"api/tools/marshoai_megakits/mk_common\"},{\"text\":\"mk_info\",\"link\":\"api/tools/marshoai_megakits/mk_info\"},{\"text\":\"mk_morse_code\",\"link\":\"api/tools/marshoai_megakits/mk_morse_code\"},{\"text\":\"mk_nya_code\",\"link\":\"api/tools/marshoai_megakits/mk_nya_code\"}],\"collapsed\":true},{\"text\":\"marshoai_memory\",\"link\":\"api/tools/marshoai_memory/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_memory/\"}],\"collapsed\":true},{\"text\":\"marshoai_meogirl\",\"link\":\"api/tools/marshoai_meogirl/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools/marshoai_meogirl/\"},{\"text\":\"mg_info\",\"link\":\"api/tools/marshoai_meogirl/mg_info\"},{\"text\":\"mg_introduce\",\"link\":\"api/tools/marshoai_meogirl/mg_introduce\"},{\"text\":\"mg_search\",\"link\":\"api/tools/marshoai_meogirl/mg_search\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"tools_wip\",\"items\":[{\"text\":\"marshoai_memory\",\"link\":\"api/tools_wip/marshoai_memory/index.md\",\"items\":[{\"text\":\"index\",\"link\":\"api/tools_wip/marshoai_memory/\"}],\"collapsed\":true}],\"collapsed\":true},{\"text\":\"config\",\"link\":\"api/config\"},{\"text\":\"constants\",\"link\":\"api/constants\"},{\"text\":\"deal_latex\",\"link\":\"api/deal_latex\"},{\"text\":\"dev\",\"link\":\"api/dev\"},{\"text\":\"hooks\",\"link\":\"api/hooks\"},{\"text\":\"hunyuan\",\"link\":\"api/hunyuan\"},{\"text\":\"index\",\"link\":\"api/\"},{\"text\":\"instances\",\"link\":\"api/instances\"},{\"text\":\"marsho\",\"link\":\"api/marsho\"},{\"text\":\"marsho_onebot\",\"link\":\"api/marsho_onebot\"},{\"text\":\"metadata\",\"link\":\"api/metadata\"},{\"text\":\"models\",\"link\":\"api/models\"},{\"text\":\"observer\",\"link\":\"api/observer\"},{\"text\":\"plugin\",\"link\":\"api/plugin/index.md\",\"items\":[{\"text\":\"register\",\"link\":\"api/plugin/register\"},{\"text\":\"func_call\",\"link\":\"api/plugin/func_call/index.md\",\"items\":[{\"text\":\"caller\",\"link\":\"api/plugin/func_call/caller\"},{\"text\":\"index\",\"link\":\"api/plugin/func_call/\"},{\"text\":\"models\",\"link\":\"api/plugin/func_call/models\"},{\"text\":\"params\",\"link\":\"api/plugin/func_call/params\"},{\"text\":\"utils\",\"link\":\"api/plugin/func_call/utils\"}],\"collapsed\":true},{\"text\":\"index\",\"link\":\"api/plugin/\"},{\"text\":\"load\",\"link\":\"api/plugin/load\"},{\"text\":\"models\",\"link\":\"api/plugin/models\"},{\"text\":\"typing\",\"link\":\"api/plugin/typing\"},{\"text\":\"utils\",\"link\":\"api/plugin/utils\"}],\"collapsed\":true},{\"text\":\"util\",\"link\":\"api/util\"},{\"text\":\"util_hunyuan\",\"link\":\"api/util_hunyuan\"}],\"collapsed\":true}]}]},\"/en/start/\":{\"base\":\"/en/start/\",\"items\":[{\"text\":\"MARSHOAI\",\"items\":[{\"text\":\"install\",\"link\":\"install\"}]}]}},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/LiteyukiStudio/nonebot-plugin-marshoai\"},{\"icon\":{\"svg\":\"<svg t=\\\"1725391346807\\\" class=\\\"icon\\\" viewBox=\\\"0 0 1025 1024\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" p-id=\\\"5067\\\" width=\\\"256\\\" height=\\\"256\\\"><path d=\\\"M1004.692673 466.396616l-447.094409-447.073929c-25.743103-25.763582-67.501405-25.763582-93.264987 0l-103.873521 103.873521 78.171378 78.171378c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928 0 14.827372-3.358686 28.856031-9.359266 41.389666l127.97824 127.97824c12.533635-6.00058 26.562294-9.359266 41.389666-9.359266 53.02219 0 96.00928 42.98709 96.00928 96.00928s-42.98709 96.00928-96.00928 96.00928-96.00928-42.98709-96.00928-96.00928c0-14.827372 3.358686-28.856031 9.359266-41.389666l-127.97824-127.97824c-3.051489 1.454065-6.184898 2.744293-9.379746 3.870681l0 266.97461c37.273227 13.188988 63.99936 48.721433 63.99936 90.520695 0 53.02219-42.98709 96.00928-96.00928 96.00928s-96.00928-42.98709-96.00928-96.00928c0-41.799262 26.726133-77.331707 63.99936-90.520695l0-266.97461c-37.273227-13.188988-63.99936-48.721433-63.99936-90.520695 0-14.827372 3.358686-28.856031 9.359266-41.389666l-78.171378-78.171378-295.892081 295.871601c-25.743103 25.784062-25.743103 67.542365 0 93.285467l447.114889 447.073929c25.743103 25.743103 67.480925 25.743103 93.264987 0l445.00547-445.00547c25.763582-25.763582 25.763582-67.542365 0-93.285467z\\\" fill=\\\"#a2d8f4\\\" p-id=\\\"5068\\\"></path></svg>\"},\"link\":\"https://git.liteyuki.icu/LiteyukiStudio/nonebot-plugin-marshoai\"}]},\"locales\":{\"root\":{\"label\":\"简体中文\",\"lang\":\"zh-Hans\",\"title\":\"小棉智能\",\"description\":\"可爱,智能且易扩展\",\"themeConfig\":{\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"家\",\"link\":\"/\"},{\"text\":\"使用\",\"link\":\"/start/use\"},{\"text\":\"开发\",\"link\":\"/dev/extension\"}],\"editLink\":{\"pattern\":\"_vp-fn_({ filePath }) => {\\n if (!filePath) {\\n throw new Error(\\\"filePath is undefined\\\");\\n }\\n const regex = /^(dev\\\\/api|[^\\\\/]+\\\\/dev\\\\/api)/;\\n if (regex.test(filePath)) {\\n filePath = filePath.replace(regex, \\\"\\\").replace(\\\"index.md\\\", \\\"__init__.py\\\").replace(\\\".md\\\", \\\".py\\\");\\n const fileName = filePath.split(\\\"/\\\").pop();\\n const parentFolder = filePath.split(\\\"/\\\").slice(-2, -1)[0];\\n if (fileName && parentFolder && fileName.split(\\\".\\\")[0] === parentFolder) {\\n filePath = filePath.split(\\\"/\\\").slice(0, -1).join(\\\"/\\\") + \\\"/__init__.py\\\";\\n }\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/${filePath}`;\\n } else {\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/docs/${filePath}`;\\n }\\n }\",\"text\":\"编辑此页面\"},\"langMenuLabel\":\"语言\",\"returnToTopLabel\":\"返回顶部\",\"sidebarMenuLabel\":\"菜单\",\"darkModeSwitchLabel\":\"主题\",\"lightModeSwitchTitle\":\"轻色模式\",\"darkModeSwitchTitle\":\"深色模式\",\"footer\":{\"message\":\"文档完善中,欢迎提出建议或帮助我们完善。\",\"copyright\":\"© 2024 <a href=\\\"https://liteyuki.icu\\\" target=\\\"_blank\\\">Liteyuki Studio</a>\"}}},\"en\":{\"label\":\"English\",\"lang\":\"en-US\",\"title\":\"Marsho AI\",\"description\":\"Kawaii, Intelligent and Easy to Extend\",\"themeConfig\":{\"docFooter\":{\"prev\":\"Prev\",\"next\":\"Next\"},\"nav\":[{\"text\":\"Home\",\"link\":\"/en\"},{\"text\":\"Usage\",\"link\":\"/en/start/install\"},{\"text\":\"Develop\",\"link\":\"/en/dev/extension\"}],\"editLink\":{\"pattern\":\"_vp-fn_({ filePath }) => {\\n if (!filePath) {\\n throw new Error(\\\"filePath is undefined\\\");\\n }\\n const regex = /^(dev\\\\/api|[^\\\\/]+\\\\/dev\\\\/api)/;\\n if (regex.test(filePath)) {\\n filePath = filePath.replace(regex, \\\"\\\").replace(\\\"index.md\\\", \\\"__init__.py\\\").replace(\\\".md\\\", \\\".py\\\");\\n const fileName = filePath.split(\\\"/\\\").pop();\\n const parentFolder = filePath.split(\\\"/\\\").slice(-2, -1)[0];\\n if (fileName && parentFolder && fileName.split(\\\".\\\")[0] === parentFolder) {\\n filePath = filePath.split(\\\"/\\\").slice(0, -1).join(\\\"/\\\") + \\\"/__init__.py\\\";\\n }\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/${filePath}`;\\n } else {\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/docs/${filePath}`;\\n }\\n }\",\"text\":\"Edit this page\"},\"langMenuLabel\":\"Language\",\"returnToTopLabel\":\"To top\",\"sidebarMenuLabel\":\"Option\",\"darkModeSwitchLabel\":\"Theme\",\"lightModeSwitchTitle\":\"Light\",\"darkModeSwitchTitle\":\"Dark\",\"footer\":{\"message\":\"The document is being improved. Suggestions are welcome.\",\"copyright\":\"© 2024 <a href=\\\"https://liteyuki.icu\\\" target=\\\"_blank\\\">Liteyuki Studio</a>\"}}},\"ja\":{\"label\":\"日本語\",\"lang\":\"ja-JP\",\"title\":\"Marsho AI\",\"description\":\"かわいくて、賢くて、拡張しやすい\",\"themeConfig\":{\"docFooter\":{\"prev\":\"前へ\",\"next\":\"次へ\"},\"nav\":[{\"text\":\"ホーム\",\"link\":\"/ja\"},{\"text\":\"使用方法\",\"link\":\"/ja/start/install\"},{\"text\":\"開発\",\"link\":\"/ja/dev/extension\"}],\"editLink\":{\"pattern\":\"_vp-fn_({ filePath }) => {\\n if (!filePath) {\\n throw new Error(\\\"filePath is undefined\\\");\\n }\\n const regex = /^(dev\\\\/api|[^\\\\/]+\\\\/dev\\\\/api)/;\\n if (regex.test(filePath)) {\\n filePath = filePath.replace(regex, \\\"\\\").replace(\\\"index.md\\\", \\\"__init__.py\\\").replace(\\\".md\\\", \\\".py\\\");\\n const fileName = filePath.split(\\\"/\\\").pop();\\n const parentFolder = filePath.split(\\\"/\\\").slice(-2, -1)[0];\\n if (fileName && parentFolder && fileName.split(\\\".\\\")[0] === parentFolder) {\\n filePath = filePath.split(\\\"/\\\").slice(0, -1).join(\\\"/\\\") + \\\"/__init__.py\\\";\\n }\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/nonebot_plugin_marshoai/${filePath}`;\\n } else {\\n return `https://github.com/LiteyukiStudio/nonebot-plugin-marshoai/tree/main/docs/${filePath}`;\\n }\\n }\",\"text\":\"このページを編集\"},\"langMenuLabel\":\"言語\",\"returnToTopLabel\":\"トップへ戻る\",\"sidebarMenuLabel\":\"オプション\",\"darkModeSwitchLabel\":\"テーマ\",\"lightModeSwitchTitle\":\"ライト\",\"darkModeSwitchTitle\":\"ダーク\",\"footer\":{\"message\":\"ドキュメントは改善中です。ご意見をお待ちしております。\",\"copyright\":\"© 2024 <a href=\\\"https://liteyuki.icu\\\" target=\\\"_blank\\\">Liteyuki Studio</a>\"}}}},\"scrollOffset\":134,\"cleanUrls\":true}"));</script>
</body>
</html>