diff --git a/docs/CfProxy.md b/docs/CfProxy.md
new file mode 100644
index 0000000..59830a1
--- /dev/null
+++ b/docs/CfProxy.md
@@ -0,0 +1,32 @@
+# Cloudflare-прокси
+
+Для недоступных дата-центров можно использовать альтернативный бесплатный способ подключения — проксирование через Cloudflare. **Для работы нужен только домен**. В приложении есть домен по умолчанию, но его можно (и желательно) заменить на свой.
+
+Прокси возвращает доступ к тому, что раньше не загружалось (реакции, некоторые стикеры). Если на аккаунте без Premium не загружаются фото/видео, оставьте в блоке `DC → IP` только `4:149.154.167.220`. Если CF-прокси работает, медиа снова начнет загружаться.
+
+## Зачем мне настраивать свой домен?
+
+Cloudflare имеет лимиты на одновременное количество WS-подключений. Домен по умолчанию может перестать работать в любой момент.
+
+## Настройка своего домена
+
+1. Добавьте свой домен в Cloudflare (либо купив его напрямую у Cloudflare, либо изменив NS-серверы: https://developers.cloudflare.com/dns/zone-setups/full-setup/setup/). Домены стоят примерно 150 рублей в год, подойдёт любой.
+
+2. В `SSL/TLS` → `Overview` выставьте режим **Flexible**.
+
+3. В `DNS` → `Records` добавьте следующие `A`-записи через `+ Add Record`:
+- Name=`kws1` IPv4=`149.154.175.50`
+- Name=`kws2` IPv4=`149.154.167.51`
+- Name=`kws3` IPv4=`149.154.175.100`
+- Name=`kws4` IPv4=`149.154.167.91`
+- Name=`kws5` IPv4=`149.154.171.5`
+- Name=`kws203` IPv4=`91.105.192.100`
+
+4. **Добавьте домен в [zapret](https://github.com/Flowseal/zapret-discord-youtube/) или в любое другое ПО, так как подсеть Cloudflare может быть заблокирована (например, в России).**
+
+5. В настройках `TgWsProxy` замените домен на свой.
+
+## Благодарности
+
+- Идея: https://github.com/Nekogram/WSProxy
+- Спасибо [@UjuiUjuMandan](https://github.com/UjuiUjuMandan) за информацию.
\ No newline at end of file
diff --git a/docs/CfWorker.md b/docs/CfWorker.md
new file mode 100644
index 0000000..9ad1d59
--- /dev/null
+++ b/docs/CfWorker.md
@@ -0,0 +1,125 @@
+# Cloudflare Worker
+
+Альтернативный (полностью бесплатный, не нужно покупать домен в отличии от [CfProxy](./CfProxy.md)) способ проксирования.
+
+Прокси возвращает доступ к тому, что раньше не загружалось (реакции, некоторые стикеры). Если на аккаунте без Premium с данным способом все еще не загружаются фото/видео, оставьте в блоке `DC → IP` только `4:149.154.167.220`
+
+##
+
+1. **Добавьте в [zapret](https://github.com/Flowseal/zapret-discord-youtube/) или в любое другое ПО следующие домены:**
+```
+cloudflare.com
+cloudflare.dev
+workers.dev
+```
+2. Создайте аккаунт в [Cloudflare](https://dash.cloudflare.com/) (или войдите в существующий)
+ * **После создания аккаунта подтвердите почту с помощью письма, который вам пришел на email**
+3. Слева в панели выберите `Compute` → `Workers & Pages`
+
+
+4. Нажмите сверху справа кнопку **`Create application`** → `Start with Hello World!` → `Deploy`
+
+
+
+
+5. Сверху справа нажмите кнопку **`Edit code`**, замените код слева на тот, [что находится внизу этой страницы](./CfWorker.md#код-workerа)
+ * Если у вас не загружается код, то вы не выполнили первый пункт
+
+
+
+
+6. Нажмите сверху справа кнопку **`Deploy`**
+
+
+7. Скопируйте домен из поля справа и укажите его в настройках **Cloudflare Worker** (или через аргумент `--cfproxy-worker-domain`)
+ * Пример домена: `random-symbols-1234.username.workers.dev`
+ * **Можно указывать несколько доменов через запятую (или повторением аргумента `--cfproxy-worker-domain`)**
+
+
+
+### Код Worker'а
+```javascript
+import { connect } from "cloudflare:sockets";
+
+function toBytes(data) {
+ if (data instanceof ArrayBuffer) {
+ return new Uint8Array(data);
+ }
+ if (typeof data === "string") {
+ return new TextEncoder().encode(data);
+ }
+ if (data && typeof data.arrayBuffer === "function") {
+ return data.arrayBuffer().then((ab) => new Uint8Array(ab));
+ }
+ return new Uint8Array();
+}
+
+export default {
+ async fetch(request) {
+ if ((request.headers.get("Upgrade") || "").toLowerCase() !== "websocket") {
+ return new Response("Expected websocket", { status: 426 });
+ }
+
+ const url = new URL(request.url);
+ if (url.pathname !== "/apiws") {
+ return new Response("Not found", { status: 404 });
+ }
+
+ const dst = url.searchParams.get("dst");
+ const pair = new WebSocketPair();
+ const client = pair[0];
+ const server = pair[1];
+ server.accept();
+
+ const socket = connect({ hostname: dst, port: 443 });
+ const tcpReader = socket.readable.getReader();
+ const tcpWriter = socket.writable.getWriter();
+
+ server.addEventListener("message", async (event) => {
+ try {
+ await tcpWriter.write(await toBytes(event.data));
+ } catch {
+ try {
+ server.close(1011, "tcp write failed");
+ } catch {}
+ }
+ });
+
+ server.addEventListener("close", async () => {
+ try {
+ await tcpWriter.close();
+ } catch {}
+ try {
+ socket.close();
+ } catch {}
+ });
+
+ (async () => {
+ try {
+ while (true) {
+ const { value, done } = await tcpReader.read();
+ if (done) {
+ break;
+ }
+ if (value) {
+ server.send(value);
+ }
+ }
+ } catch {
+ } finally {
+ try {
+ server.close();
+ } catch {}
+ try {
+ tcpReader.releaseLock();
+ } catch {}
+ try {
+ socket.close();
+ } catch {}
+ }
+ })();
+
+ return new Response(null, { status: 101, webSocket: client });
+ },
+};
+```
diff --git a/docs/Funding.md b/docs/Funding.md
new file mode 100644
index 0000000..9d99ff0
--- /dev/null
+++ b/docs/Funding.md
@@ -0,0 +1,12 @@
+> [!TIP]
+>
+> ### 🎉 Поддержать меня
+>
+> **USDT (TRC20)**: `TXPnKs2Ww1RD8JN6nChFUVmi5r2hqrWjuu`
+> **BTC**: `bc1qr8vd6jelkyyry3m4mq6z5txdx4pl856fu6ss0w`
+> **ETH**: `0x1417878fdc5047E670a77748B34819b9A49C72F1`
+> **Другие монеты**: https://nowpayments.io/donation/flowseal
+
+Проект полностью бесплатен для всех.
+Однако его развитие и стабильная работа при росте числа пользователей требуют вложений.
+Буду благодарен за любую форму поддержки! Спасибо ❤️
\ No newline at end of file