瀏覽代碼

Add Admin-Controlled Client Management to Telegram Bot (#2788)

* Add feature to add clients to inbound:
- Implement buttons for adding new clients
- Handle client addition process (submission remains to be completed)
- Support for multiple languages

* update the go.mod

* feat: complete submission process for adding a client to inbounds

* - Add client variables: client_method, client_sh_password, client_tr_password
- Exclude specific inbound protocols (HTTP, WireGuard, Socks, DOKODEMO) from addclient inline button

* - customize the add client message and json for each protocol

* - handle password input rather than id for shadow and trojan protocols

* - remove add_client_as_enable button in bot

* restructrure the add client bot feature

* update all files in web/translation/

* Refactoring

* - add traffic button to add client bot feature

* - fix a mistake in the email prompt message

* - add expire data button to add client telegram process.

* Refactroring

* remove refresh button in add client

* - delete message after cancel

* - uptimize the process of adding client by deleting main message on
  getting text inputs.
nistootsin 1 周之前
父節點
當前提交
728166bd1a

+ 1 - 0
go.mod

@@ -7,6 +7,7 @@ require (
 	github.com/gin-contrib/sessions v1.0.2
 	github.com/gin-gonic/gin v1.10.0
 	github.com/goccy/go-json v0.10.5
+	github.com/google/uuid v1.6.0
 	github.com/mymmrac/telego v0.32.0
 	github.com/nicksnyder/go-i18n/v2 v2.5.1
 	github.com/op/go-logging v0.0.0-20160315200505-970db520ece7

文件差異過大導致無法顯示
+ 850 - 43
web/service/tgbot.go


+ 23 - 0
web/translation/translate.en_US.toml

@@ -582,6 +582,21 @@
 "yes" = "✅ Yes"
 "no" = "❌ No"
 
+"received_id" = "🔑📥 ID updated."
+"received_password" = "🔑📥 Password updated."
+"received_email" = "📧📥 Email updated."
+"received_comment" = "💬📥 Comment updated."
+"id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id."
+"pass_prompt" = "🔑 Default Password: {{ .ClientPassword }}\n\nEnter your password."
+"email_prompt" = "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email."
+"comment_prompt" = "💬 Default Comment: {{ .ClientComment }}\n\nEnter your Comment."
+"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!"
+"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Password: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Traffic: {{ .ClientTraffic }}\n📅 Expire Date: {{ .ClientExp }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!"
+"cancel" = "❌ Process Canceled! \n\nYou can /start again anytime. 🔄"
+"error_add_client"  = "⚠️ Error:\n\n {{ .error }}"
+"using_default_value"  = "Okay, I'll stick with the default value. 😊"
+"incorrect_input" ="Your input is not valid.\nThe phrases should be continuous without spaces.\nCorrect example: aaaaaa\nIncorrect example: aaa aaa 🚫"
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Close Keyboard"
 "cancel" = "❌ Cancel"
@@ -616,6 +631,14 @@
 "getBanLogs" = "Get Ban Logs"
 "allClients" = "All Clients"
 
+"addClient" = "Add Client"
+"submitDisable" = "Submit As Disable ✅"
+"use_default" = "🏷️ Use default"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Password"
+"change_email" = "⚙️📧 Email"
+"change_comment" = "⚙️💬 Comment"
+
 [tgbot.answers]
 "successfulOperation" = "✅ Operation successful!"
 "errorOperation" = "❗ Error in operation."

+ 25 - 0
web/translation/translate.es_ES.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Sí"
 "no" = "❌ No"
 
+"received_id" = "🔑📥 ID actualizado."
+"received_password" = "🔑📥 Contraseña actualizada."
+"received_email" = "📧📥 Correo electrónico actualizado."
+"received_comment" = "💬📥 Comentario actualizado."
+"id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID."
+"pass_prompt" = "🔑 Contraseña predeterminada: {{ .ClientPassword }}\n\nIntroduce tu contraseña."
+"email_prompt" = "📧 Correo electrónico predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo electrónico."
+"comment_prompt" = "💬 Comentario predeterminado: {{ .ClientComment }}\n\nIntroduce tu comentario."
+"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfico: {{ .ClientTraffic }}\n📅 Fecha de vencimiento: {{ .ClientExp }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a la entrada!"
+"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfico: {{ .ClientTraffic }}\n📅 Fecha de vencimiento: {{ .ClientExp }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a la entrada!"
+"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄"
+"error_add_client"  = "⚠️ Error:\n\n {{ .error }}"
+"using_default_value"  = "Está bien, me quedaré con el valor predeterminado. 😊"
+"incorrect_input" ="Tu entrada no es válida.\nLas frases deben ser continuas sin espacios.\nEjemplo correcto: aaaaaa\nEjemplo incorrecto: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Cerrar Teclado"
 "cancel" = "❌ Cancelar"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Registros de prohibición"
 "allClients" = "Todos los Clientes"
 
+"addClient" = "Añadir Cliente"
+"submitDisable" = "Enviar como Deshabilitado ✅"
+"use_default" = "🏷️ Usar predeterminado"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Contraseña"
+"change_email" = "⚙️📧 Correo electrónico"
+"change_comment" = "⚙️💬 Comentario"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ ¡Exitosa!"
 "errorOperation" = "❗ Error en la Operación."

+ 25 - 0
web/translation/translate.fa_IR.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ بله"
 "no" = "❌ خیر"
 
+"received_id" = "🔑📥 شناسه به‌روزرسانی شد."
+"received_password" = "🔑📥 رمز عبور به‌روزرسانی شد."
+"received_email" = "📧📥 ایمیل به‌روزرسانی شد."
+"received_comment" = "💬📥 نظر به‌روزرسانی شد."
+"id_prompt" = "🔑 شناسه پیش‌فرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید."
+"pass_prompt" = "🔑 رمز عبور پیش‌فرض: {{ .ClientPassword }}\n\nرمز عبور خود را وارد کنید."
+"email_prompt" = "📧 ایمیل پیش‌فرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید."
+"comment_prompt" = "💬 نظر پیش‌فرض: {{ .ClientComment }}\n\nنظر خود را وارد کنید."
+"inbound_client_data_id" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n📊 ترافیک: {{ .ClientTraffic }}\n📅 تاریخ انقضا: {{ .ClientExp }}\n💬 نظر: {{ .ClientComment }}\n\nحالا می‌توانید مشتری را به ورودی اضافه کنید!"
+"inbound_client_data_pass" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n📊 ترافیک: {{ .ClientTraffic }}\n📅 تاریخ انقضا: {{ .ClientExp }}\n💬 نظر: {{ .ClientComment }}\n\nحالا می‌توانید مشتری را به ورودی اضافه کنید!"
+"cancel" = "❌ فرآیند لغو شد! \n\nمی‌توانید هر زمان که خواستید /start را دوباره اجرا کنید. 🔄"
+"error_add_client"  = "⚠️ خطا:\n\n {{ .error }}"
+"using_default_value"  = "باشه، از مقدار پیش‌فرض استفاده می‌کنم. 😊"
+"incorrect_input" ="ورودی شما معتبر نیست.\nعبارت‌ها باید بدون فاصله باشند.\nمثال صحیح: aaaaaa\nمثال نادرست: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ بستن کیبورد"
 "cancel" = "❌ لغو"
@@ -618,6 +634,15 @@
 "getBanLogs" = "گزارش های بلوک را دریافت کنید"
 "allClients" = "همه مشتریان"
 
+"addClient" = "اضافه کردن مشتری"
+"submitDisable" = "ارسال به عنوان غیرفعال ✅"
+"use_default" = "🏷️ استفاده از پیش‌فرض"
+"change_id" = "⚙️🔑 شناسه"
+"change_password" = "⚙️🔑 رمز عبور"
+"change_email" = "⚙️📧 ایمیل"
+"change_comment" = "⚙️💬 نظر"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ انجام شد!"
 "errorOperation" = "❗ خطا در عملیات."

+ 25 - 0
web/translation/translate.id_ID.toml

@@ -583,6 +583,22 @@
 "yes" = "✅ Ya"
 "no" = "❌ Tidak"
 
+"received_id" = "🔑📥 ID diperbarui."
+"received_password" = "🔑📥 Kata sandi diperbarui."
+"received_email" = "📧📥 Email diperbarui."
+"received_comment" = "💬📥 Komentar diperbarui."
+"id_prompt" = "🔑 ID Default: {{ .ClientId }}\n\nMasukkan ID Anda."
+"pass_prompt" = "🔑 Kata Sandi Default: {{ .ClientPassword }}\n\nMasukkan kata sandi Anda."
+"email_prompt" = "📧 Email Default: {{ .ClientEmail }}\n\nMasukkan email Anda."
+"comment_prompt" = "💬 Komentar Default: {{ .ClientComment }}\n\nMasukkan komentar Anda."
+"inbound_client_data_id" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Lalu Lintas: {{ .ClientTraffic }}\n📅 Tanggal Kedaluwarsa: {{ .ClientExp }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke masuk!"
+"inbound_client_data_pass" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Lalu Lintas: {{ .ClientTraffic }}\n📅 Tanggal Kedaluwarsa: {{ .ClientExp }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke masuk!"
+"cancel" = "❌ Proses Dibatalkan! \n\nAnda dapat /start lagi kapan saja. 🔄"
+"error_add_client"  = "⚠️ Kesalahan:\n\n {{ .error }}"
+"using_default_value"  = "Oke, saya akan tetap menggunakan nilai default. 😊"
+"incorrect_input" ="Masukan Anda tidak valid.\nFrasa harus berlanjut tanpa spasi.\nContoh benar: aaaaaa\nContoh salah: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Tutup Papan Ketik"
 "cancel" = "❌ Batal"
@@ -617,6 +633,15 @@
 "getBanLogs" = "Dapatkan Log Pemblokiran"
 "allClients" = "Semua Klien"
 
+"addClient" = "Tambah Klien"
+"submitDisable" = "Kirim Sebagai Nonaktif ✅"
+"use_default" = "🏷️ Gunakan default"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Kata Sandi"
+"change_email" = "⚙️📧 Email"
+"change_comment" = "⚙️💬 Komentar"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ Operasi berhasil!"
 "errorOperation" = "❗ Kesalahan dalam operasi."

+ 25 - 0
web/translation/translate.ja_JP.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ はい"
 "no" = "❌ いいえ"
 
+"received_id" = "🔑📥 IDが更新されました。"
+"received_password" = "🔑📥 パスワードが更新されました。"
+"received_email" = "📧📥 メールが更新されました。"
+"received_comment" = "💬📥 コメントが更新されました。"
+"id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。"
+"pass_prompt" = "🔑 デフォルトパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。"
+"email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールを入力してください。"
+"comment_prompt" = "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。"
+"inbound_client_data_id" = "🔄 入力: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 期限日: {{ .ClientExp }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!"
+"inbound_client_data_pass" = "🔄 入力: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 期限日: {{ .ClientExp }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!"
+"cancel" = "❌ プロセスがキャンセルされました!\n\nいつでも /start で再開できます。 🔄"
+"error_add_client"  = "⚠️ エラー:\n\n {{ .error }}"
+"using_default_value"  = "わかりました、デフォルト値を使用します。 😊"
+"incorrect_input" ="入力が無効です。\nフレーズはスペースなしで続けて入力してください。\n正しい例: aaaaaa\n間違った例: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ キーボードを閉じる"
 "cancel" = "❌ キャンセル"
@@ -618,6 +634,15 @@
 "getBanLogs" = "禁止ログ"
 "allClients" = "すべてのクライアント"
 
+"addClient" = "クライアントを追加"
+"submitDisable" = "無効として送信 ✅"
+"use_default" = "🏷️ デフォルトを使用"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 パスワード"
+"change_email" = "⚙️📧 メール"
+"change_comment" = "⚙️💬 コメント"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ 成功!"
 "errorOperation" = "❗ 操作エラー。"

+ 25 - 0
web/translation/translate.pt_BR.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Sim"
 "no" = "❌ Não"
 
+"received_id" = "🔑📥 ID atualizado."
+"received_password" = "🔑📥 Senha atualizada."
+"received_email" = "📧📥 E-mail atualizado."
+"received_comment" = "💬📥 Comentário atualizado."
+"id_prompt" = "🔑 ID Padrão: {{ .ClientId }}\n\nDigite seu ID."
+"pass_prompt" = "🔑 Senha Padrão: {{ .ClientPassword }}\n\nDigite sua senha."
+"email_prompt" = "📧 E-mail Padrão: {{ .ClientEmail }}\n\nDigite seu e-mail."
+"comment_prompt" = "💬 Comentário Padrão: {{ .ClientComment }}\n\nDigite seu comentário."
+"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfego: {{ .ClientTraffic }}\n📅 Data de expiração: {{ .ClientExp }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
+"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Tráfego: {{ .ClientTraffic }}\n📅 Data de expiração: {{ .ClientExp }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
+"cancel" = "❌ Processo Cancelado! \n\nVocê pode iniciar novamente a qualquer momento com /start. 🔄"
+"error_add_client"  = "⚠️ Erro:\n\n {{ .error }}"
+"using_default_value"  = "Tudo bem, vou manter o valor padrão. 😊"
+"incorrect_input" ="Sua entrada não é válida.\nAs frases devem ser contínuas, sem espaços.\nExemplo correto: aaaaaa\nExemplo incorreto: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Fechar teclado"
 "cancel" = "❌ Cancelar"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Obter logs de banimento"
 "allClients" = "Todos os clientes"
 
+"addClient" = "Adicionar Cliente"
+"submitDisable" = "Enviar como Desativado ✅"
+"use_default" = "🏷️ Usar padrão"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Senha"
+"change_email" = "⚙️📧 E-mail"
+"change_comment" = "⚙️💬 Comentário"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ Operação bem-sucedida!"
 "errorOperation" = "❗ Erro na operação."

+ 25 - 0
web/translation/translate.ru_RU.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Да"
 "no" = "❌ Нет"
 
+"received_id" = "🔑📥 ID обновлён."
+"received_password" = "🔑📥 Пароль обновлён."
+"received_email" = "📧📥 Электронная почта обновлена."
+"received_comment" = "💬📥 Комментарий обновлён."
+"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID."
+"pass_prompt" = "🔑 Стандартный пароль: {{ .ClientPassword }}\n\nВведите ваш пароль."
+"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email."
+"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий."
+"inbound_client_data_id" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата истечения: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!"
+"inbound_client_data_pass" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафик: {{ .ClientTraffic }}\n📅 Дата истечения: {{ .ClientExp }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!"
+"cancel" = "❌ Процесс отменён! \n\nВы можете снова начать с /start в любое время. 🔄"
+"error_add_client"  = "⚠️ Ошибка:\n\n {{ .error }}"
+"using_default_value"  = "Хорошо, оставлю значение по умолчанию. 😊"
+"incorrect_input" ="Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Закрыть клавиатуру"
 "cancel" = "❌ Отмена"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Журнал блокировок"
 "allClients" = "Все клиенты"
 
+"addClient" = "Добавить клиента"
+"submitDisable" = "Отправить как отключенный ✅"
+"use_default" = "🏷️ Использовать по умолчанию"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Пароль"
+"change_email" = "⚙️📧 Электронная почта"
+"change_comment" = "⚙️💬 Комментарий"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ Успешно!"
 "errorOperation" = "❗ Ошибка в операции."

+ 25 - 0
web/translation/translate.tr_TR.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Evet"
 "no" = "❌ Hayır"
 
+"received_id" = "🔑📥 Kimlik güncellendi."
+"received_password" = "🔑📥 Şifre güncellendi."
+"received_email" = "📧📥 E-posta güncellendi."
+"received_comment" = "💬📥 Yorum güncellendi."
+"id_prompt" = "🔑 Varsayılan Kimlik: {{ .ClientId }}\n\nKimliğinizi girin."
+"pass_prompt" = "🔑 Varsayılan Şifre: {{ .ClientPassword }}\n\nŞifrenizi girin."
+"email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-postanızı girin."
+"comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin."
+"inbound_client_data_id" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n📊 Trafik: {{ .ClientTraffic }}\n📅 Son Kullanım Tarihi: {{ .ClientExp }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi girişe ekleyebilirsiniz!"
+"inbound_client_data_pass" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n📊 Trafik: {{ .ClientTraffic }}\n📅 Son Kullanım Tarihi: {{ .ClientExp }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi girişe ekleyebilirsiniz!"
+"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start ile yeniden başlayabilirsiniz. 🔄"
+"error_add_client"  = "⚠️ Hata:\n\n {{ .error }}"
+"using_default_value"  = "Tamam, varsayılan değeri kullanacağım. 😊"
+"incorrect_input" ="Girdiğiniz değer geçerli değil.\nKelime öbekleri boşluk olmadan devam etmelidir.\nDoğru örnek: aaaaaa\nYanlış örnek: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Klavyeyi Kapat"
 "cancel" = "❌ İptal"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Yasak Günlüklerini Al"
 "allClients" = "Tüm Müşteriler"
 
+"addClient" = "Müşteri Ekle"
+"submitDisable" = "Devre Dışı Olarak Gönder ✅"
+"use_default" = "🏷️ Varsayılanı Kullan"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Şifre"
+"change_email" = "⚙️📧 E-posta"
+"change_comment" = "⚙️💬 Yorum"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ İşlem başarılı!"
 "errorOperation" = "❗ İşlemde hata."

+ 25 - 0
web/translation/translate.uk_UA.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Так"
 "no" = "❌ Ні"
 
+"received_id" = "🔑📥 ID оновлено."
+"received_password" = "🔑📥 Пароль оновлено."
+"received_email" = "📧📥 Електронна пошта оновлена."
+"received_comment" = "💬📥 Коментар оновлено."
+"id_prompt" = "🔑 Стандартний ID: {{ .ClientId }}\n\nВведіть ваш ID."
+"pass_prompt" = "🔑 Стандартний пароль: {{ .ClientPassword }}\n\nВведіть ваш пароль."
+"email_prompt" = "📧 Стандартний email: {{ .ClientEmail }}\n\nВведіть ваш email."
+"comment_prompt" = "💬 Стандартний коментар: {{ .ClientComment }}\n\nВведіть ваш коментар."
+"inbound_client_data_id" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафік: {{ .ClientTraffic }}\n📅 Термін придатності: {{ .ClientExp }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!"
+"inbound_client_data_pass" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Трафік: {{ .ClientTraffic }}\n📅 Термін придатності: {{ .ClientExp }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!"
+"cancel" = "❌ Процес скасовано! \n\nВи можете знову розпочати, використовуючи /start у будь-який час. 🔄"
+"error_add_client"  = "⚠️ Помилка:\n\n {{ .error }}"
+"using_default_value"  = "Гаразд, залишу значення за замовчуванням. 😊"
+"incorrect_input" ="Ваш ввід невірний.\nФрази повинні бути без пробілів.\nПравильний приклад: aaaaaa\nНеправильний приклад: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Закрити клавіатуру"
 "cancel" = "❌ Скасувати"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Отримати журнали заборон"
 "allClients" = "Всі Клієнти"
 
+"addClient" = "Додати клієнта"
+"submitDisable" = "Надіслати як вимкнене ✅"
+"use_default" = "🏷️ Використовувати за замовчуванням"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Пароль"
+"change_email" = "⚙️📧 Електронна пошта"
+"change_comment" = "⚙️💬 Коментар"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ Операція успішна!"
 "errorOperation" = "❗ Помилка в роботі."

+ 25 - 0
web/translation/translate.vi_VN.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ Có"
 "no" = "❌ Không"
 
+"received_id" = "🔑📥 ID đã được cập nhật."
+"received_password" = "🔑📥 Mật khẩu đã được cập nhật."
+"received_email" = "📧📥 Email đã được cập nhật."
+"received_comment" = "💬📥 Bình luận đã được cập nhật."
+"id_prompt" = "🔑 ID mặc định: {{ .ClientId }}\n\nVui lòng nhập ID của bạn."
+"pass_prompt" = "🔑 Mật khẩu mặc định: {{ .ClientPassword }}\n\nVui lòng nhập mật khẩu của bạn."
+"email_prompt" = "📧 Email mặc định: {{ .ClientEmail }}\n\nVui lòng nhập email của bạn."
+"comment_prompt" = "💬 Bình luận mặc định: {{ .ClientComment }}\n\nVui lòng nhập bình luận của bạn."
+"inbound_client_data_id" = "🔄 Vào: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n📊 Lưu lượng: {{ .ClientTraffic }}\n📅 Ngày hết hạn: {{ .ClientExp }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào vào ngay bây giờ!"
+"inbound_client_data_pass" = "🔄 Vào: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n📊 Lưu lượng: {{ .ClientTraffic }}\n📅 Ngày hết hạn: {{ .ClientExp }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào vào ngay bây giờ!"
+"cancel" = "❌ Quá trình đã bị hủy! \n\nBạn có thể bắt đầu lại bất cứ lúc nào bằng cách nhập /start. 🔄"
+"error_add_client"  = "⚠️ Lỗi:\n\n {{ .error }}"
+"using_default_value"  = "Được rồi, tôi sẽ sử dụng giá trị mặc định. 😊"
+"incorrect_input" ="Dữ liệu bạn nhập không hợp lệ.\nCác chuỗi phải liền mạch và không có dấu cách.\nVí dụ đúng: aaaaaa\nVí dụ sai: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ Đóng Bàn Phím"
 "cancel" = "❌ Hủy"
@@ -618,6 +634,15 @@
 "getBanLogs" = "Cấm nhật ký"
 "allClients" = "Tất cả Khách hàng"
 
+"addClient" = "Thêm Khách Hàng"
+"submitDisable" = "Gửi Dưới Dạng Tắt ✅"
+"use_default" = "🏷️ Sử dụng mặc định"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 Mật khẩu"
+"change_email" = "⚙️📧 Email"
+"change_comment" = "⚙️💬 Bình luận"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ Thành công!"
 "errorOperation" = "❗ Lỗi Trong Quá Trình Thực Hiện."

+ 25 - 0
web/translation/translate.zh_CN.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ 是的"
 "no" = "❌ 没有"
 
+"received_id" = "🔑📥 ID 已更新。"
+"received_password" = "🔑📥 密码已更新。"
+"received_email" = "📧📥 邮箱已更新。"
+"received_comment" = "💬📥 评论已更新。"
+"id_prompt" = "🔑 默认 ID: {{ .ClientId }}\n\n请输入您的 ID。"
+"pass_prompt" = "🔑 默认密码: {{ .ClientPassword }}\n\n请输入您的密码。"
+"email_prompt" = "📧 默认邮箱: {{ .ClientEmail }}\n\n请输入您的邮箱。"
+"comment_prompt" = "💬 默认评论: {{ .ClientComment }}\n\n请输入您的评论。"
+"inbound_client_data_id" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 邮箱: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 过期日期: {{ .ClientExp }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到入站!"
+"inbound_client_data_pass" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 邮箱: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 过期日期: {{ .ClientExp }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到入站!"
+"cancel" = "❌ 进程已取消!\n\n您可以随时使用 /start 重新开始。 🔄"
+"error_add_client"  = "⚠️ 错误:\n\n {{ .error }}"
+"using_default_value"  = "好的,我会使用默认值。 😊"
+"incorrect_input" ="您的输入无效。\n短语应连续输入,不能有空格。\n正确示例: aaaaaa\n错误示例: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ 关闭键盘"
 "cancel" = "❌ 取消"
@@ -618,6 +634,15 @@
 "getBanLogs" = "禁止日志"
 "allClients" = "所有客户"
 
+"addClient" = "添加客户"
+"submitDisable" = "提交为禁用 ✅"
+"use_default" = "🏷️ 使用默认"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 密码"
+"change_email" = "⚙️📧 邮箱"
+"change_comment" = "⚙️💬 评论"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ 成功!"
 "errorOperation" = "❗ 操作错误。"

+ 25 - 0
web/translation/translate.zh_TW.toml

@@ -584,6 +584,22 @@
 "yes" = "✅ 是的"
 "no" = "❌ 沒有"
 
+"received_id" = "🔑📥 ID 已更新。"
+"received_password" = "🔑📥 密碼已更新。"
+"received_email" = "📧📥 電子郵件已更新。"
+"received_comment" = "💬📥 評論已更新。"
+"id_prompt" = "🔑 預設 ID: {{ .ClientId }}\n\n請輸入您的 ID。"
+"pass_prompt" = "🔑 預設密碼: {{ .ClientPassword }}\n\n請輸入您的密碼。"
+"email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。"
+"comment_prompt" = "💬 預設評論: {{ .ClientComment }}\n\n請輸入您的評論。"
+"inbound_client_data_id" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日: {{ .ClientExp }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶新增至入站!"
+"inbound_client_data_pass" = "🔄 入站: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n📊 流量: {{ .ClientTraffic }}\n📅 到期日: {{ .ClientExp }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶新增至入站!"
+"cancel" = "❌ 程序已取消!\n\n您可以隨時使用 /start 重新開始。 🔄"
+"error_add_client"  = "⚠️ 錯誤:\n\n {{ .error }}"
+"using_default_value"  = "好的,我會使用預設值。 😊"
+"incorrect_input" ="您的輸入無效。\n短語應連續輸入,不能有空格。\n正確示例: aaaaaa\n錯誤示例: aaa aaa 🚫"
+
+
 [tgbot.buttons]
 "closeKeyboard" = "❌ 關閉鍵盤"
 "cancel" = "❌ 取消"
@@ -618,6 +634,15 @@
 "getBanLogs" = "禁止日誌"
 "allClients" = "所有客戶"
 
+"addClient" = "新增客戶"
+"submitDisable" = "提交為停用 ✅"
+"use_default" = "🏷️ 使用預設"
+"change_id" = "⚙️🔑 ID"
+"change_password" = "⚙️🔑 密碼"
+"change_email" = "⚙️📧 電子郵件"
+"change_comment" = "⚙️💬 評論"
+
+
 [tgbot.answers]
 "successfulOperation" = "✅ 成功!"
 "errorOperation" = "❗ 操作錯誤。"

部分文件因文件數量過多而無法顯示