1import{a as e,c as a,b as n,o as l}from"./app-CSHjHCVu.js";const t={};function o(p,s){return l(),a("div",null,[...s[0]||(s[0]=[n(`<h1 id="creating-chat-bots" tabindex="-1"><a class="header-anchor" href="#creating-chat-bots"><span>Creating Chat Bots</span></a></h1><ul><li><a href="#notes">Notes</a></li><li><a href="#requirements">Requirements</a></li><li><a href="#quick-introduction">Quick Introduction</a></li><li><a href="#examples">Examples</a></li><li><a href="#ai-assisted-bot-authoring">AI-Assisted Bot Authoring</a></li><li><a href="#c#-api">C# API</a></li></ul><h2 id="notes" tabindex="-1"><a class="header-anchor" href="#notes"><span>Notes</span></a></h2><div class="custom-container note"><p class="custom-container-title">Note</p><p><strong>This page covers the basics of the Chat Bot API. For the full surface area, read <a href="https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Scripting/ChatBot.cs" target="_blank" rel="noopener noreferrer">ChatBot.cs</a> and the example scripts linked below.</strong></p></div><p><strong>Minecraft Console Client</strong> has a rich C# API which allows you to create Chat Bots (effectively plugins) which can help you create complex automations which normal scripts may not be able to do.</p><h2 id="requirements" tabindex="-1"><a class="header-anchor" href="#requirements"><span>Requirements</span></a></h2><ul><li>A basic knowledge of C# programming language</li><li>A text editor</li></ul><p>If you're not familiar with the C# programming language, we suggest taking a look at the following resources:</p><p>Crash courses:</p><ul><li><a href="https://www.youtube.com/watch?v=67oWw9TanOk&list=PL82C6-O4XrHfoN_Y4MwGvJz5BntiL0z0D" target="_blank" rel="noopener noreferrer">C# Crash Course playlist by Teddy Smit</a></li></ul><p>More in-depth:</p><ul><li><a href="https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVxKLQCHpiUWun7vlJJvUiN" target="_blank" rel="noopener noreferrer">Learn C# YouTube Playlist by Microsoft</a></li><li><a href="https://learn.microsoft.com/en-us/dotnet/csharp/" target="_blank" rel="noopener noreferrer">Getting started with C# (an index of tutorials and documentation) by Microsoft</a></li></ul><h2 id="quick-introduction" tabindex="-1"><a class="header-anchor" href="#quick-introduction"><span>Quick Introduction</span></a></h2><p>This introduction assumes that you have the basic knowledge of C#.</p><div class="custom-container note"><p class="custom-container-title">Note</p><p><strong>In this page, "Chat Bot" and "Script" are used interchangeably.</strong></p></div><p>Create a new empty file and name it <code>ExampleChatBot.cs</code> in the same folder where you have your MCC installed.</p><p>Paste the following example code:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#6A9955;">//MCCScript 1.0</span></span> 2<span class="line"></span> 3<span class="line"><span style="color:#9CDCFE;">MCC</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">LoadBot</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">new</span><span style="color:#4EC9B0;"> ExampleChatBot</span><span style="color:#D4D4D4;">());</span></span> 4<span class="line"></span> 5<span class="line"><span style="color:#6A9955;">//MCCScript Extensions</span></span> 6<span class="line"></span> 7<span class="line"><span style="color:#6A9955;">// The code and comments above are defining a "Script Metadata" section</span></span> 8<span class="line"></span> 9<span class="line"><span style="color:#6A9955;">// Every chat bot script must define a class that extends ChatBot.</span></span> 10<span class="line"><span style="color:#6A9955;">// Instantiate that class in the script metadata section and pass it to MCC.LoadBot.</span></span> 11<span class="line"><span style="color:#569CD6;">class</span><span style="color:#4EC9B0;"> ExampleChatBot</span><span style="color:#D4D4D4;">
11 : </span><span style="color:#4EC9B0;">ChatBot</span></span> 12<span class="line"><span style="color:#D4D4D4;">{</span></span> 13<span class="line"><span style="color:#6A9955;"> // This method will be called when the script has been initialized for the first time, it's called only once</span></span> 14<span class="line"><span style="color:#6A9955;"> // Here you can initialize variables, eg. Dictionaries. etc...</span></span> 15<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;"> override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> Initialize</span><span style="color:#D4D4D4;">()</span></span> 16<span class="line"><span style="color:#D4D4D4;"> {</span></span> 17<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">"An example Chat Bot has been initialized!"</span><span style="color:#D4D4D4;">);</span></span> 18<span class="line"><span style="color:#D4D4D4;"> }</span></span> 19<span class="line"></span> 20<span class="line"><span style="color:#6A9955;"> // This is a function that will be run when we get a chat message from a server</span></span> 21<span class="line"><span style="color:#6A9955;"> // In this example it just detects the type of the message and prints it out</span></span> 22<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;">
22 override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> GetText</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> text</span><span style="color:#D4D4D4;">)</span></span> 23<span class="line"><span style="color:#D4D4D4;"> {</span></span> 24<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> message</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">""</span><span style="color:#D4D4D4;">;</span></span> 25<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> username</span><span style="color:#D4D4D4;"> = </span><span style="color:#CE9178;">""</span><span style="color:#D4D4D4;">;</span></span> 26<span class="line"><span style="color:#9CDCFE;"> text</span><span style="color:#D4D4D4;"> = </span><span style="color:#DCDCAA;">GetVerbatim</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">text</span><span style="color:#D4D4D4;">);</span></span> 27<span class="line"></span> 28<span class="line"><span style="color:#C586C0;"> if</span><span style="color:#D4D4D4;"> (</span><span style="color:#DCDCAA;">IsPrivateMessage</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">text</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">ref</span><span style="color:#9CDCFE;"> message</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">ref</span><span style="color:#9CDCFE;"> username</span><span style="color:#D4D4D4;">))</span></span> 29<span class="line"><span style="color:#D4D4D4;"> {</span></span> 30<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">username</span><span style="color:#D4D4D4;"> + </span><span style="color:#CE9178;">" has sent you a private message: "</span><span style="color:#D4D4D4;"> + </span><span style="color:#9CDCFE;">message</span><span style="color:#D4D4D4;">);</span></span> 31<span class="line"><span style="color:#D4D4D4;"> }</span></span> 32<span class="line"><span style="color:#C586C0;"> else</span><span style="color:#C586C0;"> if</span><span style="color:#D4D4D4;"> (</span><span style="color:#DCDCAA;">IsChatMessage</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">text</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">ref</span><span style="color:#9CDCFE;"> message</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">ref</span><span style="color:#9CDCFE;"> username</span><span style="color:#D4D4D4;">))</span></span> 33<span class="line"><span style="color:#D4D4D4;"> {</span></span> 34<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#9CDCFE;">username</span><span style="color:#D4D4D4;"> + </span><span style="color:#CE9178;">" has said: "</span><span style="color:#D4D4D4;"> + </span><span style="color:#9CDCFE;">message</span><span style="color:#D4D4D4;">);</span></span> 35<span class="line"><span style="color:#D4D4D4;"> }</span></span> 36<span class="line"><span style="color:#D4D4D4;"> }</span></span> 37<span class="line"><span style="color:#D4D4D4;">}</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 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><p>
37Start MCC, connect to a server and run the following internal command: <code>/script ExampleChatBot.cs</code>.</p><p>If everything worked, you should see <code>[Example Chat Bot] An example Chat Bot has been initialized!</code> in the console.</p><h3 id="structure-of-chat-bots" tabindex="-1"><a class="header-anchor" href="#structure-of-chat-bots"><span>Structure of Chat Bots</span></a></h3><p>Chat Bot (Script) structure is the following:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span><script metadata></span></span> 38<span class="line"><span><chat bot class></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></div><p><strong>Script Metadata</strong> is a section with a custom format that mixes in C# with our format using comments.</p><p>Every single Chat Bot (Script) must have this section at the beginning in order to work.</p><h3 id="script-metadata-format" tabindex="-1"><a class="header-anchor" href="#script-metadata-format"><span>Script Metadata Format</span></a></h3><p><code>//MCCScript 1.0</code> marks the beginning of the <strong>Script Metadata</strong> section, this must always be on the first line or the Chat Bot (Script) will not load and will throw an error.</p><p><code>//MCCScript Extensions</code> marks the end of the <strong>Script Metadata</strong> section. It must appear before the Chat Bot class.</p><p>To load a Chat Bot script, instantiate the bot class between <code>//MCCScript 1.0</code> and <code>//MCCScript Extensions</code>, then pass it to <code>MCC.LoadBot</code>.</p><p>Example code:</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-"><span class="line"><span>MCC.LoadBot(new YourChatBotClassNameHere());</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>The <strong>Script Metadata</strong> section also lets you include namespaces and DLL references with <code>//using <namespace></code> and <code>//dll <dll name></code>.</p><div class="custom-container note"><p class="custom-container-title">Note</p><p><strong>Avoid adding whitespace between <code>//</code> and keywords</strong></p></div><p>By default, the following namespaces are loaded:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">;</span></span> 39<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Collections</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Generic</span><span style="color:#D4D4D4;">;</span></span> 40<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Text</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">RegularExpressions</span><span style="color:#D4D4D4;">;</span></span> 41<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Linq</span><span style="color:#D4D4D4;">;</span></span> 42<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Text</span><span style="color:#D4D4D4;">;</span></span> 43<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">IO</span><span style="color:#D4D4D4;">;</span></span> 44<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Net</span><span style="color:#D4D4D4;">;</span></span> 45<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> System</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Threading</span><span style="color:#D4D4D4;">;</span></span> 46<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> MinecraftClient</span><span style="color:#D4D4D4;">;</span></span> 47<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> MinecraftClient</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Mapping</span><span style="color:#D4D4D4;">;</span></span> 48<span class="line"><span style="color:#C586C0;">using</span><span style="color:#4EC9B0;"> MinecraftClient</span><span style="color:#D4D4D4;">.</span><span style="color:#4EC9B0;">Inventory</span><span style="color:#D4D4D4;">;</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></div><p>Example:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#6A9955;">//using System.Collections.Immutable</span></span> 49<span class="line"><span style="color:#6A9955;">//dll MyDll.dll</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></div><p>Full Example:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#6A9955;">//MCCScript 1.0</span></span> 50<span class="line"></span> 51<span class="line"><span style="color:#6A9955;">//using System.Collections.Immutable</span></span> 52<span class="line"><span style="color:#6A9955;">//dll MyDll.dll</span></span> 53<span class="line"></span> 54<span class="line"><span style="color:#9CDCFE;">MCC</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">LoadBot</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">new</span><span style="color:#4EC9B0;"> ExampleChatBot</span><span style="color:#D4D4D4;">());</span></span> 55<span class="line"></span> 56<span class="line"><span style="color:#6A9955;">//MCCScript Extensions</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></div><h3 id="chat-bot-class" tabindex="-1"><a class="header-anchor" href="#chat-bot-class"><span>Chat Bot Class</span></a></h3><p>After the <strong>Script Metadata</strong> section, you can define any number of helper classes. The main bot class must extend <code>ChatBot</code>.</p><p>There are no required methods, everything is optional.</p><p>When the Chat Bot is initialized for the first time, the <code>Initialize</code> method is called.</p><p>Use it to initialize state such as dictionaries or cached values.</p><div class="custom-container note"><p class="custom-container-title">Note</p><p><strong>For allocating resources like a database connection, we recommend allocating them in <code>AfterGameJoined</code> and freeing them in <code>OnDisconnect</code></strong></p></div><h2 id="examples" tabindex="-1"><a class="header-anchor" href="#examples"><span>Examples</span></a></h2><p>You can find more examples in the <a href="https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/MinecraftClient/ChatBots" target="_blank" rel="noopener noreferrer">ChatBots</a> and <a href="https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/MinecraftClient/config" target="_blank" rel="noopener noreferrer">config</a> folders in the GitHub repository.</p><h2 id="ai-assisted-bot-authoring" tabindex="-1"><a class="header-anchor" href="#ai-assisted-bot-authoring"><span>AI-Assisted Bot Authoring</span></a></h2><p>If you are using an AI coding agent on this repository, use the <code>mcc-chatbot-authoring</code> skill for bot work.</p><p>Skill links:</p><ul><li><a href="https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/.skills/mcc-chatbot-authoring" target="_blank" rel="noopener noreferrer">Browse the skill on GitHub</a></li><li><a href="https://download-directory.github.io/?url=https%3A%2F%2Fgithub.com%2FMCCTeam%2FMinecraft-Console-Client%2Ftree%2Fmaster%2F.skills%2Fmcc-chatbot-authoring" target="_blank" rel="noopener noreferrer">Download the skill directory</a></li></ul><p>This skill is meant for:</p><ul><li>standalone <code>/script</code> bots</li><li>built-in MCC chat bots</li><li>bot repairs and ports</li><li>event handlers, movement logic, inventory logic, and plugin-channel work</li></ul><p>Its default behavior is important: if you ask for "a bot" without saying otherwise, it should prefer a standalone <code>//MCCScript</code> bot loaded with <code>/script</code>. It should only choose a built-in bot when you explicitly ask for repo wiring, automatic config loading, or a compiled MCC bot.</p><p>The skill also follows MCC-specific rules, for example:</p><ul><li>do not send chat from <code>Initialize()</code></li><li>use <code>AfterGameJoined()</code> for chat or commands after login</li><li>normalize chat with <code>GetVerbatim(text)</code> before <code>IsChatMessage(...)</code> or <code>IsPrivateMessage(...)</code></li><li>fully clean up commands, timers, plugin channels, and movement locks</li></ul><h3 id="example-prompts" tabindex="-1"><a class="header-anchor" href="#example-prompts"><span>Example prompts</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-text"><span class="line"><span>Create a standalone MCC /script bot that watches public chat for the word "auction" and logs matching messages to the console. Use the mcc-chatbot-authoring skill.</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-text"><span class="line"><span>Fix this existing MCC script bot so it stops sending chat from Initialize() and moves the startup command to AfterGameJoined(). Use the mcc-chatbot-authoring skill.</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-text"><span class="line"><span>Make a built-in MCC chat bot named AutoTorch and wire it fully into the repo config and bot registration. Use the mcc-chatbot-authoring skill.</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-text"><span class="line"><span>Create a standalone MCC /script bot that follows private messages, uses GetVerbatim(text), and replies only to bot owners. Use the mcc-chatbot-authoring skill.</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h2 id="achievements-and-advancements" tabindex="-1"><a class="header-anchor" href="#achievements-and-advancements"><span>Achievements And Advancements</span></a></h2><p>Chat bots and C# scripts can read the current achievement state and react to updates.</p><p>Useful methods:</p><ul><li><code>GetAchievements()</code></li><li><code>GetUnlockedAchievements()</code></li><li><code>GetLockedAchievements()</code></li><li><code>OnAchievementUpdate(IReadOnlyList<Achievement> updated, IReadOnlyList<string> removedIds, bool reset)</code></li></ul><p>Things worth knowing:</p><ul><li>On <code>1.8</code> to <code>1.11.2</code>, ids use the legacy <code>achievement.*</code> format.</li><li>On <code>1.12+</code>, ids use advancement resource ids such as <code>minecraft:story/root</code>.</li><li>Legacy achievements usually have <code>Title = null</code> and <code>Description = null</code>
56 because the server does not send display metadata in the statistics packet.</li><li>On newer versions, revoking an advancement may remove it from the current set instead of turning it into a locked entry, so <code>removedIds</code> matters.</li></ul><p>Example:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#6A9955;">//MCCScript 1.0</span></span> 57<span class="line"></span> 58<span class="line"><span style="color:#9CDCFE;">MCC</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">LoadBot</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">new</span><span style="color:#4EC9B0;"> AchievementWatcher</span><span style="color:#D4D4D4;">());</span></span> 59<span class="line"></span> 60<span class="line"><span style="color:#6A9955;">//MCCScript Extensions</span></span> 61<span class="line"></span> 62<span class="line"><span style="color:#569CD6;">public</span><span style="color:#569CD6;"> class</span><span style="color:#4EC9B0;"> AchievementWatcher</span><span style="color:#D4D4D4;"> : </span><span style="color:#4EC9B0;">ChatBot</span></span> 63<span class="line"><span style="color:#D4D4D4;">{</span></span> 64<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;">
64 override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> AfterGameJoined</span><span style="color:#D4D4D4;">()</span></span> 65<span class="line"><span style="color:#D4D4D4;"> {</span></span> 66<span class="line"><span style="color:#4EC9B0;"> Achievement</span><span style="color:#D4D4D4;">[] </span><span style="color:#9CDCFE;">known</span><span style="color:#D4D4D4;"> = </span><span style="color:#DCDCAA;">GetAchievements</span><span style="color:#D4D4D4;">();</span></span> 67<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"Known achievements: </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">known</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Length</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">"</span><span style="color:#D4D4D4;">);</span></span> 68<span class="line"><span style="color:#D4D4D4;"> }</span></span> 69<span class="line"></span> 70<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;">
70 override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> OnAchievementUpdate</span><span style="color:#D4D4D4;">(</span><span style="color:#4EC9B0;">IReadOnlyList</span><span style="color:#D4D4D4;"><</span><span style="color:#4EC9B0;">Achievement</span><span style="color:#D4D4D4;">> </span><span style="color:#9CDCFE;">updated</span><span style="color:#D4D4D4;">, </span><span style="color:#4EC9B0;">IReadOnlyList</span><span style="color:#D4D4D4;"><</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">> </span><span style="color:#9CDCFE;">removedIds</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">bool</span><span style="color:#9CDCFE;"> reset</span><span style="color:#D4D4D4;">)</span></span> 71<span class="line"><span style="color:#D4D4D4;"> {</span></span> 72<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"Achievement update: reset=</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">reset</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">, updated=</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">updated</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Count</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">, removed=</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">removedIds</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Count</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">"</span><span style="color:#D4D4D4;">);</span></span> 73<span class="line"></span> 74<span class="line"><span style="color:#C586C0;"> foreach</span><span style="color:#D4D4D4;"> (</span><span style="color:#4EC9B0;">Achievement</span><span style="color:#9CDCFE;"> achievement</span><span style="color:#C586C0;"> in</span><span style="color:#9CDCFE;"> updated</span><span style="color:#D4D4D4;">)</span></span> 75<span class="line"><span style="color:#D4D4D4;"> {</span></span> 76<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> title</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">achievement</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Title</span><span style="color:#D4D4D4;"> ?? </span><span style="color:#9CDCFE;">achievement</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Id</span><span style="color:#D4D4D4;">;</span></span> 77<span class="line"><span style="color:#569CD6;"> string</span><span style="color:#9CDCFE;"> state</span><span style="color:#D4D4D4;"> = </span><span style="color:#9CDCFE;">achievement</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">IsCompleted</span><span style="color:#D4D4D4;"> ? </span><span style="color:#CE9178;">"done"</span><span style="color:#D4D4D4;"> : </span><span style="color:#CE9178;">"todo"</span><span style="color:#D4D4D4;">;</span></span> 78<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$" - </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">title</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">: </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">state</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">"</span><span style="color:#D4D4D4;">);</span></span> 79<span class="line"><span style="color:#D4D4D4;"> }</span></span> 80<span class="line"></span> 81<span class="line"><span style="color:#C586C0;"> foreach</span><span style="color:#D4D4D4;"> (</span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> removedId</span><span style="color:#C586C0;"> in</span><span style="color:#9CDCFE;"> removedIds</span><span style="color:#D4D4D4;">)</span></span> 82<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$" - removed: </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">removedId</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">"</span><span style="color:#D4D4D4;">);</span></span> 83<span class="line"><span style="color:#D4D4D4;"> }</span></span> 84<span class="line"><span style="color:#D4D4D4;">}</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 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="scoreboard-teams" tabindex="-1"><a class="header-anchor" href="#scoreboard-teams"><span>Scoreboard teams</span></a></h2><p>Chat bots and C# scripts can read the current team state and react to team changes.</p><p>Useful methods and events:</p><ul><li><code>GetTeams()</code> - returns a snapshot of all teams the server has sent</li><li><code>
84GetPlayerTeam(playerName)</code> - returns the team a specific player is on, or <code>null</code></li><li><code>OnTeam(teamName, method, displayName, friendlyFlags, nameTagVisibility, collisionRule, color, prefix, suffix, players)</code> - called whenever a team packet arrives</li></ul><p>The <code>method</code> byte tells you what changed:</p><ul><li><code>0</code> - team created (includes full parameters and initial member list)</li><li><code>1</code> - team removed</li><li><code>2</code> - team parameters updated (display name, colors, rules)</li><li><code>3</code> - players added to the team</li><li><code>4</code> - players removed from the team</li></ul><p>The <code>color</code> field is a <code>ChatFormatting</code> enum ordinal. Common values: <code>0</code>=black, <code>9</code>=blue, <code>10</code>=green, <code>12</code>=red, <code>14</code>=yellow, <code>-1</code>=none/reset.</p><p>The <code>nameTagVisibility</code> and <code>collisionRule</code> strings take values from the Minecraft wiki: <code>"always"</code>, <code>"never"</code>, <code>"hideForOtherTeams"</code>, <code>"hideForOwnTeam"</code> (visibility) or <code>"pushOtherTeams"</code>, <code>"pushOwnTeam"</code> (collision).</p><p>Example:</p><div class="language-csharp line-numbers-mode" data-highlighter="shiki" data-ext="csharp" style="background-color:#1E1E1E;color:#D4D4D4;"><pre class="shiki dark-plus vp-code"><code class="language-csharp"><span class="line"><span style="color:#6A9955;">//MCCScript 1.0</span></span> 85<span class="line"></span> 86<span class="line"><span style="color:#9CDCFE;">MCC</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">LoadBot</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">new</span><span style="color:#4EC9B0;"> TeamWatcher</span><span style="color:#D4D4D4;">());</span></span> 87<span class="line"></span> 88<span class="line"><span style="color:#6A9955;">//MCCScript Extensions</span></span> 89<span class="line"></span> 90<span class="line"><span style="color:#569CD6;">public</span><span style="color:#569CD6;"> class</span><span style="color:#4EC9B0;"> TeamWatcher</span><span style="color:#D4D4D4;"> : </span><span style="color:#4EC9B0;">ChatBot</span></span> 91<span class="line"><span style="color:#D4D4D4;">{</span></span> 92<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;">
92 override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> AfterGameJoined</span><span style="color:#D4D4D4;">()</span></span> 93<span class="line"><span style="color:#D4D4D4;"> {</span></span> 94<span class="line"><span style="color:#C586C0;"> foreach</span><span style="color:#D4D4D4;"> (</span><span style="color:#569CD6;">var</span><span style="color:#9CDCFE;"> team</span><span style="color:#C586C0;"> in</span><span style="color:#DCDCAA;"> GetTeams</span><span style="color:#D4D4D4;">().</span><span style="color:#9CDCFE;">Values</span><span style="color:#D4D4D4;">)</span></span> 95<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"Team '</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">team</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Name</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">' has </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">team</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Members</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Count</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;"> member(s)"</span><span style="color:#D4D4D4;">);</span></span> 96<span class="line"><span style="color:#D4D4D4;"> }</span></span> 97<span class="line"></span> 98<span class="line"><span style="color:#569CD6;"> public</span><span style="color:#569CD6;">
98 override</span><span style="color:#569CD6;"> void</span><span style="color:#DCDCAA;"> OnTeam</span><span style="color:#D4D4D4;">(</span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> teamName</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">byte</span><span style="color:#9CDCFE;"> method</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> displayName</span><span style="color:#D4D4D4;">,</span></span> 99<span class="line"><span style="color:#569CD6;"> byte</span><span style="color:#9CDCFE;"> friendlyFlags</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> nameTagVisibility</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> collisionRule</span><span style="color:#D4D4D4;">,</span></span> 100<span class="line"><span style="color:#569CD6;"> int</span><span style="color:#9CDCFE;"> color</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> prefix</span><span style="color:#D4D4D4;">, </span><span style="color:#569CD6;">string</span><span style="color:#9CDCFE;"> suffix</span><span style="color:#D4D4D4;">, </span><span style="color:#4EC9B0;">List</span><span style="color:#D4D4D4;"><</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">> </span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">)</span></span> 101<span class="line"><span style="color:#D4D4D4;"> {</span></span> 102<span class="line"><span style="color:#C586C0;"> switch</span><span style="color:#D4D4D4;"> (</span><span style="color:#9CDCFE;">method</span><span style="color:#D4D4D4;">)</span></span> 103<span class="line"><span style="color:#D4D4D4;"> {</span></span> 104<span class="line"><span style="color:#C586C0;"> case</span><span style="color:#B5CEA8;"> 0</span><span style="color:#D4D4D4;">:</span></span> 105<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"Team '</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">' created with </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">.</span><span style="color:#9CDCFE;">Count</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;"> member(s)"</span><span style="color:#D4D4D4;">);</span></span> 106<span class="line"><span style="color:#C586C0;"> break</span><span style="color:#D4D4D4;">;</span></span> 107<span class="line"><span style="color:#C586C0;"> case</span><span style="color:#B5CEA8;"> 1</span><span style="color:#D4D4D4;">:</span></span> 108<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"Team '</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">' removed"</span><span style="color:#D4D4D4;">);</span></span> 109<span class="line"><span style="color:#C586C0;"> break</span><span style="color:#D4D4D4;">;</span></span> 110<span class="line"><span style="color:#C586C0;"> case</span><span style="color:#B5CEA8;"> 3</span><span style="color:#D4D4D4;">:</span></span> 111<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"</span><span style="color:#D4D4D4;">{</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">Join</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">", "</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">)}</span><span style="color:#CE9178;"> joined team '</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">'"</span><span style="color:#D4D4D4;">);</span></span> 112<span class="line"><span style="color:#C586C0;"> break</span><span style="color:#D4D4D4;">;</span></span> 113<span class="line"><span style="color:#C586C0;"> case</span><span style="color:#B5CEA8;"> 4</span><span style="color:#D4D4D4;">:</span></span> 114<span class="line"><span style="color:#DCDCAA;"> LogToConsole</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">$"</span><span style="color:#D4D4D4;">{</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">.</span><span style="color:#DCDCAA;">Join</span><span style="color:#D4D4D4;">(</span><span style="color:#CE9178;">", "</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">)}</span><span style="color:#CE9178;"> left team '</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">'"</span><span style="color:#D4D4D4;">);</span></span> 115<span class="line"><span style="color:#C586C0;"> break</span><span style="color:#D4D4D4;">;</span></span> 116<span class="line"><span style="color:#D4D4D4;"> }</span></span> 117<span class="line"><span style="color:#D4D4D4;"> }</span></span> 118<span class="line"><span style="color:#D4D4D4;">}</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 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="c-api" tabindex="-1"><a class="header-anchor" href="#c-api"><span>C# API</span></a></h2><p>The authoritative reference for the C# API is <a href="https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Scripting/ChatBot.cs" target="_blank" rel="noopener noreferrer">ChatBot.cs</a>.</p><p>Each method is well documented with standard C# documentation comments.</p><p>This page intentionally stays focused on the basics. For newer hooks and overloads, check the source file directly.</p>`,83)])])}const c=e(t,[["render",o]]),i=JSON.parse('{"path":"/l10n/af/guide/creating-bots.html","title":"Creating Chat Bots","lang":"af","frontmatter":{"title":"Creating Chat Bots","description":"Creating Chat Bots Notes Requirements Quick Introduction Examples AI-Assisted Bot Authoring C# API Notes Note This page covers the basics of the Chat Bot API. For the full surfa...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Creating Chat Bots\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2022-11-06T13:21:21.000Z\\",\\"author\\":[]}"],["meta",{"property":"og:url","content":"https://mccteam.github.io/l10n/af/guide/creating-bots.html"}],["meta",{"property":"og:site_name","content":"Minecraft Console Client"}],["meta",{"property":"og:title","content":"Creating Chat Bots"}],["meta",{"property":"og:description","content":"Creating Chat Bots Notes Requirements Quick Introduction Examples AI-Assisted Bot Authoring C# API Notes Note This page covers the basics of the Chat Bot API. For the full surfa..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"af"}],["meta",{"property":"og:locale:alternate","content":"zh-Hant"}],["meta",{"property":"og:locale:alternate","content":"zh-Hans"}],["meta",{"property":"og:locale:alternate","content":"vi"}],["meta",{"property":"og:locale:alternate","content":"uk"}],["meta",{"property":"og:locale:alternate","content":"tr"}],["meta",{"property":"og:locale:alternate","content":"sv"}],["meta",{"property":"og:locale:alternate","content":"sr-Cyrl"}],["meta",{"property":"og:locale:alternate","content":"ru"}],["meta",{"property":"og:locale:alternate","content":"ro"}
118],["meta",{"property":"og:locale:alternate","content":"pt"}],["meta",{"property":"og:locale:alternate","content":"pt-BR"}],["meta",{"property":"og:locale:alternate","content":"pl"}],["meta",{"property":"og:locale:alternate","content":"no"}],["meta",{"property":"og:locale:alternate","content":"nl"}],["meta",{"property":"og:locale:alternate","content":"lv"}],["meta",{"property":"og:locale:alternate","content":"ko"}],["meta",{"property":"og:locale:alternate","content":"ja"}],["meta",{"property":"og:locale:alternate","content":"it"}],["meta",{"property":"og:locale:alternate","content":"hu"}],["meta",{"property":"og:locale:alternate","content":"he"}],["meta",{"property":"og:locale:alternate","content":"fr"}],["meta",{"property":"og:locale:alternate","content":"fi"}],["meta",{"property":"og:locale:alternate","content":"es"}],["meta",{"property":"og:locale:alternate","content":"en"}],["meta",{"property":"og:locale:alternate","content":"el"}],["meta",{"property":"og:locale:alternate","content":"de"}],["meta",{"property":"og:locale:alternate","content":"da"}],["meta",{"property":"og:locale:alternate","content":"cs"}],["meta",{"property":"og:locale:alternate","content":"ca"}],["meta",{"property":"og:locale:alternate","content":"ar"}],["meta",{"property":"og:updated_time","content":"2022-11-06T13:21:21.000Z"}],["meta",{"property":"article:modified_time","content":"2022-11-06T13:21:21.000Z"}],["link",{"rel":"canonical","href":"https://mccteam.github.io/l10n/af/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"zh-hant","href":"https://mccteam.github.io/l10n/zh-Hant/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"zh-hans","href":"https://mccteam.github.io/l10n/zh-Hans/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"vi","href":"https://mccteam.github.io/l10n/vi/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"uk","href":"https://mccteam.github.io/l10n/uk/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"tr","href":"https://mccteam.github.io/l10n/tr/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"sv","href":"https://mccteam.github.io/l10n/sv/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"sr-cyrl","href":"https://mccteam.github.io/l10n/sr-Cyrl/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ru","href":"https://mccteam.github.io/l10n/ru/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ro","href":"https://mccteam.github.io/l10n/ro/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"pt","href":"https://mccteam.github.io/l10n/pt/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"pt-br","href":"https://mccteam.github.io/l10n/pt-BR/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"pl","href":"https://mccteam.github.io/l10n/pl/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"no","href":"https://mccteam.github.io/l10n/no/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"nl","href":"https://mccteam.github.io/l10n/nl/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"lv","href":"https://mccteam.github.io/l10n/lv/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ko","href":"https://mccteam.github.io/l10n/ko/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ja","href":"https://mccteam.github.io/l10n/ja/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"it","href":"https://mccteam.github.io/l10n/it/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"hu","href":"https://mccteam.github.io/l10n/hu/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"he","href":"https://mccteam.github.io/l10n/he/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"fr","href":"https://mccteam.github.io/l10n/fr/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"fi","href":"https://mccteam.github.io/l10n/fi/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"es","href":"https://mccteam.github.io/l10n/es/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"en","href":"https://mccteam.github.io/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"el","href":"https://mccteam.github.io/l10n/el/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"de","href":"https://mccteam.github.io/l10n/de/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"da","href":"https://mccteam.github.io/l10n/da/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"cs","href":"https://mccteam.github.io/l10n/cs/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ca","href":"https://mccteam.github.io/l10n/ca/guide/creating-bots.html"}],["link",{"rel":"alternate","hreflang":"ar","href":"https://mccteam.github.io/l10n/ar/guide/creating-bots.html"}]]},"git":{"updatedTime":1667740881000,"contributors":[{"name":"BruceChen","username":"BruceChen","email":"[email protected]","commits":8,"url":"https://github.com/BruceChen"}],"changelog":[{"hash":"09d4e71554fb17583c1e8f474067e0a202c023ec","time":1667740881000,"email":"[email protected]","author":"BruceChen","message":"Change the way Crowdin integrates (#2329)","tag":"20221106-156"},{"hash":"b46fef1b3490f35cd5b585ea2fba889050c1783d","time":1667651273000,"email":"[email protected]","author":"BruceChen","message":"New Crowdin updates (#2326)"},{"hash":"86338f8a928a0d22eec1f082dd7293ba1dd6e29d","time":1667551069000,"email":"[email protected]","author":"BruceChen","message":"New Crowdin updates (#2324)"},{"hash":"237d14577f7c2f1a89f9d6d42499f0e4eec15f73","time":1667547542000,"email":"[email protected]","author":"BruceChen","message":"New Crowdin updates (#2322)"},{"hash":"f61c73eb681cc4bb5535e03a59dc322094e67203","time":1667546573000,"email":"[email protected]","author":"BruceChen","message":"[SKIP_DEPLOY] Change the representation of the container"},{"hash":"5624e77125a2919268d0a19509805f11613183ed","time":1667543159000,"email":"[email protected]","author":"BruceChen","message":"Fix format"},{"hash":"52b6372be69c1c0d74909732cafed9fbc5b7067d","time":1667534697000,"email":"[email protected]","author":"BruceChen","message":"[SKIP_DEPLOY] Add plugin-container"},{"hash":"e5529eead94b9b9a042f8f2d0331c13031260695","time":1667394092000,"email":"[email protected]","author":"BruceChen","message":"Migrate documents"}]},"autoDesc":true,"filePathRelative":"l10n/af/guide/creating-bots.md"}');export{c as comp,i 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.