diff --git a/site/docs/es/README.md b/site/docs/es/README.md index 91c135f92..684c7ec56 100644 --- a/site/docs/es/README.md +++ b/site/docs/es/README.md @@ -100,8 +100,8 @@ bot.start();
-© 2021-2024 · grammY soporta Telegram Bot API 7.3 que fue [liberada](https://core.telegram.org/bots/api#may-6-2024) el 6 de Mayo del 2024. -(Última novedad: Teclados en línea en los chats de negocios) +© 2021-2024 · grammY soporta Telegram Bot API 7.4 que fue [liberada](https://core.telegram.org/bots/api#may-28-2024) el 28 de Mayo del 2024. +(Última novedad: Estrellas de Telegram)
diff --git a/site/docs/es/guide/filter-queries.md b/site/docs/es/guide/filter-queries.md index 3a9f4c3cd..86f5bcfc3 100644 --- a/site/docs/es/guide/filter-queries.md +++ b/site/docs/es/guide/filter-queries.md @@ -198,10 +198,10 @@ Algunas de ellas son un poco avanzadas, así que no dudes en pasar a la [siguien Puedes utilizar la siguiente consulta de filtro para recibir actualizaciones de estado sobre tu bot. ```ts -bot.on("my_chat_member"); // iniciar, detener, unirse o abandonar +bot.on("my_chat_member"); // bloquear, desbloquear, unirse o abandonar ``` -En los chats privados, esto se activa cuando el bot se inicia o se detiene. +En los chats privados, se activa cuando el bot es bloqueado o desbloqueado. En los grupos, esto se dispara cuando el bot es añadido o eliminado. Ahora puedes inspeccionar `ctx.myChatMember` para saber qué ha pasado exactamente. diff --git a/site/docs/es/hosting/comparison.md b/site/docs/es/hosting/comparison.md index 2c1abba21..d92c23f7b 100644 --- a/site/docs/es/hosting/comparison.md +++ b/site/docs/es/hosting/comparison.md @@ -73,6 +73,7 @@ Consulta el [tutorial](./vps) sobre cómo alojar bots de grammY en un VPS. | Hetzner Cloud | €4.15 | ~42 ms :de: | 1 vCPU, 2 GB RAM, 20 GB SSD, 20 TB | | IONOS VPS | €1 o $2 | 15 ms :de: Baden-Baden | 1 vCPU, 0.5 GB RAM, 8 GB SSD | | Scaleway | €~7 | | 2 cores, 2 GB RAM, 20 GB SSD | +| MVPS | €4 | 6-9 ms :de: Germany | 1 core, 2 GB RAM, 25 GB SSD, 2 TB | ## Explicaciones sobre las unidades diff --git a/site/docs/es/plugins/i18n.md b/site/docs/es/plugins/i18n.md index a656487e4..753f797ee 100644 --- a/site/docs/es/plugins/i18n.md +++ b/site/docs/es/plugins/i18n.md @@ -626,6 +626,21 @@ bot.command("start", async (ctx) => { }); ``` +::: warning Posibles problemas de formato +Por defecto, Fluent utiliza marcas de aislamiento Unicode para las interpolaciones. + +Si utiliza variables de posición dentro de etiquetas o entidades, tener las marcas de aislamiento puede dar lugar a un formato incorrecto (por ejemplo, texto sin formato en lugar del enlace esperado o una etiqueta). + +Para solucionarlo, utilice las siguientes opciones: + +```ts +const i18n = new I18n({ + fluentBundleOptions: { useIsolating: false }, +}); +``` + +::: + ## Añadir traducciones Hay tres métodos principales para cargar traducciones. diff --git a/site/docs/es/plugins/menu.md b/site/docs/es/plugins/menu.md index f1d418559..6d6e7dad0 100644 --- a/site/docs/es/plugins/menu.md +++ b/site/docs/es/plugins/menu.md @@ -91,6 +91,7 @@ bot.start(); ::: > Asegúrese de instalar todos los menús antes de otros middleware, especialmente antes de los middleware que utilizan datos de consulta de devolución de llamada. +> Además, si utiliza una configuración personalizada para `allowed_updates`, recuerde incluir actualizaciones `callback_query`. Naturalmente, si está utilizando un [tipo de contexto personalizado](../guide/context#personalizacion-del-objeto-de-contexto), puede pasarlo a `Menu` también. diff --git a/site/docs/guide/filter-queries.md b/site/docs/guide/filter-queries.md index 277be2a0d..692c04943 100644 --- a/site/docs/guide/filter-queries.md +++ b/site/docs/guide/filter-queries.md @@ -198,10 +198,10 @@ Some of them are a little advanced, so feel free to move on to the [next section You can use the following filter query to receive status updates about your bot. ```ts -bot.on("my_chat_member"); // start, stop, join, or leave +bot.on("my_chat_member"); // block, unblock, join, or leave ``` -In private chats, this triggers when the bot is started or stopped. +In private chats, this triggers when the bot is blocked or unblocked. In groups, this triggers when the bot is added or removed. You can now inspect `ctx.myChatMember` to figure out what exactly happened. diff --git a/site/docs/guide/introduction.md b/site/docs/guide/introduction.md index a4d192a58..cbc7572c1 100644 --- a/site/docs/guide/introduction.md +++ b/site/docs/guide/introduction.md @@ -3,7 +3,7 @@ A Telegram bot is a special user account that is automated by a program. Anyone can create a Telegram bot, the only prerequisite is that you know a little bit of coding. -> If you already know how create bots, head over to [Getting Started](./getting-started)! +> If you already know how to create bots, head over to [Getting Started](./getting-started)! grammY is a library that makes it super simple to write such a bot. diff --git a/site/docs/hosting/comparison.md b/site/docs/hosting/comparison.md index ce99cb5d6..4499648b5 100644 --- a/site/docs/hosting/comparison.md +++ b/site/docs/hosting/comparison.md @@ -73,6 +73,7 @@ Check out the [tutorial](./vps) on how to host grammY bots on a VPS. | Hetzner Cloud | €4.15 | ~42 ms :de: | 1 vCPU, 2 GB RAM, 20 GB SSD, 20 TB | | IONOS VPS | €1 or $2 | 15 ms :de: Baden-Baden | 1 vCPU, 0.5 GB RAM, 8 GB SSD | | Scaleway | €~7 | | 2 cores, 2 GB RAM, 20 GB SSD | +| MVPS | €4 | 6-9 ms :de: Germany | 1 core, 2 GB RAM, 25 GB SSD, 2 TB | ## Unit Explanations diff --git a/site/docs/id/README.md b/site/docs/id/README.md index 52e470f6b..13a6930ee 100644 --- a/site/docs/id/README.md +++ b/site/docs/id/README.md @@ -102,8 +102,8 @@ Berhasil! :tada:
-© 2021-2024 · grammY mendukung API Bot Telegram versi 7.3 yang [dirilis](https://core.telegram.org/bots/api#may-6-2024) pada tanggal 6 Mei 2024. -(Fitur yang disorot: Keyboard Inline di Chat Bisnis) +© 2021-2024 · grammY mendukung API Bot Telegram versi 7.4 yang [dirilis](https://core.telegram.org/bots/api#may-28-2024) pada tanggal 28 Mei 2024. +(Fitur yang disorot: Telegram Stars)
diff --git a/site/docs/id/guide/filter-queries.md b/site/docs/id/guide/filter-queries.md index 80947828f..919870874 100644 --- a/site/docs/id/guide/filter-queries.md +++ b/site/docs/id/guide/filter-queries.md @@ -200,11 +200,11 @@ Beberapa diantaranya merupakan fitur tingkat lanjut, silahkan baca [materi berik Kamu bisa menggunakan filter query berikut untuk menerima status update mengenai bot-mu. ```ts -bot.on("my_chat_member"); // start, stop, join, atau leave +bot.on("my_chat_member"); // diblokir, blokir dibuka, bergabung, atau keluar ``` -Filter tadi akan terpicu saat bot dimulai atau distop di chat pribadi. -Kalau di grup, ia akan terpicu saat bot ditambahkan atau dikeluarkan. +Filter di atas akan terpicu di chat pribadi, baik saat bot diblokir maupun saat blokirnya dibuka. +Jika di grup, ia akan terpicu saat bot ditambahkan atau dikeluarkan. Kamu bisa memeriksa `ctx.myChatMember` untuk mencari tahu apa yang sebenarnya terjadi. Hati-hati! diff --git a/site/docs/id/hosting/comparison.md b/site/docs/id/hosting/comparison.md index 7142516ed..0924f7d4d 100644 --- a/site/docs/id/hosting/comparison.md +++ b/site/docs/id/hosting/comparison.md @@ -73,6 +73,7 @@ Lihat tutorial pemasangan bot ke sebuah VPS [berikut](./vps). | Hetzner Cloud | €4.15 | ~42 ms :de: | 1 vCPU, 2 GB RAM, 20 GB SSD, 20 TB | | IONOS VPS | €1 atau $2 | 15 ms :de: Baden-Baden | 1 vCPU, 0.5 GB RAM, 8 GB SSD | | Scaleway | €~7 | | 2 core, 2 GB RAM, 20 GB SSD | +| MVPS | €4 | 6-9 ms :de: Jerman | 1 core, 2 GB RAM, 25 GB SSD, 2 TB | ## Penjelasan Satuan diff --git a/site/docs/id/plugins/i18n.md b/site/docs/id/plugins/i18n.md index 843e7389d..f49dcc9d3 100644 --- a/site/docs/id/plugins/i18n.md +++ b/site/docs/id/plugins/i18n.md @@ -620,6 +620,21 @@ bot.command("start", async (ctx) => { }); ``` +::: warning Potensi Masalah Pemformatan +Umumnya, Fluent menggunakan penanda [_Unicode Isolation_](https://github.com/projectfluent/fluent.js/wiki/Unicode-Isolation) untuk proses interpolasi. + +Penanda tersebut dapat menghasilkan masalah pemformatan jika kamu menggunakan placeables di dalam suatu tag atau entity (contohnya, placeables akan di-render menjadi text biasa, alih-alih menjadi link atau cashtag seperti yang kita inginkan). + +Untuk mengatasinya, matikan opsi `useIsolating` melalui cara ini: + +```ts +const i18n = new I18n({ + fluentBundleOptions: { useIsolating: false }, +}); +``` + +::: + ## Menambahkan Terjemahan Kita bisa memuat terjemahan dengan tiga cara. diff --git a/site/docs/id/plugins/menu.md b/site/docs/id/plugins/menu.md index 1f7398a3e..c8b312783 100644 --- a/site/docs/id/plugins/menu.md +++ b/site/docs/id/plugins/menu.md @@ -90,6 +90,7 @@ bot.start(); ::: > Pastikan semua menu dipasang sebelum middleware, khususnya sebelum middleware yang menggunakan data callback query. +> Selain itu, jika kamu menggunakan pengaturan khusus untuk `allowed_updates`, jangan lupa untuk menyertakan update `callback_query`-nya. Jika kamu menggunakan [custom context type](../guide/context#memodifikasi-object-context), kamu juga bisa memasangnya ke `Menu`. diff --git a/site/docs/plugins/i18n.md b/site/docs/plugins/i18n.md index e7a71ce0c..f58db5c66 100644 --- a/site/docs/plugins/i18n.md +++ b/site/docs/plugins/i18n.md @@ -617,6 +617,21 @@ bot.command("start", async (ctx) => { }); ``` +::: warning Potential Formatting Issues +By default, Fluent uses Unicode isolation marks for interpolations. + +If you use placeables inside tags or entities, having the isolation marks might result in incorrect formatting (e.g., plain text instead of an expected link or a cashtag). + +To fix this, use the following options: + +```ts +const i18n = new I18n({ + fluentBundleOptions: { useIsolating: false }, +}); +``` + +::: + ## Adding Translations There are three main methods to load translations. diff --git a/site/docs/plugins/menu.md b/site/docs/plugins/menu.md index d3afe0cee..1e86682e8 100644 --- a/site/docs/plugins/menu.md +++ b/site/docs/plugins/menu.md @@ -91,6 +91,7 @@ bot.start(); ::: > Make sure that you install all menus before other middleware, especially before middleware that uses callback query data. +> Also, if you use a custom configuration for `allowed_updates`, remember to include `callback_query` updates. Naturally, if you are using a [custom context type](../guide/context#customizing-the-context-object), you can pass it to `Menu` too. diff --git a/site/docs/uk/README.md b/site/docs/uk/README.md index 897200916..9b76b6995 100644 --- a/site/docs/uk/README.md +++ b/site/docs/uk/README.md @@ -99,8 +99,8 @@ bot.start();
-© 2021-2024 · grammY підтримує Telegram Bot API 7.3, який був [випущений](https://core.telegram.org/bots/api#may-6-2024) 6-го травня 2024 року. -Остання зміна: вбудовані клавіатури в бізнес-чатах. +© 2021-2024 · grammY підтримує Telegram Bot API 7.4, який був [випущений](https://core.telegram.org/bots/api#may-28-2024) 28-го травня 2024 року. +Остання зміна: Telegram Stars.
diff --git a/site/docs/uk/guide/filter-queries.md b/site/docs/uk/guide/filter-queries.md index 60dcc5011..4c3e419cd 100644 --- a/site/docs/uk/guide/filter-queries.md +++ b/site/docs/uk/guide/filter-queries.md @@ -198,10 +198,10 @@ bot Ви можете використовувати наступний запит фільтрування, щоб отримувати оновлення статусу свого бота. ```ts -bot.on("my_chat_member"); // запущений, зупинений, доданий або видалений +bot.on("my_chat_member"); // заблокований, розблокований, доданий або видалений ``` -У приватних чатах це спрацьовує, коли бот запускається або зупиняється. +У приватних чатах це спрацьовує, коли бот блокується або розблоковується. У групах це спрацьовує, коли бот додається або видаляється. Тепер ви можете перевірити `ctx.myChatMember`, щоб визначити, що саме сталося. diff --git a/site/docs/uk/hosting/comparison.md b/site/docs/uk/hosting/comparison.md index 698e15300..e92e93419 100644 --- a/site/docs/uk/hosting/comparison.md +++ b/site/docs/uk/hosting/comparison.md @@ -73,6 +73,7 @@ next: false | Hetzner Cloud | 4.15 € | ~42 мс :de: | 1 vCPU, 2 ГБ RAM, 20 ГБ SSD, 20 ТБ | | IONOS VPS | 1 € або 2 $ | 15 мс :de: Баден-Баден | 1 vCPU, 0.5 ГБ RAM, 8 ГБ SSD | | Scaleway | ~7 € | | 2 ядра, 2 ГБ RAM, 20 ГБ SSD | +| MVPS | 4 € | 6-9 ms :de: Німеччина | 1 ядро, 2 ГБ RAM, 25 ГБ SSD, 2 ТБ | ## Одиниці вимірювання diff --git a/site/docs/uk/plugins/i18n.md b/site/docs/uk/plugins/i18n.md index dad3a97ab..f18e82fe4 100644 --- a/site/docs/uk/plugins/i18n.md +++ b/site/docs/uk/plugins/i18n.md @@ -617,6 +617,21 @@ bot.command("start", async (ctx) => { }); ``` +::: warning Потенційні проблеми з форматуванням +Типово Fluent використовує для інтерполяції розділові знаки Unicode. + +Якщо ви використовуєте змінні підстановки всередині тегів або сутностей, наявність ізоляційних знаків може призвести до неправильного форматування, наприклад, звичайний текст замість очікуваного посилання або кештега. + +Щоб виправити це, скористайтеся наступними налаштуваннями: + +```ts +const i18n = new I18n({ + fluentBundleOptions: { useIsolating: false }, +}); +``` + +::: + ## Додавання перекладів Існує три основні способи завантаження перекладів. diff --git a/site/docs/uk/plugins/menu.md b/site/docs/uk/plugins/menu.md index bf3136a23..505d72cd8 100644 --- a/site/docs/uk/plugins/menu.md +++ b/site/docs/uk/plugins/menu.md @@ -91,6 +91,7 @@ bot.start(); ::: > Переконайтеся, що ви встановили всі меню перед іншими проміжними обробниками, особливо перед проміжними обробниками, які використовують дані запиту зворотного виклику. +> Крім того, якщо ви використовуєте власну конфігурацію для `allowed_updates`, не забудьте включити оновлення `callback_query`. Звісно, якщо ви використовуєте [власний тип контексту](../guide/context#налаштування-обʼєкта-контексту), ви можете передати його до `Menu`. diff --git a/site/docs/zh/README.md b/site/docs/zh/README.md index bc9dba500..9bb226a6b 100644 --- a/site/docs/zh/README.md +++ b/site/docs/zh/README.md @@ -100,8 +100,8 @@ bot.start();
-© 2021-2024 · grammY 支持 Telegram Bot API 7.3,该 API 于 2024 年 5 月 6 日 [发布](https://core.telegram.org/bots/api#may-6-2024)。 -(新增: 商务聊天中的 inline keyboard) +© 2021-2024 · grammY 支持 Telegram Bot API 7.4,该 API 于 2024 年 5 月 28 日 [发布](https://core.telegram.org/bots/api#may-28-2024)。 +(最新亮点: Telegram Stars)
diff --git a/site/docs/zh/guide/filter-queries.md b/site/docs/zh/guide/filter-queries.md index a12388e61..108d23b18 100644 --- a/site/docs/zh/guide/filter-queries.md +++ b/site/docs/zh/guide/filter-queries.md @@ -198,10 +198,10 @@ bot 你可以使用下面的过滤查询来接收你的 bot 的状态更新。 ```ts -bot.on("my_chat_member"); // 开始, 停止, 加入, 或者离开 +bot.on("my_chat_member"); // 封禁,取消封禁,加入,或者离开 ``` -在私人聊天中,这将在 bot 开始或停止时触发。 +在私人聊天中,这将在 bot 封禁或取消封禁时触发。 在群组中,这将在 bot 加入或移除时触发。 你可以检查 `ctx.myChatMember` 来确定到底发生了什么。 diff --git a/site/docs/zh/hosting/comparison.md b/site/docs/zh/hosting/comparison.md index d5ce5b8a3..2ef772b98 100644 --- a/site/docs/zh/hosting/comparison.md +++ b/site/docs/zh/hosting/comparison.md @@ -38,22 +38,22 @@ Serverless 意味着你不控制运行 bot 的单个机器。 Serverless 和 PaaS 有一个缺点,默认情况下不会为你提供持久存储,例如本地文件系统。 相反,如果你需要永久存储数据,你通常必须单独拥有一个数据库并连接到它。 -| 名字 | 最低价格 | 价格 | 限制 | Node.js | Deno | Web | 备注 | -| ---------------------- | -------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| Deta | 免费 | 暂时没有付费计划 | 没有特别的限制 | ✅ | ✅ | ✅ | Deno 由 [自定义应用](https://deta.space/docs/en/build/quick-starts/custom) 支持 ([示例](https://github.com/deta/starters/tree/main/deno-app))。 | -| Deno Deploy | 免费 | $20/月,包含 5M req 和 100 GB 网络流量; $2/1M req, $0.5/GB 网络流量 | [1M req/mo, 100 GB/mo, 10 ms CPU-time limit](https://deno.com/deploy/pricing) | ❌ | ✅ | ❌ | | -| Fly | 免费 | $1.94/月订阅,包含一个共享 CPU 和 256 MB 内存, $0.02/GB 网络流量 | [3 shared-cpu-1x 256mb VMs, 160GB/mo, 3GB storage](https://fly.io/docs/about/pricing/) | ✅ | ✅ | ❓ | | -| DigitalOcean Functions | 免费 | $1.85/100K GB-s | [90K GB-s/mo](https://docs.digitalocean.com/products/functions/details/pricing/) | ✅ | ❌ | ❓ | | -| Cloudflare Workers | 免费 | $5/10M req | [100K req/day, 10 ms CPU-time limit](https://workers.cloudflare.com/) | ❌ | [✅](https://denoflare.dev/) | ✅ | | -| Vercel | 免费 | $20/月的订阅 | [Unlimited invocations, 100 GB-h, 10 s time limit](https://vercel.com/pricing) | [✅](https://vercel.com/docs/functions/serverless-functions/runtimes/node-js) | [✅](https://github.com/vercel-community/deno) | [✅](https://vercel.com/docs/frameworks) | 不适用于非网站建设? | -| Scaleway Functions | 免费 | €0.15/1M req, €1.2/100K GB-s | [1M requests, 400K GB-s/mo](https://www.scaleway.com/en/pricing/?tags=serverless-functions-serverlessfunctions) | ❓ | ❓ | ❓ | | -| Scaleway Containers | 免费 | €0.10/100K GB-s, €1.0/100K vCPU-s | [400K GB-s, 200K vCPU-s/mo](https://www.scaleway.com/en/pricing/?tags=serverless-containers-serverlesscontainers) | ❓ | ❓ | ❓ | | -| Vercel Edge Functions | 免费 | $20/月的订阅, 包含 500K 请求 | [100K req/day](https://vercel.com/pricing) | [✅](https://vercel.com/docs/functions/edge-functions/edge-runtime#compatible-node.js-modules) | ❓ | [✅](https://vercel.com/templates/edge-functions) | | -| Cyclic.sh | 免费 | 每个 app $1/月,$0.50/100K | [10K req/mo](https://docs.cyclic.sh/overview/limits) | ✅ | ❓ | ❓ | | -| serverless.com | 免费 | | | ❓ | ❓ | ❓ | | -| Heroku | $5 | $5 for 1,000 [dyno hours](https://devcenter.heroku.com/articles/usage-and-billing#dyno-usage-and-costs)/mo | [512MB RAM, 30分钟不活跃后休眠](https://www.heroku.com/pricing) | ✅ | ✅ | ❓ | Deno is supported by a [third-party buildpack](https://github.com/chibat/heroku-buildpack-deno). | -| DigitalOcean Apps | $5 | | | ❓ | ❓ | ❓ | 未测试 | -| Fastly Compute@Edge | | | | ❓ | ❓ | ❓ | | +| 名字 | 最低价格 | 价格 | 限制 | Node.js | Deno | Web | 备注 | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| Deta | 免费 | 暂时没有付费计划 | 没有特别的限制 | ✅ | ✅ | ✅ | Deno 由 [自定义应用](https://deta.space/docs/en/build/quick-starts/custom) 支持 ([示例](https://github.com/deta/starters/tree/main/deno-app))。 | +| Deno Deploy | 免费 | $20/月,包含 5M req 和 100 GB 网络流量;$2/1M req, $0.5/GB 网络流量 | [1M req/mo, 100 GB/mo, 10ms CPU 时间限制](https://deno.com/deploy/pricing) | ❌ | ✅ | ❌ | | +| Fly | 免费 | $1.94/月订阅,包含一个共享 CPU 和 256 MB 内存, $0.02/GB 网络流量 | [3 shared-cpu-1x 256MB VMs, 160GB/mo, 3GB 存储](https://fly.io/docs/about/pricing/) | ✅ | ✅ | ❓ | | +| DigitalOcean Functions | 免费 | $1.85/100K GB-s | [90K GB-s/mo](https://docs.digitalocean.com/products/functions/details/pricing/) | ✅ | ❌ | ❓ | | +| Cloudflare Workers | 免费 | $5/10M req | [100K req/day, 10ms CPU 时间限制](https://workers.cloudflare.com/) | ❌ | [✅](https://denoflare.dev/) | ✅ | | +| Vercel | 免费 | $20/月的订阅 | [无限次调用, 100 GB-h, 10s 时间限制](https://vercel.com/pricing) | [✅](https://vercel.com/docs/functions/serverless-functions/runtimes/node-js) | [✅](https://github.com/vercel-community/deno) | [✅](https://vercel.com/docs/frameworks) | 不适用于非网站建设? | +| Scaleway Functions | 免费 | €0.15/1M req, €1.2/100K GB-s | [1M req, 400K GB-s/mo](https://www.scaleway.com/en/pricing/?tags=serverless-functions-serverlessfunctions) | ❓ | ❓ | ❓ | | +| Scaleway Containers | 免费 | €0.10/100K GB-s, €1.0/100K vCPU-s | [400K GB-s, 200K vCPU-s/mo](https://www.scaleway.com/en/pricing/?tags=serverless-containers-serverlesscontainers) | ❓ | ❓ | ❓ | | +| Vercel Edge Functions | 免费 | $20/月的订阅, 包含 500K 请求 | [100K req/day](https://vercel.com/pricing) | [✅](https://vercel.com/docs/functions/edge-functions/edge-runtime#compatible-node.js-modules) | ❓ | [✅](https://vercel.com/templates/edge-functions) | | +| Cyclic.sh | 免费 | 每个 app $1/月,$0.50/100K | [10K req/mo](https://docs.cyclic.sh/overview/limits) | ✅ | ❓ | ❓ | | +| serverless.com | 免费 | | | ❓ | ❓ | ❓ | | +| Heroku | $5 | $5,包含 1,000 [dyno hours](https://devcenter.heroku.com/articles/usage-and-billing#dyno-usage-and-costs)/mo | [512MB RAM, 30分钟不活跃后休眠](https://www.heroku.com/pricing) | ✅ | ✅ | ❓ | Deno 由 [第三方构建包](https://github.com/chibat/heroku-buildpack-deno) 支持。 | +| DigitalOcean Apps | $5 | | | ❓ | ❓ | ❓ | 未测试 | +| Fastly Compute@Edge | | | | ❓ | ❓ | ❓ | | ### VPS @@ -73,6 +73,7 @@ Serverless 和 PaaS 有一个缺点,默认情况下不会为你提供持久存 | Hetzner Cloud | €4.15 | ~42 ms :de: | 1 vCPU, 2 GB RAM, 20 GB SSD, 20 TB | | IONOS VPS | €1 or $2 | 15 ms :de: Baden-Baden | 1 vCPU, 0.5 GB RAM, 8 GB SSD | | Scaleway | €~7 | | 2 cores, 2 GB RAM, 20 GB SSD | +| MVPS | €4 | 6-9 ms :de: 德国 | 1 core, 2 GB RAM, 25 GB SSD, 2 TB | ## 单位解释 diff --git a/site/docs/zh/plugins/i18n.md b/site/docs/zh/plugins/i18n.md index b38c9e8c3..efe8f0d2b 100644 --- a/site/docs/zh/plugins/i18n.md +++ b/site/docs/zh/plugins/i18n.md @@ -560,7 +560,8 @@ bot.command("start", async (ctx) => { }); ``` -现在你可以使用 `/start` 来启动你的 bot,它应该呈现以下消息: +现在你可以使用 `/start` 来启动你的 bot。 +它应该呈现以下消息: ```:no-line-numbers Hi there! @@ -606,13 +607,30 @@ const i18n = new I18n({ return { name: ctx.from?.first_name ?? "" }; }, }); + bot.use(i18n); + bot.command("start", async (ctx) => { // 可以不需要指定,直接使用 `name` await ctx.reply(ctx.t("welcome")); }); ``` +::: warning 潜在的格式问题 +默认情况下,Fluent 使用 Unicode 隔离标记进行插值。 + +如果你在标签或实体内使用 placeable,则有隔离标记就可能会导致格式不正确(例如,纯文本而不是预期的链接或 cashtag)。 + +要解决此问题,请使用以下选项: + +```ts +const i18n = new I18n({ + fluentBundleOptions: { useIsolating: false }, +}); +``` + +::: + ## 添加翻译 这里有三中主要的方法来加载翻译。 diff --git a/site/docs/zh/plugins/menu.md b/site/docs/zh/plugins/menu.md index 55c8847a6..943964f99 100644 --- a/site/docs/zh/plugins/menu.md +++ b/site/docs/zh/plugins/menu.md @@ -91,6 +91,7 @@ bot.start(); ::: > 请确保在其他中间件之前安装所有菜单,特别是在使用回调查询数据的中间件之前。 +> 另外,如果你对 `allowed_updates` 使用自定义配置,请记得加上 `callback_query` update。 当然,如果你使用 [自定义的上下文类型](../guide/context#定制你的上下文对象),你也可以传递给 `Menu`。