1import{_ as p,c as h,a as l,b as a,d as e,e as i,w as t,r as d,o as k}from"./app-C1L7GXRS.js";const o={};function r(c,s){const n=d("RouteLink");return k(),h("div",null,[s[7]||(s[7]=l('<blockquote><p>åç±»ï¼common</p></blockquote><h2 id="è¿ä¸ªç¤ºä¾æä»ä¹" tabindex="-1"><a class="header-anchor" href="#è¿ä¸ªç¤ºä¾æä»ä¹"><span>è¿ä¸ªç¤ºä¾æä»ä¹</span></a></h2><p>å±ç¤º <code>CommandGroupHook</code> å½ä»¤ç»åå±è·¯ç±æºå¶ï¼ç¨ä¸ä¸ªåç¼å½ä»¤ç®¡çå¤ä¸ªåå½ä»¤ï¼æ¯æåæ°ç»å®åå¤å«åã</p><h2 id="ä½ å°å¦å°" tabindex="-1"><a class="header-anchor" href="#ä½ å°å¦å°"><span>ä½ å°å¦å°</span></a></h2><ul><li><code>CommandGroupHook</code> çåå»ºä¸æ³¨å</li><li><code>@hook.subcommand()</code> åå½ä»¤è£ 饰å¨</li><li>åå½ä»¤åæ°èªå¨ç»å®ï¼int / float / strï¼</li><li>å½ä»¤å«åæ¯æï¼å¦ <code>/admin</code> å <code>/a</code>ï¼</li><li><code>ignore_case</code> 大å°å䏿æå¹é </li></ul><h2 id="åç½®ç¥è¯" tabindex="-1"><a class="header-anchor" href="#åç½®ç¥è¯"><span>åç½®ç¥è¯</span></a></h2>',6)),a("ul",null,[a("li",null,[e(n,{to:"/examples/common/01_hello_world/"},{default:t(()=>s[0]||(s[0]=[i("common/01_hello_world")])),_:1}),s[1]||(s[1]=i(" â æä»¶åºç¡ç»æ"))]),s[2]||(s[2]=a("li",null,[i("çè§£ "),a("code",null,"@registrar.on_group_message()"),i(" è£ é¥°å¨")],-1))]),s[8]||(s[8]=l(`<h2 id="ç®å½ç»æ" tabindex="-1"><a class="header-anchor" href="#ç®å½ç»æ"><span>ç®å½ç»æ</span></a></h2><div class="language-text line-numbers-mode" data-ext="text" data-title="text"><button class="copy" title="å¤å¶ä»£ç " data-copied="å·²å¤å¶"></button><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code><span class="line"><span>07_command_group/</span></span> 2<span class="line"><span>âââ main.py</span></span> 3<span class="line"><span>âââ manifest.toml</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="宿´ä»£ç " tabindex="-1"><a class="header-anchor" href="#宿´ä»£ç "><span>宿´ä»£ç </span></a></h2><div class="language-python line-numbers-mode" data-ext="python" data-title="python"><button class="copy" title="å¤å¶ä»£ç " data-copied="å·²å¤å¶"></button><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code><span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"""</span></span> 4<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">common/07_command_group â å½ä»¤ç»åå±è·¯ç±æä»¶</span></span> 5<span class="line"></span> 6<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">æ¼ç¤ºåè½:</span></span> 7<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> - ä½¿ç¨ CommandGroupHook å®ç°åå±å½ä»¤</span></span> 8<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> - åæ°ç±»åèªå¨ç»å®ï¼int/float/str/Atï¼</span></span> 9<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> - å½ä»¤å«åæ¯æ</span></span> 10<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> - @hook.subcommand() è£ é¥°å¨æ³¨ååå½ä»¤å¹¶ç±ä¸» handler åå</span></span> 11<span class="line"></span> 12<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">ä½¿ç¨æ¹å¼:</span></span> 13<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> "/admin kick 12345" â è¸¢åºæå</span></span> 14<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> "/admin ban 12345 120" â ç¦è¨ 120 åé</span></span> 15<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> "/calc add 10 20" â 计ç®å æ³</span></span> 16<span class="line"><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> "/help" æ "/?" â æ¥ç帮å©</span></span> 17<span class="line"><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"""</span></span> 18<span class="line"></span> 19<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">
19import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> inspect</span></span> 20<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">from</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> ncatbot</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">core </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> CommandGroupHook</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> registrar</span></span> 21<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">from</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> ncatbot</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">event</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">qq </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> GroupMessageEvent</span></span> 22<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">from</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> ncatbot</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">plugin </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">import</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> NcatBotPlugin</span></span> 23<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># ... (è§ main.py 宿´ä»£ç )</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="å ³é®ä»£ç 讲解" tabindex="-1"><a class="header-anchor" href="#å ³é®ä»£ç 讲解"><span>å ³é®ä»£ç 讲解</span></a></h2><h3 id="å建å½ä»¤ç»" tabindex="-1"><a class="header-anchor" href="#å建å½ä»¤ç»"><span>å建å½ä»¤ç»</span></a></h3><div class="language-python line-numbers-mode" data-ext="python" data-title="python"><button class="copy" title="å¤å¶ä»£ç " data-copied="å·²å¤å¶"></button><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code><span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">admin_hook </span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> CommandGroupHook</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">admin</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">/admin</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">a</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A;"> ignore_case</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">=</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">True</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>
23第ä¸ä¸ªåæ°æ¯å½ä»¤ç»åï¼åç»åæ°æ¯è§¦ååç¼ï¼å¯å¤ä¸ªï¼ï¼<code>ignore_case=True</code> 表示 <code>/Admin</code> å <code>/admin</code> åå¯è§¦åã</p><h3 id="注ååå½ä»¤" tabindex="-1"><a class="header-anchor" href="#注ååå½ä»¤"><span>注ååå½ä»¤</span></a></h3><div class="language-python line-numbers-mode" data-ext="python" data-title="python"><button class="copy" title="å¤å¶ä»£ç " data-copied="å·²å¤å¶"></button><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">@</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">admin_hook</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">subcommand</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">kick</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">remove</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span></span> 24<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> admin_kick</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> event</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> user_id</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">:</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965;"> int</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span> 25<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> ...</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>subcommand()</code> æ¥åä¸ä¸ªæå¤ä¸ªå«åãåæ°èªå¨ä»æ¶æ¯ä¸æååç»å®ã</p><h3 id="æè½½å°æ¶æ¯å¤çå¨" tabindex="-1"><a class="header-anchor" href="#æè½½å°æ¶æ¯å¤çå¨"><span>æè½½å°æ¶æ¯å¤çå¨</span></a></h3><div class="language-python line-numbers-mode" data-ext="python" data-title="python"><button class="copy" title="å¤å¶ä»£ç " data-copied="å·²å¤å¶"></button><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">@</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">registrar</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">on_group_message</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">()</span></span> 26<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">@</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">admin_hook</span></span> 27<span class="line"><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">async</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> def</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> on_admin</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">self</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> event</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> **</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">kwargs</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">):</span></span> 28<span class="line"><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> ...</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>éè¿å° <code>@admin_hook</code> ä½ä¸ºè£ 饰å¨å å ï¼å®ç°å½ä»¤ç»çèªå¨ååã</p><h2 id="è¿è¡æ¹å¼" tabindex="-1"><a class="header-anchor" href="#è¿è¡æ¹å¼"><span>è¿è¡æ¹å¼</span></a></h2><p>å°æ¬æä»¶å¤¹å¤å¶å° <code>plugins/</code> ç®å½ï¼å¯å¨ Botãå¨ç¾¤éåé <code>/admin kick 12345</code> çå½ä»¤å³å¯æµè¯ã</p><h2 id="延伸é 读" tabindex="-1"><a class="header-anchor" href="#延伸é 读"><span>延伸é 读</span></a></h2>`,17)),a("ul",null,[a("li",null,[e(n,{to:"/examples/common/01_hello_world/"},{default:t(()=>s[3]||(s[3]=[i("common/01_hello_world")])),_:1}),s[4]||(s[4]=i(" â åºç¡å½ä»¤æ³¨å"))]),a("li",null,[e(n,{to:"/examples/qq/02_command_binding/"},{default:t(()=>s[5]||(s[5]=[i("qq/02_command_binding")])),_:1}),s[6]||(s[6]=i(" â QQ å¹³å°å½ä»¤åæ°ç»å®å ¨è²"))])])])}const u=p(o,[["render",r],["__file","index.html.vue"]]),g=JSON.parse('{"path":"/examples/common/07_command_group/","title":"07_command_group","lang":"zh-CN","frontmatter":{"title":"07_command_group","description":"åç±»ï¼common è¿ä¸ªç¤ºä¾æä»ä¹ å±ç¤º CommandGroupHook å½ä»¤ç»åå±è·¯ç±æºå¶ï¼ç¨ä¸ä¸ªåç¼å½ä»¤ç®¡çå¤ä¸ªåå½ä»¤ï¼æ¯æåæ°ç»å®åå¤å«åã ä½ å°å¦å° CommandGroupHook çåå»ºä¸æ³¨å @hook.subcommand() åå½ä»¤è£ é¥°å¨ åå½ä»¤åæ°èªå¨ç»å®ï¼int / float / strï¼ å½ä»¤å«åæ¯æï¼å¦ /admin å ...","head":[["meta",{"property":"og:url","content":"http://docs.ncatbot.xyz/examples/common/07_command_group/"}],["meta",{"property":"og:site_name","content":"NcatBot ææ¡£"}],["meta",{"property":"og:title","content":"07_command_group"}],["meta",{"property":"og:description","content":"åç±»ï¼common è¿ä¸ªç¤ºä¾æä»ä¹ å±ç¤º CommandGroupHook å½ä»¤ç»åå±è·¯ç±æºå¶ï¼ç¨ä¸ä¸ªåç¼å½ä»¤ç®¡çå¤ä¸ªåå½ä»¤ï¼æ¯æåæ°ç»å®åå¤å«åã ä½ å°å¦å° CommandGroupHook çåå»ºä¸æ³¨å @hook.subcommand() åå½ä»¤è£ é¥°å¨ åå½ä»¤åæ°èªå¨ç»å®ï¼int / float / strï¼ å½ä»¤å«åæ¯æï¼å¦ /admin å ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}
28],["meta",{"property":"og:updated_time","content":"2026-04-30T14:41:02.000Z"}],["meta",{"property":"article:modified_time","content":"2026-04-30T14:41:02.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"07_command_group\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2026-04-30T14:41:02.000Z\\",\\"author\\":[]}"]]},"headers":[],"readingTime":{"minutes":1.43,"words":428},"git":{"updatedTime":1777560062000,"contributors":[{"name":"GEYUANwuqi","username":"GEYUANwuqi","email":"[email protected]","commits":1,"avatar":"https://gravatar.com/avatar/1cf26d82e91dff657f3fa4d4911cdabcf7b76396339e886e69f99b15d4c8c808?d=retro"}]},"autoDesc":true,"filePathRelative":"examples/common/07_command_group/README.md","categoryList":[{"id":"bfebe3","sort":10000,"name":"examples"},{"id":"c42c0c","sort":10021,"name":"common"},{"id":"89a202","sort":10024,"name":"07_command_group"}]}');export{u as comp,g as data};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.