diff --git a/docs/en/README.md b/docs/en/README.md new file mode 100644 index 0000000..577df53 --- /dev/null +++ b/docs/en/README.md @@ -0,0 +1,149 @@ +--- +description: >- + A .NET framework for building Telegram bots on top of Telegram.Bot: + attribute-based command routing, menus, middleware, DI and background tasks. +--- + +# PRTelegramBot + +> #### **If this project has been useful to you, you can support its development on Boosty:** [**https://boosty.to/prethink**](https://boosty.to/prethink) **A ⭐ on the** [**repository**](https://github.com/prethink/PRTelegramBot) **is great support too.** + +{% hint style="info" %} +The English documentation is being written. Until a page exists here, the [Russian documentation](https://prethink.gitbook.io/prtelegrambot/) covers the whole framework — the code samples in it are language-neutral. +{% endhint %} + +## Source code + +[https://github.com/prethink/PRTelegramBot](https://github.com/prethink/PRTelegramBot) + +This documentation covers version 1.0.0. + +## ⚛️ Framework core + +PRTelegramBot is built on top of [Telegram.Bot](https://github.com/TelegramBots/Telegram.Bot), so every method and type that library gives you stays available. Its [documentation](https://telegrambots.github.io/book/) applies here too. + +* Telegram.Bot v22.10.2.1 [https://github.com/TelegramBots/Telegram.Bot](https://github.com/TelegramBots/Telegram.Bot) +* Supports [Bot API 10.2](https://core.telegram.org/bots/api) + +The library targets .NET 6.0 and runs on any newer version. + +## 🚀 Hello world + +Create a console application, add the package, and put this in `Program.cs`: + +```sh +dotnet new console -o MyBot +cd MyBot +dotnet add package PRTelegramBot +``` + +```csharp +using PRTelegramBot.Attributes; +using PRTelegramBot.Builders; +using PRTelegramBot.Interfaces; +using PRTelegramBot.Services.Messages; + +var bot = new PRBotBuilder("YOUR_BOT_TOKEN").Build(); +await bot.StartAsync(); + +// Keeps the console application alive. +await Task.Delay(Timeout.Infinite); + +public static class Commands +{ + // Runs when the user sends /start. + [SlashHandler("/start")] + public static async Task Start(IBotContext context) + { + await MessageSender.Send(context, "Hello, World!"); + } + + // Runs when the message text is exactly "Ping", ignoring case. + [ReplyMenuHandler("Ping")] + public static async Task Ping(IBotContext context) + { + await MessageSender.Send(context, "Pong"); + } +} +``` + +Handlers are ordinary methods marked with an attribute. There is no registration table to keep in sync — `Commands` is never referenced from `Program.cs`, the framework finds both handlers by reflection at startup. + +By default the bot receives updates through [polling](https://core.telegram.org/bots/faq#how-do-i-get-updates), which needs no public address. Webhooks are configured on the same builder. + +{% hint style="warning" %} +Keep your bot token out of version control. Use [user secrets](https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets), environment variables or a configuration file that is excluded from the repository. +{% endhint %} + +## 💎 Features + +### Commands and routing + +* **Reply commands.** Support for simple text commands. +* **Dynamic reply commands.** Text commands loaded from a configuration file, with no recompilation needed. +* **Commands with parameters.** Support for commands that carry parameters in brackets, for example "Test (1)". +* **Slash commands.** Handling of commands such as /get\_1, /users and other text commands, with a configurable argument separator, typed argument access through `context.GetSlashArgs()`, and /start deeplinks. +* **Flexible inline commands.** A generator and a parser for inline commands. +* **Step-by-step command execution.** Run sequential sets of reply commands. +* **Dynamic command management.** Add and remove commands at runtime, with the option to implement your own command registrar. +* **Pre-execution checks.** Internal checks for reply, dynamicreply, nextstep, slash and inline commands. +* **Custom handlers for message and callbackQuery updates.** Implement your own handlers, just like reply, slash and inlineCallback. + +### Menus, keyboards and messages + +* **Menu creation.** Simple and flexible creation of reply and inline menus. +* **Keyboard builders.** `ReplyKeyboardBuilder` and `InlineKeyboardBuilder` for building keyboards fluently, with rows, columns, filler buttons and request buttons (contact, location, poll, chat, users, WebApp). +* **Message builder.** `MessageBuilder` composes texts from a template with positional arguments and named tokens such as `{QA}`, including lazily resolved values. +* **Inline confirmations.** `InlineCallbackWithConfirmation` wraps a button so the user is asked to confirm before the action runs. +* **Paginated messages.** Message management with page-by-page navigation. +* **Waiting messages.** `MessageAwaiter` posts a placeholder message while the data is being processed and removes it afterwards. +* **Built-in calendar.** Working with dates and calendars. +* **Media helpers.** `MediaSender` and `MediaEditor` for photos, photo groups, files and media by URL; `MessageCopier` for copying messages. + +### Hosting and infrastructure + +* **Polling and webhook bots.** Support for different ways of running a bot. +* **Hosted service.** A bot is an `IHostedService`, so it plugs straight into ASP.NET Core and the Generic Host. +* **Multi-bot system.** Run several bots in a single project. +* **Connecting to your own servers.** Run bots against your own servers. +* **Dropping stale updates.** Drop every pending update before the bot starts. +* **Background tasks.** Recurring tasks with metadata, retry and run limits, and DI support. +* **Dependency injection.** Dependency injection support. +* **Execution scope.** `CurrentScope` gives you the current bot, its context and its services anywhere in code that was invoked by a Telegram update. +* **Logging.** Works with `ILogger` / `ILoggerFactory`, resolved from the builder or from DI, with a built-in fallback. + +### Users and access control + +* **Admin manager.** Manage the bot's administrators, with the option to implement your own admin manager. +* **User white list manager.** Flexible white list management: mark methods to be ignored by the white list, or implement your own white list manager. +* **Method access control.** Restrict access to specific methods. +* **User cache storage.** Working with a per-user cache. +* **Group utilities.** `GroupUtils` checks whether a user is a member, an administrator or the creator of a group. + +### Extensibility + +* **Middleware system.** Add your own handlers before and after an update, similar to middleware in ASP.NET. +* **Event system.** A flexible event handling system. +* **Event bus.** `PREventBus` and global subscribers for broadcasting events across the application. +* **Update handling.** Implement your own update handler. +* **Inline data converters.** `IInlineMenuConverter` lets you choose how `callback_data` is built; the bundled `FileInlineConverter` stores the payload on disk to work around Telegram's 64-byte limit. +* **Interchangeable serializers.** `JsonSerializerWrapper` or `ToonSerializerWrapper` for inline button data — ToonNet produces a more compact `callback_data`. +* **Configuration files.** Per-bot configuration files, with the option to implement your own configuration provider. JSON is used by default. +* **Parsing from configuration files.** Parse messages, commands and buttons from configuration files. +* **Everything Telegram.Bot provides.** + +## 🧱 Integrated packages + +CalendarPicker | karb0f0s [https://github.com/karb0f0s/CalendarPicker](https://github.com/karb0f0s/CalendarPicker) + +ToonNet [https://www.nuget.org/packages/ToonNet](https://www.nuget.org/packages/ToonNet) + +## 🛡️ Versioning + +Version 1.0.0 is the first stable release. From this point the public API follows [semantic versioning](https://semver.org/): breaking changes land only in major versions, new functionality in minor ones, fixes in patches. + +Every release is described in the [changelog](https://github.com/prethink/PRTelegramBot/blob/master/CHANGELOG.md), breaking changes first. + +## 🤝 Getting help + +Ask in the [Telegram chat](https://t.me/prethinkdev), or open a [GitHub issue](https://github.com/prethink/PRTelegramBot/issues) for bugs and feature requests. diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md new file mode 100644 index 0000000..285cfe9 --- /dev/null +++ b/docs/en/SUMMARY.md @@ -0,0 +1,4 @@ +# Table of contents + +* [PRTelegramBot](README.md) +* [Migrating to 1.0](migrating-to-1.0.md) diff --git a/docs/en/migrating-to-1.0.md b/docs/en/migrating-to-1.0.md new file mode 100644 index 0000000..46f1080 --- /dev/null +++ b/docs/en/migrating-to-1.0.md @@ -0,0 +1,98 @@ +--- +description: What you need to change in your own code when moving from 0.9.x to 1.0.0. +--- + +# Migrating to 1.0 + +Version 1.0.0 is the first stable release, and it gathers every breaking change that had been accumulating through 0.9.x. From here the public API follows [semantic versioning](https://semver.org/), so the next chance to break anything is 2.0. + +Only the changes that require an edit on your side are listed below. The full list, bug fixes included, is in the [changelog](https://github.com/prethink/PRTelegramBot/blob/master/CHANGELOG.md). + +## The `Helpers.Message` facade was removed + +This one affects almost everybody. `PRTelegramBot.Helpers.Message` was marked obsolete back in 0.9.0 and only forwarded its calls. It is now gone. + +The replacements have identical signatures — only the type name changes: + +| Was | Now | +| --- | --- | +| `Helpers.Message.Send(...)` | `MessageSender.Send(...)` | +| `Helpers.Message.Edit(...)` | `MessageEditor.Edit(...)` | + +```csharp +// before +using PRTelegramBot.Helpers; +await Message.Send(context, "Hello"); + +// after +using PRTelegramBot.Services.Messages; +await MessageSender.Send(context, "Hello"); +``` + +## Namespaces were unified + +Each of these had been split in two: the files sat in one folder while declaring two different namespaces. Now there is one namespace per folder. + +| Was | Now | +| --- | --- | +| `PRTelegramBot.InlineButtons` | `PRTelegramBot.Models.InlineButtons` | +| `PRTelegramBot.Core.Factory` | `PRTelegramBot.Core.Factories` | +| `PRTelegramBot.Models.TCommands` | `PRTelegramBot.Models.CallbackCommands` | +| `PRTelegramBot.Core.UpdateHandlers` | `PRTelegramBot.Core.UpdateDispatchers` | + +Fixed by updating `using` directives; the types themselves did not change. + +## Two attributes were renamed + +They expressed the same idea under different names, and put the words in the opposite order to the Telegram.Bot types they filter on. + +| Was | Now | +| --- | --- | +| `[RequiredTypeChat(...)]` | `[RequireChatType(...)]` | +| its `TypesChat` property | `ChatTypes` | +| `[RequireTypeMessage(...)]` | `[RequireMessageType(...)]` | +| its `TypeMessages` property | `MessageTypes` | + +## Typos in names were fixed + +| Was | Now | +| --- | --- | +| `AutoEditMessageСycle` | `AutoEditMessageCycle` | +| `OptionMessage.thumbnail` | `OptionMessage.Thumbnail` | + +The "С" in the old `AutoEditMessageСycle` was a Cyrillic letter, so the name looked right but never matched a search through the code. + +## Things that never worked were removed + +* `PRTelegramBot.Models.InlineButton` — used nowhere, and its `GetContent` always threw `NotImplementedException`. Putting such a button into a menu was impossible. +* `IInlineStorage` — an interface nothing ever implemented. +* The `PRTelegramBot.Workflow` namespace — unfinished, empty stubs. + +If any of these appeared in your code, it was not working there either. + +## Hidden from the public API + +* `PRLoggerEvents` and `PRLoggerEventsFactory` are now `internal`. They are the internal fallback that keeps event-based logging working when no `ILoggerFactory` is supplied; use `ILogger` instead. +* `InlineCallbackWithConfirmation.DataCollection` is no longer public. Pending confirmations are looked up by the framework itself — and they no longer accumulate forever, since anything unanswered is discarded after an hour. + +## Behaviour changes + +These compile fine but act differently at runtime. + +**`GetChatId`, `GetMessageId` and `GetUserId`** now throw `InvalidOperationException` with a clear message instead of a `NullReferenceException` when the update carries no such data. If you were catching `NullReferenceException`, change the type. + +**`UpdateExtension.TryGetBot`** declares its `out` parameter as `PRBotBase?`, because it is `null` when the bot is not found. The compiler will now point this out. + +**`FileInlineConverter(string path)`** used to ignore the folder name it was given and always use a folder literally called `path`. The name is now honoured, so inline payloads move to the folder you asked for — and any confirmation still pending at the moment of the upgrade will not be found. + +**`InlineUtils.GetInlineButton`** no longer switches over concrete button types; it calls `GetInlineButton()` on the button itself. Built-in buttons convert exactly as before, but a subclass that overrides the conversion is now honoured, and button types the switch did not list now work instead of throwing. + +## What is new + +Worth a look while you are here: + +* `InlineCopyText` — a button that copies the given text to the clipboard. +* `MessageBuilder` — composes a message from a template. +* `ReplyKeyboardBuilder.AddRequestManagedBot` — a button that asks the user to pick a bot. +* `OptionMessage.ShowCaptionAboveMedia`, together with other sending parameters Telegram supports that the library was not passing through. +* Message and update events that had been missed across Telegram.Bot upgrades. diff --git a/docs/.gitbook/assets/izobrazhenie-1.png b/docs/ru/.gitbook/assets/izobrazhenie-1.png similarity index 100% rename from docs/.gitbook/assets/izobrazhenie-1.png rename to docs/ru/.gitbook/assets/izobrazhenie-1.png diff --git a/docs/.gitbook/assets/izobrazhenie.png b/docs/ru/.gitbook/assets/izobrazhenie.png similarity index 100% rename from docs/.gitbook/assets/izobrazhenie.png rename to docs/ru/.gitbook/assets/izobrazhenie.png diff --git "a/docs/.gitbook/assets/\320\221\320\265\320\267 \320\270\320\274\320\265\320\275\320\270.png" "b/docs/ru/.gitbook/assets/\320\221\320\265\320\267 \320\270\320\274\320\265\320\275\320\270.png" similarity index 100% rename from "docs/.gitbook/assets/\320\221\320\265\320\267 \320\270\320\274\320\265\320\275\320\270.png" rename to "docs/ru/.gitbook/assets/\320\221\320\265\320\267 \320\270\320\274\320\265\320\275\320\270.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (1).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (1).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (1).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (1).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (10).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (10).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (10).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (10).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (11).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (11).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (11).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (11).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (12).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (12).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (12).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (12).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (13).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (13).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (13).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (13).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (14).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (14).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (14).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (14).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (15).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (15).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (15).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (15).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (16).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (16).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (16).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (16).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (17).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (17).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (17).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (17).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (18).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (18).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (18).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (18).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (19).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (19).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (19).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (19).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (2).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (2).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (2).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (2).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (20).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (20).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (20).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (20).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (21).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (21).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (21).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (21).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (22).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (22).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (22).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (22).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (23).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (23).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (23).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (23).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (24).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (24).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (24).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (24).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (25).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (25).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (25).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (25).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (26).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (26).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (26).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (26).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (27).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (27).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (27).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (27).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (28).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (28).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (28).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (28).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (29).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (29).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (29).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (29).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (3).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (3).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (3).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (3).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (30).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (30).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (30).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (30).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (31).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (31).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (31).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (31).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (32).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (32).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (32).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (32).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (33).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (33).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (33).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (33).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (34).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (34).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (34).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (34).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (35).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (35).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (35).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (35).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (36).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (36).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (36).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (36).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (37).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (37).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (37).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (37).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (38).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (38).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (38).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (38).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (39).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (39).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (39).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (39).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (4).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (4).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (4).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (4).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (40).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (40).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (40).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (40).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (41).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (41).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (41).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (41).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (5).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (5).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (5).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (5).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (6).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (6).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (6).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (6).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (7).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (7).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (7).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (7).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (8).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (8).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (8).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (8).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (9).png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (9).png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (9).png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 (9).png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-1-1024x551.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-1-1024x551.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-1-1024x551.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-1-1024x551.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-13.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-13.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-13.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-13.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-14.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-14.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-14.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-14.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-15.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-15.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-15.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-15.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-16.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-16.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-16.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-16.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-17.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-17.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-17.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-17.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-18.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-18.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-18.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-18.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-19.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-19.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-19.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-19.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-2.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-2.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-2.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-2.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-20.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-20.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-20.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-20.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-21.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-21.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-21.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-21.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-22.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-22.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-22.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-22.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-23.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-23.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-23.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-23.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-24.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-24.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-24.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-24.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-6.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-6.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-6.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-6.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-7.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-7.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-7.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-7.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-8.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-8.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-8.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-8.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-9.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-9.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-9.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265-9.png" diff --git "a/docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265.png" "b/docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265.png" similarity index 100% rename from "docs/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265.png" rename to "docs/ru/.gitbook/assets/\320\270\320\267\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265.png" diff --git a/docs/README.md b/docs/ru/README.md similarity index 100% rename from docs/README.md rename to docs/ru/README.md diff --git a/docs/SUMMARY.md b/docs/ru/SUMMARY.md similarity index 100% rename from docs/SUMMARY.md rename to docs/ru/SUMMARY.md diff --git a/docs/api/README.md b/docs/ru/api/README.md similarity index 100% rename from docs/api/README.md rename to docs/ru/api/README.md diff --git a/docs/api/atributy/README.md b/docs/ru/api/atributy/README.md similarity index 100% rename from docs/api/atributy/README.md rename to docs/ru/api/atributy/README.md diff --git a/docs/api/atributy/prbackgroundtaskattribute.md b/docs/ru/api/atributy/prbackgroundtaskattribute.md similarity index 100% rename from docs/api/atributy/prbackgroundtaskattribute.md rename to docs/ru/api/atributy/prbackgroundtaskattribute.md diff --git a/docs/api/interfeisy/README.md b/docs/ru/api/interfeisy/README.md similarity index 100% rename from docs/api/interfeisy/README.md rename to docs/ru/api/interfeisy/README.md diff --git a/docs/api/interfeisy/iadminmanager.md b/docs/ru/api/interfeisy/iadminmanager.md similarity index 100% rename from docs/api/interfeisy/iadminmanager.md rename to docs/ru/api/interfeisy/iadminmanager.md diff --git a/docs/api/interfeisy/ibotcollection.md b/docs/ru/api/interfeisy/ibotcollection.md similarity index 100% rename from docs/api/interfeisy/ibotcollection.md rename to docs/ru/api/interfeisy/ibotcollection.md diff --git a/docs/api/interfeisy/ibotconfigprovider.md b/docs/ru/api/interfeisy/ibotconfigprovider.md similarity index 100% rename from docs/api/interfeisy/ibotconfigprovider.md rename to docs/ru/api/interfeisy/ibotconfigprovider.md diff --git a/docs/api/interfeisy/ibotcontext.md b/docs/ru/api/interfeisy/ibotcontext.md similarity index 100% rename from docs/api/interfeisy/ibotcontext.md rename to docs/ru/api/interfeisy/ibotcontext.md diff --git a/docs/api/interfeisy/icallbackquerycommandhandler.md b/docs/ru/api/interfeisy/icallbackquerycommandhandler.md similarity index 100% rename from docs/api/interfeisy/icallbackquerycommandhandler.md rename to docs/ru/api/interfeisy/icallbackquerycommandhandler.md diff --git a/docs/api/interfeisy/iexecutestep.md b/docs/ru/api/interfeisy/iexecutestep.md similarity index 100% rename from docs/api/interfeisy/iexecutestep.md rename to docs/ru/api/interfeisy/iexecutestep.md diff --git a/docs/api/interfeisy/iinlinecontent.md b/docs/ru/api/interfeisy/iinlinecontent.md similarity index 100% rename from docs/api/interfeisy/iinlinecontent.md rename to docs/ru/api/interfeisy/iinlinecontent.md diff --git a/docs/api/interfeisy/iinlinemenuconverter.md b/docs/ru/api/interfeisy/iinlinemenuconverter.md similarity index 100% rename from docs/api/interfeisy/iinlinemenuconverter.md rename to docs/ru/api/interfeisy/iinlinemenuconverter.md diff --git a/docs/api/interfeisy/iinternalcheck.md b/docs/ru/api/interfeisy/iinternalcheck.md similarity index 100% rename from docs/api/interfeisy/iinternalcheck.md rename to docs/ru/api/interfeisy/iinternalcheck.md diff --git a/docs/api/interfeisy/imessagecommandhandler.md b/docs/ru/api/interfeisy/imessagecommandhandler.md similarity index 100% rename from docs/api/interfeisy/imessagecommandhandler.md rename to docs/ru/api/interfeisy/imessagecommandhandler.md diff --git a/docs/api/interfeisy/iprbackgroundtask.md b/docs/ru/api/interfeisy/iprbackgroundtask.md similarity index 100% rename from docs/api/interfeisy/iprbackgroundtask.md rename to docs/ru/api/interfeisy/iprbackgroundtask.md diff --git a/docs/api/interfeisy/iprbackgroundtaskmetadata.md b/docs/ru/api/interfeisy/iprbackgroundtaskmetadata.md similarity index 100% rename from docs/api/interfeisy/iprbackgroundtaskmetadata.md rename to docs/ru/api/interfeisy/iprbackgroundtaskmetadata.md diff --git a/docs/api/interfeisy/iprbackgroundtaskrunner.md b/docs/ru/api/interfeisy/iprbackgroundtaskrunner.md similarity index 100% rename from docs/api/interfeisy/iprbackgroundtaskrunner.md rename to docs/ru/api/interfeisy/iprbackgroundtaskrunner.md diff --git a/docs/api/interfeisy/iprglobalsubscriber.md b/docs/ru/api/interfeisy/iprglobalsubscriber.md similarity index 100% rename from docs/api/interfeisy/iprglobalsubscriber.md rename to docs/ru/api/interfeisy/iprglobalsubscriber.md diff --git a/docs/api/interfeisy/iprserializer.md b/docs/ru/api/interfeisy/iprserializer.md similarity index 100% rename from docs/api/interfeisy/iprserializer.md rename to docs/ru/api/interfeisy/iprserializer.md diff --git a/docs/api/interfeisy/iprsettings.md b/docs/ru/api/interfeisy/iprsettings.md similarity index 100% rename from docs/api/interfeisy/iprsettings.md rename to docs/ru/api/interfeisy/iprsettings.md diff --git a/docs/api/interfeisy/iprtaskrunnersubscriber.md b/docs/ru/api/interfeisy/iprtaskrunnersubscriber.md similarity index 100% rename from docs/api/interfeisy/iprtaskrunnersubscriber.md rename to docs/ru/api/interfeisy/iprtaskrunnersubscriber.md diff --git a/docs/api/interfeisy/iprupdatehandler.md b/docs/ru/api/interfeisy/iprupdatehandler.md similarity index 100% rename from docs/api/interfeisy/iprupdatehandler.md rename to docs/ru/api/interfeisy/iprupdatehandler.md diff --git a/docs/api/interfeisy/iregistercommand.md b/docs/ru/api/interfeisy/iregistercommand.md similarity index 100% rename from docs/api/interfeisy/iregistercommand.md rename to docs/ru/api/interfeisy/iregistercommand.md diff --git a/docs/api/interfeisy/irunningbackgroundtaskdata.md b/docs/ru/api/interfeisy/irunningbackgroundtaskdata.md similarity index 100% rename from docs/api/interfeisy/irunningbackgroundtaskdata.md rename to docs/ru/api/interfeisy/irunningbackgroundtaskdata.md diff --git a/docs/api/interfeisy/itelegramcache.md b/docs/ru/api/interfeisy/itelegramcache.md similarity index 100% rename from docs/api/interfeisy/itelegramcache.md rename to docs/ru/api/interfeisy/itelegramcache.md diff --git a/docs/api/interfeisy/iusermanager.md b/docs/ru/api/interfeisy/iusermanager.md similarity index 100% rename from docs/api/interfeisy/iusermanager.md rename to docs/ru/api/interfeisy/iusermanager.md diff --git a/docs/api/interfeisy/iwhitelistmanager.md b/docs/ru/api/interfeisy/iwhitelistmanager.md similarity index 100% rename from docs/api/interfeisy/iwhitelistmanager.md rename to docs/ru/api/interfeisy/iwhitelistmanager.md diff --git a/docs/api/klassy/README.md b/docs/ru/api/klassy/README.md similarity index 100% rename from docs/api/klassy/README.md rename to docs/ru/api/klassy/README.md diff --git a/docs/api/klassy/adminlistmanager.md b/docs/ru/api/klassy/adminlistmanager.md similarity index 100% rename from docs/api/klassy/adminlistmanager.md rename to docs/ru/api/klassy/adminlistmanager.md diff --git a/docs/api/klassy/botcontext.md b/docs/ru/api/klassy/botcontext.md similarity index 100% rename from docs/api/klassy/botcontext.md rename to docs/ru/api/klassy/botcontext.md diff --git a/docs/api/klassy/commandhandler.md b/docs/ru/api/klassy/commandhandler.md similarity index 100% rename from docs/api/klassy/commandhandler.md rename to docs/ru/api/klassy/commandhandler.md diff --git a/docs/api/klassy/currentscope.md b/docs/ru/api/klassy/currentscope.md similarity index 100% rename from docs/api/klassy/currentscope.md rename to docs/ru/api/klassy/currentscope.md diff --git a/docs/api/klassy/fabriki-botov.md b/docs/ru/api/klassy/fabriki-botov.md similarity index 100% rename from docs/api/klassy/fabriki-botov.md rename to docs/ru/api/klassy/fabriki-botov.md diff --git a/docs/api/klassy/fileinlineconverter.md b/docs/ru/api/klassy/fileinlineconverter.md similarity index 100% rename from docs/api/klassy/fileinlineconverter.md rename to docs/ru/api/klassy/fileinlineconverter.md diff --git a/docs/api/klassy/inlinecallbackwithconfirmation.md b/docs/ru/api/klassy/inlinecallbackwithconfirmation.md similarity index 100% rename from docs/api/klassy/inlinecallbackwithconfirmation.md rename to docs/ru/api/klassy/inlinecallbackwithconfirmation.md diff --git a/docs/api/klassy/inlinecopytext.md b/docs/ru/api/klassy/inlinecopytext.md similarity index 100% rename from docs/api/klassy/inlinecopytext.md rename to docs/ru/api/klassy/inlinecopytext.md diff --git a/docs/api/klassy/inlinekeyboardbuilder.md b/docs/ru/api/klassy/inlinekeyboardbuilder.md similarity index 100% rename from docs/api/klassy/inlinekeyboardbuilder.md rename to docs/ru/api/klassy/inlinekeyboardbuilder.md diff --git a/docs/api/klassy/jsonserializerwrapper.md b/docs/ru/api/klassy/jsonserializerwrapper.md similarity index 100% rename from docs/api/klassy/jsonserializerwrapper.md rename to docs/ru/api/klassy/jsonserializerwrapper.md diff --git a/docs/api/klassy/keyboardbuilderbase.md b/docs/ru/api/klassy/keyboardbuilderbase.md similarity index 100% rename from docs/api/klassy/keyboardbuilderbase.md rename to docs/ru/api/klassy/keyboardbuilderbase.md diff --git a/docs/api/klassy/mediaeditor.md b/docs/ru/api/klassy/mediaeditor.md similarity index 100% rename from docs/api/klassy/mediaeditor.md rename to docs/ru/api/klassy/mediaeditor.md diff --git a/docs/api/klassy/mediasender.md b/docs/ru/api/klassy/mediasender.md similarity index 100% rename from docs/api/klassy/mediasender.md rename to docs/ru/api/klassy/mediasender.md diff --git a/docs/api/klassy/messagebuilder.md b/docs/ru/api/klassy/messagebuilder.md similarity index 100% rename from docs/api/klassy/messagebuilder.md rename to docs/ru/api/klassy/messagebuilder.md diff --git a/docs/api/klassy/messagecopier.md b/docs/ru/api/klassy/messagecopier.md similarity index 100% rename from docs/api/klassy/messagecopier.md rename to docs/ru/api/klassy/messagecopier.md diff --git a/docs/api/klassy/messagedeleter.md b/docs/ru/api/klassy/messagedeleter.md similarity index 100% rename from docs/api/klassy/messagedeleter.md rename to docs/ru/api/klassy/messagedeleter.md diff --git a/docs/api/klassy/messageeditor.md b/docs/ru/api/klassy/messageeditor.md similarity index 100% rename from docs/api/klassy/messageeditor.md rename to docs/ru/api/klassy/messageeditor.md diff --git a/docs/api/klassy/messagenotification.md b/docs/ru/api/klassy/messagenotification.md similarity index 100% rename from docs/api/klassy/messagenotification.md rename to docs/ru/api/klassy/messagenotification.md diff --git a/docs/api/klassy/messagesender.md b/docs/ru/api/klassy/messagesender.md similarity index 100% rename from docs/api/klassy/messagesender.md rename to docs/ru/api/klassy/messagesender.md diff --git a/docs/api/klassy/middlewarebase.md b/docs/ru/api/klassy/middlewarebase.md similarity index 100% rename from docs/api/klassy/middlewarebase.md rename to docs/ru/api/klassy/middlewarebase.md diff --git a/docs/api/klassy/optionmessage.md b/docs/ru/api/klassy/optionmessage.md similarity index 100% rename from docs/api/klassy/optionmessage.md rename to docs/ru/api/klassy/optionmessage.md diff --git a/docs/api/klassy/prbackgroundtaskrunner.md b/docs/ru/api/klassy/prbackgroundtaskrunner.md similarity index 100% rename from docs/api/klassy/prbackgroundtaskrunner.md rename to docs/ru/api/klassy/prbackgroundtaskrunner.md diff --git a/docs/api/klassy/preventbus.md b/docs/ru/api/klassy/preventbus.md similarity index 100% rename from docs/api/klassy/preventbus.md rename to docs/ru/api/klassy/preventbus.md diff --git a/docs/api/klassy/prsettingsprovider.md b/docs/ru/api/klassy/prsettingsprovider.md similarity index 100% rename from docs/api/klassy/prsettingsprovider.md rename to docs/ru/api/klassy/prsettingsprovider.md diff --git a/docs/api/klassy/replykeyboardbuilder.md b/docs/ru/api/klassy/replykeyboardbuilder.md similarity index 100% rename from docs/api/klassy/replykeyboardbuilder.md rename to docs/ru/api/klassy/replykeyboardbuilder.md diff --git a/docs/api/klassy/tcommands/README.md b/docs/ru/api/klassy/tcommands/README.md similarity index 100% rename from docs/api/klassy/tcommands/README.md rename to docs/ru/api/klassy/tcommands/README.md diff --git a/docs/api/klassy/tcommands/calendartcommand.md b/docs/ru/api/klassy/tcommands/calendartcommand.md similarity index 100% rename from docs/api/klassy/tcommands/calendartcommand.md rename to docs/ru/api/klassy/tcommands/calendartcommand.md diff --git a/docs/api/klassy/tcommands/entitytcommand.md b/docs/ru/api/klassy/tcommands/entitytcommand.md similarity index 100% rename from docs/api/klassy/tcommands/entitytcommand.md rename to docs/ru/api/klassy/tcommands/entitytcommand.md diff --git a/docs/api/klassy/tcommands/pagetcommand.md b/docs/ru/api/klassy/tcommands/pagetcommand.md similarity index 100% rename from docs/api/klassy/tcommands/pagetcommand.md rename to docs/ru/api/klassy/tcommands/pagetcommand.md diff --git a/docs/api/klassy/tcommands/tcommandbase.md b/docs/ru/api/klassy/tcommands/tcommandbase.md similarity index 100% rename from docs/api/klassy/tcommands/tcommandbase.md rename to docs/ru/api/klassy/tcommands/tcommandbase.md diff --git a/docs/api/klassy/telegraminlineconverter.md b/docs/ru/api/klassy/telegraminlineconverter.md similarity index 100% rename from docs/api/klassy/telegraminlineconverter.md rename to docs/ru/api/klassy/telegraminlineconverter.md diff --git a/docs/api/klassy/telegramoptions/README.md b/docs/ru/api/klassy/telegramoptions/README.md similarity index 100% rename from docs/api/klassy/telegramoptions/README.md rename to docs/ru/api/klassy/telegramoptions/README.md diff --git a/docs/api/klassy/telegramoptions/webhookoptions.md b/docs/ru/api/klassy/telegramoptions/webhookoptions.md similarity index 100% rename from docs/api/klassy/telegramoptions/webhookoptions.md rename to docs/ru/api/klassy/telegramoptions/webhookoptions.md diff --git a/docs/api/klassy/toonserializerwrapper.md b/docs/ru/api/klassy/toonserializerwrapper.md similarity index 100% rename from docs/api/klassy/toonserializerwrapper.md rename to docs/ru/api/klassy/toonserializerwrapper.md diff --git a/docs/api/klassy/whitelistmanager.md b/docs/ru/api/klassy/whitelistmanager.md similarity index 100% rename from docs/api/klassy/whitelistmanager.md rename to docs/ru/api/klassy/whitelistmanager.md diff --git a/docs/api/metody-rasshireniya/README.md b/docs/ru/api/metody-rasshireniya/README.md similarity index 100% rename from docs/api/metody-rasshireniya/README.md rename to docs/ru/api/metody-rasshireniya/README.md diff --git a/docs/api/metody-rasshireniya/accessextension.md b/docs/ru/api/metody-rasshireniya/accessextension.md similarity index 100% rename from docs/api/metody-rasshireniya/accessextension.md rename to docs/ru/api/metody-rasshireniya/accessextension.md diff --git a/docs/api/metody-rasshireniya/botcontextextension.md b/docs/ru/api/metody-rasshireniya/botcontextextension.md similarity index 100% rename from docs/api/metody-rasshireniya/botcontextextension.md rename to docs/ru/api/metody-rasshireniya/botcontextextension.md diff --git a/docs/api/metody-rasshireniya/cacheextension.md b/docs/ru/api/metody-rasshireniya/cacheextension.md similarity index 100% rename from docs/api/metody-rasshireniya/cacheextension.md rename to docs/ru/api/metody-rasshireniya/cacheextension.md diff --git a/docs/api/metody-rasshireniya/descriptionextension.md b/docs/ru/api/metody-rasshireniya/descriptionextension.md similarity index 100% rename from docs/api/metody-rasshireniya/descriptionextension.md rename to docs/ru/api/metody-rasshireniya/descriptionextension.md diff --git a/docs/api/metody-rasshireniya/itelegrambotclientextension.md b/docs/ru/api/metody-rasshireniya/itelegrambotclientextension.md similarity index 100% rename from docs/api/metody-rasshireniya/itelegrambotclientextension.md rename to docs/ru/api/metody-rasshireniya/itelegrambotclientextension.md diff --git a/docs/api/metody-rasshireniya/messageextension.md b/docs/ru/api/metody-rasshireniya/messageextension.md similarity index 100% rename from docs/api/metody-rasshireniya/messageextension.md rename to docs/ru/api/metody-rasshireniya/messageextension.md diff --git a/docs/api/metody-rasshireniya/pageextension.md b/docs/ru/api/metody-rasshireniya/pageextension.md similarity index 100% rename from docs/api/metody-rasshireniya/pageextension.md rename to docs/ru/api/metody-rasshireniya/pageextension.md diff --git a/docs/api/metody-rasshireniya/prbotbaseextension.md b/docs/ru/api/metody-rasshireniya/prbotbaseextension.md similarity index 100% rename from docs/api/metody-rasshireniya/prbotbaseextension.md rename to docs/ru/api/metody-rasshireniya/prbotbaseextension.md diff --git a/docs/api/metody-rasshireniya/serviceproviderextension.md b/docs/ru/api/metody-rasshireniya/serviceproviderextension.md similarity index 100% rename from docs/api/metody-rasshireniya/serviceproviderextension.md rename to docs/ru/api/metody-rasshireniya/serviceproviderextension.md diff --git a/docs/api/metody-rasshireniya/stepextension.md b/docs/ru/api/metody-rasshireniya/stepextension.md similarity index 100% rename from docs/api/metody-rasshireniya/stepextension.md rename to docs/ru/api/metody-rasshireniya/stepextension.md diff --git a/docs/api/metody-rasshireniya/updateextension.md b/docs/ru/api/metody-rasshireniya/updateextension.md similarity index 100% rename from docs/api/metody-rasshireniya/updateextension.md rename to docs/ru/api/metody-rasshireniya/updateextension.md diff --git a/docs/api/perechisleniya-enum/README.md b/docs/ru/api/perechisleniya-enum/README.md similarity index 100% rename from docs/api/perechisleniya-enum/README.md rename to docs/ru/api/perechisleniya-enum/README.md diff --git a/docs/api/perechisleniya-enum/actionwithlastmessage.md b/docs/ru/api/perechisleniya-enum/actionwithlastmessage.md similarity index 100% rename from docs/api/perechisleniya-enum/actionwithlastmessage.md rename to docs/ru/api/perechisleniya-enum/actionwithlastmessage.md diff --git a/docs/api/perechisleniya-enum/commandcomparison.md b/docs/ru/api/perechisleniya-enum/commandcomparison.md similarity index 100% rename from docs/api/perechisleniya-enum/commandcomparison.md rename to docs/ru/api/perechisleniya-enum/commandcomparison.md diff --git a/docs/api/perechisleniya-enum/commandtype.md b/docs/ru/api/perechisleniya-enum/commandtype.md similarity index 100% rename from docs/api/perechisleniya-enum/commandtype.md rename to docs/ru/api/perechisleniya-enum/commandtype.md diff --git a/docs/api/perechisleniya-enum/executestepresult.md b/docs/ru/api/perechisleniya-enum/executestepresult.md similarity index 100% rename from docs/api/perechisleniya-enum/executestepresult.md rename to docs/ru/api/perechisleniya-enum/executestepresult.md diff --git a/docs/api/perechisleniya-enum/internalcheckresult.md b/docs/ru/api/perechisleniya-enum/internalcheckresult.md similarity index 100% rename from docs/api/perechisleniya-enum/internalcheckresult.md rename to docs/ru/api/perechisleniya-enum/internalcheckresult.md diff --git a/docs/api/perechisleniya-enum/stringcomparison.md b/docs/ru/api/perechisleniya-enum/stringcomparison.md similarity index 100% rename from docs/api/perechisleniya-enum/stringcomparison.md rename to docs/ru/api/perechisleniya-enum/stringcomparison.md diff --git a/docs/api/perechisleniya-enum/updateresult.md b/docs/ru/api/perechisleniya-enum/updateresult.md similarity index 100% rename from docs/api/perechisleniya-enum/updateresult.md rename to docs/ru/api/perechisleniya-enum/updateresult.md diff --git a/docs/api/utils/README.md b/docs/ru/api/utils/README.md similarity index 100% rename from docs/api/utils/README.md rename to docs/ru/api/utils/README.md diff --git a/docs/api/utils/accessutils.md b/docs/ru/api/utils/accessutils.md similarity index 100% rename from docs/api/utils/accessutils.md rename to docs/ru/api/utils/accessutils.md diff --git a/docs/api/utils/botcollection.md b/docs/ru/api/utils/botcollection.md similarity index 100% rename from docs/api/utils/botcollection.md rename to docs/ru/api/utils/botcollection.md diff --git a/docs/api/utils/botconfigjsonprovider.md b/docs/ru/api/utils/botconfigjsonprovider.md similarity index 100% rename from docs/api/utils/botconfigjsonprovider.md rename to docs/ru/api/utils/botconfigjsonprovider.md diff --git a/docs/api/utils/calendarutils.md b/docs/ru/api/utils/calendarutils.md similarity index 100% rename from docs/api/utils/calendarutils.md rename to docs/ru/api/utils/calendarutils.md diff --git a/docs/api/utils/generatorutils.md b/docs/ru/api/utils/generatorutils.md similarity index 100% rename from docs/api/utils/generatorutils.md rename to docs/ru/api/utils/generatorutils.md diff --git a/docs/api/utils/grouputils.md b/docs/ru/api/utils/grouputils.md similarity index 100% rename from docs/api/utils/grouputils.md rename to docs/ru/api/utils/grouputils.md diff --git a/docs/api/utils/menugenerator.md b/docs/ru/api/utils/menugenerator.md similarity index 100% rename from docs/api/utils/menugenerator.md rename to docs/ru/api/utils/menugenerator.md diff --git a/docs/api/utils/messageawaiter.md b/docs/ru/api/utils/messageawaiter.md similarity index 100% rename from docs/api/utils/messageawaiter.md rename to docs/ru/api/utils/messageawaiter.md diff --git a/docs/bystryi-start/README.md b/docs/ru/bystryi-start/README.md similarity index 100% rename from docs/bystryi-start/README.md rename to docs/ru/bystryi-start/README.md diff --git a/docs/bystryi-start/webhook/README.md b/docs/ru/bystryi-start/webhook/README.md similarity index 100% rename from docs/bystryi-start/webhook/README.md rename to docs/ru/bystryi-start/webhook/README.md diff --git a/docs/bystryi-start/webhook/debugging-webhook.md b/docs/ru/bystryi-start/webhook/debugging-webhook.md similarity index 100% rename from docs/bystryi-start/webhook/debugging-webhook.md rename to docs/ru/bystryi-start/webhook/debugging-webhook.md diff --git a/docs/dependency-injection/README.md b/docs/ru/dependency-injection/README.md similarity index 100% rename from docs/dependency-injection/README.md rename to docs/ru/dependency-injection/README.md diff --git a/docs/dependency-injection/prioritety-razresheniya-komponentov.md b/docs/ru/dependency-injection/prioritety-razresheniya-komponentov.md similarity index 100% rename from docs/dependency-injection/prioritety-razresheniya-komponentov.md rename to docs/ru/dependency-injection/prioritety-razresheniya-komponentov.md diff --git a/docs/dobavlenie-i-udalenie-komand-v-dinamicheskom-rezhime.md b/docs/ru/dobavlenie-i-udalenie-komand-v-dinamicheskom-rezhime.md similarity index 100% rename from docs/dobavlenie-i-udalenie-komand-v-dinamicheskom-rezhime.md rename to docs/ru/dobavlenie-i-udalenie-komand-v-dinamicheskom-rezhime.md diff --git a/docs/f.a.q..md b/docs/ru/f.a.q..md similarity index 100% rename from docs/f.a.q..md rename to docs/ru/f.a.q..md diff --git a/docs/fishki-poleznye-praktiki/README.md b/docs/ru/fishki-poleznye-praktiki/README.md similarity index 100% rename from docs/fishki-poleznye-praktiki/README.md rename to docs/ru/fishki-poleznye-praktiki/README.md diff --git a/docs/fishki-poleznye-praktiki/obrabotka-do-i-posle-update.md b/docs/ru/fishki-poleznye-praktiki/obrabotka-do-i-posle-update.md similarity index 100% rename from docs/fishki-poleznye-praktiki/obrabotka-do-i-posle-update.md rename to docs/ru/fishki-poleznye-praktiki/obrabotka-do-i-posle-update.md diff --git a/docs/fishki-poleznye-praktiki/rabota-s-komandami.md b/docs/ru/fishki-poleznye-praktiki/rabota-s-komandami.md similarity index 100% rename from docs/fishki-poleznye-praktiki/rabota-s-komandami.md rename to docs/ru/fishki-poleznye-praktiki/rabota-s-komandami.md diff --git a/docs/fishki-poleznye-praktiki/sozdanie-komandy-tolko-dlya-administratorov.md b/docs/ru/fishki-poleznye-praktiki/sozdanie-komandy-tolko-dlya-administratorov.md similarity index 100% rename from docs/fishki-poleznye-praktiki/sozdanie-komandy-tolko-dlya-administratorov.md rename to docs/ru/fishki-poleznye-praktiki/sozdanie-komandy-tolko-dlya-administratorov.md diff --git a/docs/fonovye-zadachi-background-tasks/README.md b/docs/ru/fonovye-zadachi-background-tasks/README.md similarity index 100% rename from docs/fonovye-zadachi-background-tasks/README.md rename to docs/ru/fonovye-zadachi-background-tasks/README.md diff --git a/docs/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-atributom-metadannykh.md b/docs/ru/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-atributom-metadannykh.md similarity index 100% rename from docs/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-atributom-metadannykh.md rename to docs/ru/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-atributom-metadannykh.md diff --git a/docs/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-realizaciei-interfeisa-metadannykh.md b/docs/ru/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-realizaciei-interfeisa-metadannykh.md similarity index 100% rename from docs/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-realizaciei-interfeisa-metadannykh.md rename to docs/ru/fonovye-zadachi-background-tasks/primer-fonovoi-zadachi-s-realizaciei-interfeisa-metadannykh.md diff --git a/docs/fonovye-zadachi-background-tasks/primer-zadachi-s-otdelnym-klassom-metadannykh.md b/docs/ru/fonovye-zadachi-background-tasks/primer-zadachi-s-otdelnym-klassom-metadannykh.md similarity index 100% rename from docs/fonovye-zadachi-background-tasks/primer-zadachi-s-otdelnym-klassom-metadannykh.md rename to docs/ru/fonovye-zadachi-background-tasks/primer-zadachi-s-otdelnym-klassom-metadannykh.md diff --git a/docs/konfiguracionnye-faily-dlya-botov.md b/docs/ru/konfiguracionnye-faily-dlya-botov.md similarity index 100% rename from docs/konfiguracionnye-faily-dlya-botov.md rename to docs/ru/konfiguracionnye-faily-dlya-botov.md diff --git a/docs/local-server-api.md b/docs/ru/local-server-api.md similarity index 100% rename from docs/local-server-api.md rename to docs/ru/local-server-api.md diff --git a/docs/logirovaniya.md b/docs/ru/logirovaniya.md similarity index 100% rename from docs/logirovaniya.md rename to docs/ru/logirovaniya.md diff --git a/docs/middleware.md b/docs/ru/middleware.md similarity index 100% rename from docs/middleware.md rename to docs/ru/middleware.md diff --git a/docs/oblast-vidimosti-bota-scope.md b/docs/ru/oblast-vidimosti-bota-scope.md similarity index 100% rename from docs/oblast-vidimosti-bota-scope.md rename to docs/ru/oblast-vidimosti-bota-scope.md diff --git a/docs/obrabotka-komand/README.md b/docs/ru/obrabotka-komand/README.md similarity index 100% rename from docs/obrabotka-komand/README.md rename to docs/ru/obrabotka-komand/README.md diff --git a/docs/obrabotka-komand/obrabotka-inline-komand/README.md b/docs/ru/obrabotka-komand/obrabotka-inline-komand/README.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-inline-komand/README.md rename to docs/ru/obrabotka-komand/obrabotka-inline-komand/README.md diff --git a/docs/obrabotka-komand/obrabotka-inline-komand/ekzemplyarnyi-inline-obrabotchik.md b/docs/ru/obrabotka-komand/obrabotka-inline-komand/ekzemplyarnyi-inline-obrabotchik.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-inline-komand/ekzemplyarnyi-inline-obrabotchik.md rename to docs/ru/obrabotka-komand/obrabotka-inline-komand/ekzemplyarnyi-inline-obrabotchik.md diff --git a/docs/obrabotka-komand/obrabotka-inline-komand/inlinecallback-s-podtverzhdeniem.md b/docs/ru/obrabotka-komand/obrabotka-inline-komand/inlinecallback-s-podtverzhdeniem.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-inline-komand/inlinecallback-s-podtverzhdeniem.md rename to docs/ru/obrabotka-komand/obrabotka-inline-komand/inlinecallback-s-podtverzhdeniem.md diff --git a/docs/obrabotka-komand/obrabotka-inline-komand/obrabotka-inline-komand.md b/docs/ru/obrabotka-komand/obrabotka-inline-komand/obrabotka-inline-komand.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-inline-komand/obrabotka-inline-komand.md rename to docs/ru/obrabotka-komand/obrabotka-inline-komand/obrabotka-inline-komand.md diff --git a/docs/obrabotka-komand/obrabotka-inline-komand/sozdanie-inline-menyu.md b/docs/ru/obrabotka-komand/obrabotka-inline-komand/sozdanie-inline-menyu.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-inline-komand/sozdanie-inline-menyu.md rename to docs/ru/obrabotka-komand/obrabotka-inline-komand/sozdanie-inline-menyu.md diff --git a/docs/obrabotka-komand/obrabotka-slash-komand.md b/docs/ru/obrabotka-komand/obrabotka-slash-komand.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-slash-komand.md rename to docs/ru/obrabotka-komand/obrabotka-slash-komand.md diff --git a/docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/README.md b/docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/README.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/README.md rename to docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/README.md diff --git a/docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/dinamicheskie-reply-komandy-iz-json-faila.md b/docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/dinamicheskie-reply-komandy-iz-json-faila.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/dinamicheskie-reply-komandy-iz-json-faila.md rename to docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/dinamicheskie-reply-komandy-iz-json-faila.md diff --git a/docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/sozdanie-reply-menyu.md b/docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/sozdanie-reply-menyu.md similarity index 100% rename from docs/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/sozdanie-reply-menyu.md rename to docs/ru/obrabotka-komand/obrabotka-soobshenii-polzovatelya-reply/sozdanie-reply-menyu.md diff --git a/docs/obrabotka-komand/parametry.md b/docs/ru/obrabotka-komand/parametry.md similarity index 100% rename from docs/obrabotka-komand/parametry.md rename to docs/ru/obrabotka-komand/parametry.md diff --git a/docs/obrabotka-komand/rabota-s-kalendarem.md b/docs/ru/obrabotka-komand/rabota-s-kalendarem.md similarity index 100% rename from docs/obrabotka-komand/rabota-s-kalendarem.md rename to docs/ru/obrabotka-komand/rabota-s-kalendarem.md diff --git a/docs/obrabotka-komand/sobstvennye-obrabotchiki-dlya-komand.md b/docs/ru/obrabotka-komand/sobstvennye-obrabotchiki-dlya-komand.md similarity index 100% rename from docs/obrabotka-komand/sobstvennye-obrabotchiki-dlya-komand.md rename to docs/ru/obrabotka-komand/sobstvennye-obrabotchiki-dlya-komand.md diff --git a/docs/obrabotka-komand/sobstvennye-proverki-pered-vypolneniem-komand.md b/docs/ru/obrabotka-komand/sobstvennye-proverki-pered-vypolneniem-komand.md similarity index 100% rename from docs/obrabotka-komand/sobstvennye-proverki-pered-vypolneniem-komand.md rename to docs/ru/obrabotka-komand/sobstvennye-proverki-pered-vypolneniem-komand.md diff --git a/docs/ogranichennyi-dostup-k-komandam.md b/docs/ru/ogranichennyi-dostup-k-komandam.md similarity index 100% rename from docs/ogranichennyi-dostup-k-komandam.md rename to docs/ru/ogranichennyi-dostup-k-komandam.md diff --git a/docs/perekhod-na-1.0.md b/docs/ru/perekhod-na-1.0.md similarity index 100% rename from docs/perekhod-na-1.0.md rename to docs/ru/perekhod-na-1.0.md diff --git a/docs/postranichnyi-vyvod-informacii-v-soobshenie.md b/docs/ru/postranichnyi-vyvod-informacii-v-soobshenie.md similarity index 100% rename from docs/postranichnyi-vyvod-informacii-v-soobshenie.md rename to docs/ru/postranichnyi-vyvod-informacii-v-soobshenie.md diff --git a/docs/prbotbuilder-sozdanie-botov.md b/docs/ru/prbotbuilder-sozdanie-botov.md similarity index 100% rename from docs/prbotbuilder-sozdanie-botov.md rename to docs/ru/prbotbuilder-sozdanie-botov.md diff --git a/docs/rabota-s-administratorami-bota.md b/docs/ru/rabota-s-administratorami-bota.md similarity index 100% rename from docs/rabota-s-administratorami-bota.md rename to docs/ru/rabota-s-administratorami-bota.md diff --git a/docs/rabota-s-belym-spiskom-polzovatelei.md b/docs/ru/rabota-s-belym-spiskom-polzovatelei.md similarity index 100% rename from docs/rabota-s-belym-spiskom-polzovatelei.md rename to docs/ru/rabota-s-belym-spiskom-polzovatelei.md diff --git a/docs/rabota-s-keshem.md b/docs/ru/rabota-s-keshem.md similarity index 100% rename from docs/rabota-s-keshem.md rename to docs/ru/rabota-s-keshem.md diff --git a/docs/rabota-s-poshagovymi-komandami.md b/docs/ru/rabota-s-poshagovymi-komandami.md similarity index 100% rename from docs/rabota-s-poshagovymi-komandami.md rename to docs/ru/rabota-s-poshagovymi-komandami.md diff --git a/docs/rabota-s-sobytiyami/README.md b/docs/ru/rabota-s-sobytiyami/README.md similarity index 100% rename from docs/rabota-s-sobytiyami/README.md rename to docs/ru/rabota-s-sobytiyami/README.md diff --git a/docs/rabota-s-sobytiyami/sobytiya-dlya-tipa-update-message.md b/docs/ru/rabota-s-sobytiyami/sobytiya-dlya-tipa-update-message.md similarity index 100% rename from docs/rabota-s-sobytiyami/sobytiya-dlya-tipa-update-message.md rename to docs/ru/rabota-s-sobytiyami/sobytiya-dlya-tipa-update-message.md diff --git a/docs/rabota-s-sobytiyami/sobytiya-dlya-update.md b/docs/ru/rabota-s-sobytiyami/sobytiya-dlya-update.md similarity index 100% rename from docs/rabota-s-sobytiyami/sobytiya-dlya-update.md rename to docs/ru/rabota-s-sobytiyami/sobytiya-dlya-update.md diff --git a/docs/rabota-s-sobytiyami/sobytiya-komand.md b/docs/ru/rabota-s-sobytiyami/sobytiya-komand.md similarity index 100% rename from docs/rabota-s-sobytiyami/sobytiya-komand.md rename to docs/ru/rabota-s-sobytiyami/sobytiya-komand.md diff --git a/docs/rabota-s-sobytiyami/sobytiya-logirovaniya.md b/docs/ru/rabota-s-sobytiyami/sobytiya-logirovaniya.md similarity index 100% rename from docs/rabota-s-sobytiyami/sobytiya-logirovaniya.md rename to docs/ru/rabota-s-sobytiyami/sobytiya-logirovaniya.md diff --git a/docs/shina-sobytii/README.md b/docs/ru/shina-sobytii/README.md similarity index 100% rename from docs/shina-sobytii/README.md rename to docs/ru/shina-sobytii/README.md diff --git a/docs/shina-sobytii/primer-ispolzovaniya-eventbus-na-osnove-prbackgroundtaskrunner.md b/docs/ru/shina-sobytii/primer-ispolzovaniya-eventbus-na-osnove-prbackgroundtaskrunner.md similarity index 100% rename from docs/shina-sobytii/primer-ispolzovaniya-eventbus-na-osnove-prbackgroundtaskrunner.md rename to docs/ru/shina-sobytii/primer-ispolzovaniya-eventbus-na-osnove-prbackgroundtaskrunner.md diff --git a/docs/videouroki.md b/docs/ru/videouroki.md similarity index 100% rename from docs/videouroki.md rename to docs/ru/videouroki.md