PageSourceSearch

https://mccteam.github.io/assets/creating-bots.html--cB7pCrN.js

js mccteam.github.io collected 2026-10-03 09:36:20 UTC 52,572 bytes, 118 lines download raw bytes

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&#39;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&amp;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, &quot;Chat Bot&quot; and &quot;Script&quot; 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 &quot;Script Metadata&quot; 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&#39;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;">&quot;An example Chat Bot has been initialized!&quot;</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;">&quot;&quot;</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;">&quot;&quot;</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;">&quot; has sent you a private message: &quot;</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;">&quot; has said: &quot;</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>&lt;script metadata&gt;</span></span>
38<span class="line"><span>&lt;chat bot class&gt;</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 &lt;namespace&gt;</code> and <code>//dll &lt;dll name&gt;</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 &quot;a bot&quot; 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 &quot;auction&quot; 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&lt;Achievement&gt; updated, IReadOnlyList&lt;string&gt; 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;">$&quot;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;">&quot;</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;">&lt;</span><span style="color:#4EC9B0;">Achievement</span><span style="color:#D4D4D4;">&gt; </span><span style="color:#9CDCFE;">updated</span><span style="color:#D4D4D4;">, </span><span style="color:#4EC9B0;">IReadOnlyList</span><span style="color:#D4D4D4;">&lt;</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">&gt; </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;">$&quot;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;">&quot;</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;">&quot;done&quot;</span><span style="color:#D4D4D4;"> : </span><span style="color:#CE9178;">&quot;todo&quot;</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;">$&quot; - </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;">&quot;</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;">$&quot; - removed: </span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">removedId</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">&quot;</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>&quot;always&quot;</code>, <code>&quot;never&quot;</code>, <code>&quot;hideForOtherTeams&quot;</code>, <code>&quot;hideForOwnTeam&quot;</code> (visibility) or <code>&quot;pushOtherTeams&quot;</code>, <code>&quot;pushOwnTeam&quot;</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;">$&quot;Team &#39;</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;">&#39; 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)&quot;</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;">&lt;</span><span style="color:#569CD6;">string</span><span style="color:#D4D4D4;">&gt; </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;">$&quot;Team &#39;</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">&#39; 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)&quot;</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;">$&quot;Team &#39;</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">&#39; removed&quot;</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;">$&quot;</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;">&quot;, &quot;</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">)}</span><span style="color:#CE9178;"> joined team &#39;</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">&#39;&quot;</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;">$&quot;</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;">&quot;, &quot;</span><span style="color:#D4D4D4;">, </span><span style="color:#9CDCFE;">players</span><span style="color:#D4D4D4;">)}</span><span style="color:#CE9178;"> left team &#39;</span><span style="color:#D4D4D4;">{</span><span style="color:#9CDCFE;">teamName</span><span style="color:#D4D4D4;">}</span><span style="color:#CE9178;">&#39;&quot;</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.