From 7eb62855ac27195b696cc43cfb500242a3d382cb Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Sat, 15 Mar 2025 02:36:38 +0330 Subject: [PATCH 1/9] 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 --- web/service/tgbot.go | 303 ++++++++++++++++++++++----- web/translation/translate.en_US.toml | 16 ++ web/translation/translate.es_ES.toml | 16 ++ web/translation/translate.fa_IR.toml | 16 ++ web/translation/translate.id_ID.toml | 17 ++ web/translation/translate.ja_JP.toml | 16 ++ web/translation/translate.pt_BR.toml | 16 ++ web/translation/translate.ru_RU.toml | 16 ++ web/translation/translate.tr_TR.toml | 16 ++ web/translation/translate.uk_UA.toml | 16 ++ web/translation/translate.vi_VN.toml | 16 ++ web/translation/translate.zh_CN.toml | 16 ++ web/translation/translate.zh_TW.toml | 16 ++ 13 files changed, 446 insertions(+), 50 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 9e217124..5189dc13 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -1,6 +1,8 @@ package service import ( + "crypto/rand" + "math/big" "embed" "errors" "fmt" @@ -20,8 +22,7 @@ import ( "x-ui/web/locale" "x-ui/xray" - "slices" - + "github.com/google/uuid" "github.com/mymmrac/telego" th "github.com/mymmrac/telego/telegohandler" tu "github.com/mymmrac/telego/telegoutil" @@ -30,14 +31,33 @@ import ( ) var ( - bot *telego.Bot - botHandler *th.BotHandler - adminIds []int64 - isRunning bool - hostname string - hashStorage *global.HashStorage + bot *telego.Bot + botHandler *th.BotHandler + adminIds []int64 + isRunning bool + hostname string + hashStorage *global.HashStorage + handler *th.Handler + + // clients data to adding new client + receiver_inbound_ID int + client_Id string + client_Flow string + client_Email string + client_LimitIP int + client_TotalGB int64 + client_ExpiryTime int64 + client_Enable bool + client_TgID string + client_SubID string + client_Comment string + client_Reset int ) + +var userStates = make(map[int64]string) + + type LoginStatus byte const ( @@ -46,6 +66,8 @@ const ( EmptyTelegramUserID = int64(0) ) +const charset = "abcdefghijklmnopqrstuvwxyz0123456789" + type Tgbot struct { inboundService InboundService settingService SettingService @@ -54,6 +76,7 @@ type Tgbot struct { lastStatus *Status } + func (t *Tgbot) NewTgbot() *Tgbot { return new(Tgbot) } @@ -223,36 +246,83 @@ func (t *Tgbot) OnReceive() { botHandler, _ = th.NewBotHandler(bot, updates) botHandler.HandleMessage(func(_ *telego.Bot, message telego.Message) { + delete(userStates, message.Chat.ID) t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.keyboardClosed"), tu.ReplyKeyboardRemove()) }, th.TextEqual(t.I18nBot("tgbot.buttons.closeKeyboard"))) botHandler.HandleMessage(func(_ *telego.Bot, message telego.Message) { + delete(userStates, message.Chat.ID) t.answerCommand(&message, message.Chat.ID, checkAdmin(message.From.ID)) }, th.AnyCommand()) botHandler.HandleCallbackQuery(func(_ *telego.Bot, query telego.CallbackQuery) { + delete(userStates,query.Message.GetChat().ID) t.answerCallback(&query, checkAdmin(query.From.ID)) }, th.AnyCallbackQueryWithMessage()) botHandler.HandleMessage(func(_ *telego.Bot, message telego.Message) { - if message.UsersShared != nil { - if checkAdmin(message.From.ID) { - for _, sharedUser := range message.UsersShared.Users { - userID := sharedUser.UserID - needRestart, err := t.inboundService.SetClientTelegramUserID(message.UsersShared.RequestID, userID) - if needRestart { - t.xrayService.SetToNeedRestart() + if userState, exists := userStates[message.Chat.ID]; exists { + switch userState { + case "awaiting_id": + client_Id = message.Text + userStates[message.Chat.ID] = "awaiting_email" + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_id", "ClientId=="+client_Id), tu.ReplyKeyboardRemove()) + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) + case "awaiting_email": + client_Email = message.Text + userStates[message.Chat.ID] = "awaiting_comment" + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_email", "ClientEmail=="+client_Email), tu.ReplyKeyboardRemove()) + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_comment"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment), cancel_btn_markup) + case "awaiting_comment": + client_Comment = message.Text + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_comment", "ClientComment=="+client_Comment), tu.ReplyKeyboardRemove()) + message_text := t.I18nBot("tgbot.messages.client_data", "ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(message.Chat.ID, message_text, inlineKeyboard) + delete(userStates, message.Chat.ID) + } + + } else { + if message.UsersShared != nil { + if checkAdmin(message.From.ID) { + for _, sharedUser := range message.UsersShared.Users { + userID := sharedUser.UserID + needRestart, err := t.inboundService.SetClientTelegramUserID(message.UsersShared.RequestID, userID) + if needRestart { + t.xrayService.SetToNeedRestart() + } + output := "" + if err != nil { + output += t.I18nBot("tgbot.messages.selectUserFailed") + } else { + output += t.I18nBot("tgbot.messages.userSaved") + } + t.SendMsgToTgbot(message.Chat.ID, output, tu.ReplyKeyboardRemove()) } - output := "" - if err != nil { - output += t.I18nBot("tgbot.messages.selectUserFailed") - } else { - output += t.I18nBot("tgbot.messages.userSaved") - } - t.SendMsgToTgbot(message.Chat.ID, output, tu.ReplyKeyboardRemove()) + } else { + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.noResult"), tu.ReplyKeyboardRemove()) } - } else { - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.noResult"), tu.ReplyKeyboardRemove()) } } }, th.AnyMessage()) @@ -344,6 +414,16 @@ func (t *Tgbot) sendResponse(chatId int64, msg string, onlyMessage, isAdmin bool } } + +func (t *Tgbot) randomLowerAndNum(length int) string { + bytes := make([]byte, length) + for i := range bytes { + randomIndex, _ := rand.Int(rand.Reader, big.NewInt(int64(len(charset)))) + bytes[i] = charset[randomIndex.Int64()] + } + return string(bytes) +} + func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool) { chatId := callbackQuery.Message.GetChat().ID @@ -838,7 +918,23 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool return } t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseClient", "Inbound=="+inbound.Remark), clients) - + case "add_client_to": + inboundId := dataArray[1] + inboundIdInt, err := strconv.Atoi(inboundId) + if err != nil { + t.sendCallbackAnswerTgBot(callbackQuery.ID, err.Error()) + return + } + receiver_inbound_ID = inboundIdInt + inbound, err := t.inboundService.GetInbound(inboundIdInt) + if err != nil { + t.sendCallbackAnswerTgBot(callbackQuery.ID, err.Error()) + return + } + + message := t.I18nBot("tgbot.messages.inbound_client_data", "InboundRemark=="+inbound.Remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + t.addClient(chatId, message) } return } else { @@ -892,11 +988,82 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool case "commands": t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.commands")) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.commands.helpAdminCommands")) + case "add_client": + // assign default values to clients variables + client_Id = uuid.New().String() // button + client_Flow = "" + client_Email = t.randomLowerAndNum(8) // button + client_LimitIP = 0 + client_TotalGB = 0 + client_ExpiryTime = 0 + client_Enable = true // button + client_TgID = "" + client_SubID = t.randomLowerAndNum(16) + client_Comment = "" // button + client_Reset = 0 // button + + inbounds, err := t.getInboundsAddClient() + if err != nil { + t.sendCallbackAnswerTgBot(callbackQuery.ID, err.Error()) + return + } + t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.addClient")) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseInbound"), inbounds) + case "add_client_ch_default": + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_id"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Id),cancel_btn_markup) + userStates[chatId] = "awaiting_id" + case "default_client_id": + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email),cancel_btn_markup) + userStates[chatId] = "awaiting_email" + case "default_client_email": + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_comment"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment),inlineKeyboard) + userStates[chatId] = "awaiting_comment" + case "default_client_comment": + message_text := t.I18nBot("tgbot.messages.client_data", "ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + + t.SendMsgToTgbot(chatId, message_text, inlineKeyboard) + delete(userStates, chatId) + case "add_client_cancel": + delete(userStates, chatId) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.cancel"), tu.ReplyKeyboardRemove()) } } func checkAdmin(tgId int64) bool { - return slices.Contains(adminIds, tgId) + for _, adminId := range adminIds { + if adminId == tgId { + return true + } + } + return false } func (t *Tgbot) SendAnswer(chatId int64, msg string, isAdmin bool) { @@ -915,7 +1082,10 @@ func (t *Tgbot) SendAnswer(chatId int64, msg string, isAdmin bool) { tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.commands")).WithCallbackData(t.encodeQuery("commands")), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.onlines")).WithCallbackData(t.encodeQuery("onlines")), + ), + tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.allClients")).WithCallbackData(t.encodeQuery("get_inbounds")), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.addClient")).WithCallbackData(t.encodeQuery("add_client")), ), // TODOOOOOOOOOOOOOO: Add restart button here. ) @@ -1161,39 +1331,45 @@ func (t *Tgbot) getInboundUsages() string { } return info } - -func (t *Tgbot) getInbounds() (*telego.InlineKeyboardMarkup, error) { +func (t *Tgbot) getInboundsKeyboard(action string) (*telego.InlineKeyboardMarkup, error) { inbounds, err := t.inboundService.GetAllInbounds() - var buttons []telego.InlineKeyboardButton - if err != nil { logger.Warning("GetAllInbounds run failed:", err) return nil, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) - } else { - if len(inbounds) > 0 { - for _, inbound := range inbounds { - status := "❌" - if inbound.Enable { - status = "✅" - } - buttons = append(buttons, tu.InlineKeyboardButton(fmt.Sprintf("%v - %v", inbound.Remark, status)).WithCallbackData(t.encodeQuery("get_clients "+strconv.Itoa(inbound.Id)))) - } - } else { - logger.Warning("GetAllInbounds run failed:", err) - return nil, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) - } - } - cols := 0 - if len(buttons) < 6 { - cols = 3 - } else { + + if len(inbounds) == 0 { + logger.Warning("No inbounds found") + return nil, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + + var buttons []telego.InlineKeyboardButton + for _, inbound := range inbounds { + status := "❌" + if inbound.Enable { + status = "✅" + } + callbackData := t.encodeQuery(fmt.Sprintf("%s %d", action, inbound.Id)) + buttons = append(buttons, tu.InlineKeyboardButton(fmt.Sprintf("%v - %v", inbound.Remark, status)).WithCallbackData(callbackData)) + } + + cols := 3 + if len(buttons) >= 6 { cols = 2 } + keyboard := tu.InlineKeyboardGrid(tu.InlineKeyboardCols(cols, buttons...)) return keyboard, nil } +func (t *Tgbot) getInbounds() (*telego.InlineKeyboardMarkup, error) { + return t.getInboundsKeyboard("get_clients") +} + +func (t *Tgbot) getInboundsAddClient() (*telego.InlineKeyboardMarkup, error) { + return t.getInboundsKeyboard("add_client_to") +} + func (t *Tgbot) getInboundClients(id int) (*telego.InlineKeyboardMarkup, error) { inbound, err := t.inboundService.GetInbound(id) if err != nil { @@ -1484,6 +1660,28 @@ func (t *Tgbot) searchClient(chatId int64, email string, messageID ...int) { } } + +func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { + + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_default")).WithCallbackData("add_client_ch_default"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + if len(messageID) > 0 { + t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard) + } else { + t.SendMsgToTgbot(chatId, msg, inlineKeyboard) + } +} + func (t *Tgbot) searchInbound(chatId int64, remark string) { inbounds, err := t.inboundService.SearchInbounds(remark) if err != nil { @@ -1689,7 +1887,12 @@ func (t *Tgbot) notifyExhausted() { } func int64Contains(slice []int64, item int64) bool { - return slices.Contains(slice, item) + for _, s := range slice { + if s == item { + return true + } + } + return false } func (t *Tgbot) onlineClients(chatId int64, messageID ...int) { @@ -1848,4 +2051,4 @@ func (t *Tgbot) editMessageTgBot(chatId int64, messageID int, text string, inlin if _, err := bot.EditMessageText(¶ms); err != nil { logger.Warning(err) } -} +} \ No newline at end of file diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index f06e2cad..96b6b8a9 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -572,6 +572,16 @@ "yes" = "✅ Yes" "no" = "❌ No" +"received_id" = "🔑📥 Received ID: {{ .ClientId }}" +"received_email" = "📧📥 Received Email: {{ .ClientEmail }}" +"received_comment" = "💬📥 Received Comment: {{ .ClientComment }}" +"id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id." +"email_prompt" = "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email." +"comment_prompt" = "💬 Default Comment: {{ .ClientComment }}\n\nEnter your Comment." +"inbound_client_data" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" +"cancel" = "❌ Process Canceled! \n\nYou can /start again anytime. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Close Keyboard" "cancel" = "❌ Cancel" @@ -606,6 +616,12 @@ "getBanLogs" = "Get Ban Logs" "allClients" = "All Clients" +"addClient" = "Add Client" +"submitEnable" = "Submit As Enable ✅" +"submitDisable" = "Submit As Disable 🚫" +"use_default" = "🏷️ Use default" +"change_default" = "🔄⚙️ Change Default" + [tgbot.answers] "successfulOperation" = "✅ Operation successful!" "errorOperation" = "❗ Error in operation." diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index 81ba9c20..b9081d90 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -572,6 +572,16 @@ "yes" = "✅ Sí" "no" = "❌ No" +"received_id" = "🔑📥 ID recibido: {{ .ClientId }}" +"received_email" = "📧📥 Correo recibido: {{ .ClientEmail }}" +"received_comment" = "💬📥 Comentario recibido: {{ .ClientComment }}" +"id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID." +"email_prompt" = "📧 Correo predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo." +"comment_prompt" = "💬 Comentario predeterminado: {{ .ClientComment }}\n\nIntroduce tu comentario." +"inbound_client_data" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Cerrar Teclado" "cancel" = "❌ Cancelar" @@ -606,6 +616,12 @@ "getBanLogs" = "Registros de prohibición" "allClients" = "Todos los Clientes" +"addClient" = "Añadir Cliente" +"submitEnable" = "Enviar como Habilitado ✅" +"submitDisable" = "Enviar como Deshabilitado 🚫" +"use_default" = "🏷️ Usar por defecto" +"change_default" = "🔄⚙️ Cambiar por defecto" + [tgbot.answers] "successfulOperation" = "✅ ¡Exitosa!" "errorOperation" = "❗ Error en la Operación." diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index a50bf960..75057f07 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -572,6 +572,16 @@ "yes" = "✅ بله" "no" = "❌ خیر" +"received_id" = "🔑📥 شناسه دریافت شده: {{ .ClientId }}" +"received_email" = "📧📥 ایمیل دریافت شده: {{ .ClientEmail }}" +"received_comment" = "💬📥 کامنت دریافت شده: {{ .ClientComment }}" +"id_prompt" = "🔑 شناسه پیش‌فرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید." +"email_prompt" = "📧 ایمیل پیش‌فرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید." +"comment_prompt" = "💬 کامنت پیش‌فرض: {{ .ClientComment }}\n\nکامنت خود را وارد کنید." +"inbound_client_data" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"client_data" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"cancel" = "❌ فرآیند لغو شد! \n\nشما می‌توانید هر زمان دوباره /start کنید. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ بستن کیبورد" "cancel" = "❌ لغو" @@ -606,6 +616,12 @@ "getBanLogs" = "گزارش های بلوک را دریافت کنید" "allClients" = "همه مشتریان" +"addClient" = "افزودن مشتری" +"submitEnable" = "ارسال به عنوان فعال ✅" +"submitDisable" = "ارسال به عنوان غیرفعال 🚫" +"use_default" = "🏷️ استفاده از پیش‌فرض" +"change_default" = "🔄⚙️ تغییر پیش‌فرض" + [tgbot.answers] "successfulOperation" = "✅ انجام شد!" "errorOperation" = "❗ خطا در عملیات." diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 95222495..84e8fb22 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -571,6 +571,17 @@ "yes" = "✅ Ya" "no" = "❌ Tidak" + +"received_id" = "🔑📥 ID diterima: {{ .ClientId }}" +"received_email" = "📧📥 Email diterima: {{ .ClientEmail }}" +"received_comment" = "💬📥 Komentar diterima: {{ .ClientComment }}" +"id_prompt" = "🔑 ID default: {{ .ClientId }}\n\nMasukkan ID Anda." +"email_prompt" = "📧 Email default: {{ .ClientEmail }}\n\nMasukkan email Anda." +"comment_prompt" = "💬 Komentar default: {{ .ClientComment }}\n\nMasukkan komentar Anda." +"inbound_client_data" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" +"cancel" = "❌ Proses dibatalkan! \n\nAnda bisa /start lagi kapan saja. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Tutup Papan Ketik" "cancel" = "❌ Batal" @@ -605,6 +616,12 @@ "getBanLogs" = "Dapatkan Log Pemblokiran" "allClients" = "Semua Klien" +"addClient" = "Tambah Klien" +"submitEnable" = "Kirim Sebagai Aktif ✅" +"submitDisable" = "Kirim Sebagai Nonaktif 🚫" +"use_default" = "🏷️ Gunakan Default" +"change_default" = "🔄⚙️ Ubah Default" + [tgbot.answers] "successfulOperation" = "✅ Operasi berhasil!" "errorOperation" = "❗ Kesalahan dalam operasi." diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index 1b116564..102ea429 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -572,6 +572,16 @@ "yes" = "✅ はい" "no" = "❌ いいえ" +"received_id" = "🔑📥 受け取ったID: {{ .ClientId }}" +"received_email" = "📧📥 受け取ったメール: {{ .ClientEmail }}" +"received_comment" = "💬📥 受け取ったコメント: {{ .ClientComment }}" +"id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。" +"email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。" +"comment_prompt" = "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。" +"inbound_client_data" = "🔄 受信データ: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" +"cancel" = "❌ 処理がキャンセルされました! \n\nいつでも/startでやり直せます。 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ キーボードを閉じる" "cancel" = "❌ キャンセル" @@ -606,6 +616,12 @@ "getBanLogs" = "禁止ログ" "allClients" = "すべてのクライアント" +"addClient" = "クライアントを追加" +"submitEnable" = "有効として送信 ✅" +"submitDisable" = "無効として送信 🚫" +"use_default" = "🏷️ デフォルトを使用" +"change_default" = "🔄⚙️ デフォルトを変更" + [tgbot.answers] "successfulOperation" = "✅ 成功!" "errorOperation" = "❗ 操作エラー。" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index 24b40474..f3a2bb9f 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -572,6 +572,16 @@ "yes" = "✅ Sim" "no" = "❌ Não" +"received_id" = "🔑📥 ID recebido: {{ .ClientId }}" +"received_email" = "📧📥 E-mail recebido: {{ .ClientEmail }}" +"received_comment" = "💬📥 Comentário recebido: {{ .ClientComment }}" +"id_prompt" = "🔑 ID padrão: {{ .ClientId }}\n\nDigite seu ID." +"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" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Fechar teclado" "cancel" = "❌ Cancelar" @@ -606,6 +616,12 @@ "getBanLogs" = "Obter logs de banimento" "allClients" = "Todos os clientes" +"addClient" = "Adicionar Cliente" +"submitEnable" = "Enviar como Ativado ✅" +"submitDisable" = "Enviar como Desativado 🚫" +"use_default" = "🏷️ Usar padrão" +"change_default" = "🔄⚙️ Alterar Padrão" + [tgbot.answers] "successfulOperation" = "✅ Operação bem-sucedida!" "errorOperation" = "❗ Erro na operação." diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 86150ff8..4cd2abe3 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -572,6 +572,16 @@ "yes" = "✅ Да" "no" = "❌ Нет" +"received_id" = "🔑📥 Полученный ID: {{ .ClientId }}" +"received_email" = "📧📥 Полученный email: {{ .ClientEmail }}" +"received_comment" = "💬📥 Полученный комментарий: {{ .ClientComment }}" +"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID." +"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email." +"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий." +"inbound_client_data" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" +"cancel" = "❌ Процесс отменен! \n\nВы можете снова запустить /start в любое время. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Закрыть клавиатуру" "cancel" = "❌ Отмена" @@ -606,6 +616,12 @@ "getBanLogs" = "Логи блокировок" "allClients" = "Все клиенты" +"addClient" = "Добавить клиента" +"submitEnable" = "Отправить как включено ✅" +"submitDisable" = "Отправить как отключено 🚫" +"use_default" = "🏷️ Использовать по умолчанию" +"change_default" = "🔄⚙️ Изменить по умолчанию" + [tgbot.answers] "successfulOperation" = "✅ Успешно!" "errorOperation" = "❗ Ошибка в операции." diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index f033e440..e5ee0a95 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -572,6 +572,16 @@ "yes" = "✅ Evet" "no" = "❌ Hayır" +"received_id" = "🔑📥 Alınan ID: {{ .ClientId }}" +"received_email" = "📧📥 Alınan E-posta: {{ .ClientEmail }}" +"received_comment" = "💬📥 Alınan Yorum: {{ .ClientComment }}" +"id_prompt" = "🔑 Varsayılan ID: {{ .ClientId }}\n\nID'nizi girin." +"email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-posta adresinizi girin." +"comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin." +"inbound_client_data" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" +"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start komutunu tekrar verebilirsiniz. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Klavyeyi Kapat" "cancel" = "❌ İptal" @@ -606,6 +616,12 @@ "getBanLogs" = "Yasak Günlüklerini Al" "allClients" = "Tüm Müşteriler" +"addClient" = "Müşteri Ekle" +"submitEnable" = "Etkin Olarak Gönder ✅" +"submitDisable" = "Devre Dışı Olarak Gönder 🚫" +"use_default" = "🏷️ Varsayılanı Kullan" +"change_default" = "🔄⚙️ Varsayılanı Değiştir" + [tgbot.answers] "successfulOperation" = "✅ İşlem başarılı!" "errorOperation" = "❗ İşlemde hata." diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 29bf6c63..c3d66b54 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -572,6 +572,16 @@ "yes" = "✅ Так" "no" = "❌ Ні" +"received_id" = "🔑📥 Отриманий ID: {{ .ClientId }}" +"received_email" = "📧📥 Отриманий Email: {{ .ClientEmail }}" +"received_comment" = "💬📥 Отриманий коментар: {{ .ClientComment }}" +"id_prompt" = "🔑 За замовчуванням ID: {{ .ClientId }}\n\nВведіть ваш ID." +"email_prompt" = "📧 За замовчуванням Email: {{ .ClientEmail }}\n\nВведіть ваш email." +"comment_prompt" = "💬 За замовчуванням коментар: {{ .ClientComment }}\n\nВведіть ваш коментар." +"inbound_client_data" = "🔄 Вхідні дані: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" +"cancel" = "❌ Процес скасовано! \n\nВи можете /start знову в будь-який час. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Закрити клавіатуру" "cancel" = "❌ Скасувати" @@ -606,6 +616,12 @@ "getBanLogs" = "Отримати журнали заборон" "allClients" = "Всі Клієнти" +"addClient" = "Додати клієнта" +"submitEnable" = "Надіслати як увімкнено ✅" +"submitDisable" = "Надіслати як вимкнено 🚫" +"use_default" = "🏷️ Використати за замовчуванням" +"change_default" = "🔄⚙️ Змінити за замовчуванням" + [tgbot.answers] "successfulOperation" = "✅ Операція успішна!" "errorOperation" = "❗ Помилка в роботі." diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index ec9f9485..2b450ab3 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -572,6 +572,16 @@ "yes" = "✅ Có" "no" = "❌ Không" +"received_id" = "🔑📥 ID nhận được: {{ .ClientId }}" +"received_email" = "📧📥 Email nhận được: {{ .ClientEmail }}" +"received_comment" = "💬📥 Nhận được bình luận: {{ .ClientComment }}" +"id_prompt" = "🔑 ID mặc định: {{ .ClientId }}\n\nNhập ID của bạn." +"email_prompt" = "📧 Email mặc định: {{ .ClientEmail }}\n\nNhập email của bạn." +"comment_prompt" = "💬 Bình luận mặc định: {{ .ClientComment }}\n\nNhập bình luận của bạn." +"inbound_client_data" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" +"cancel" = "❌ Quá trình bị hủy! \n\nBạn có thể /start lại bất cứ lúc nào. 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ Đóng Bàn Phím" "cancel" = "❌ Hủy" @@ -606,6 +616,12 @@ "getBanLogs" = "Cấm nhật ký" "allClients" = "Tất cả Khách hàng" +"addClient" = "Thêm Khách Hàng" +"submitEnable" = "Gửi Dưới Dạng Bật ✅" +"submitDisable" = "Gửi Dưới Dạng Tắt 🚫" +"use_default" = "🏷️ Sử dụng mặc định" +"change_default" = "🔄⚙️ Thay đổi mặc định" + [tgbot.answers] "successfulOperation" = "✅ Thành công!" "errorOperation" = "❗ Lỗi Trong Quá Trình Thực Hiện." diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index a4a0dc4e..dd60be9e 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -572,6 +572,16 @@ "yes" = "✅ 是的" "no" = "❌ 没有" +"received_id" = "🔑📥 接收到的ID: {{ .ClientId }}" +"received_email" = "📧📥 接收到的邮件: {{ .ClientEmail }}" +"received_comment" = "💬📥 接收到的评论: {{ .ClientComment }}" +"id_prompt" = "🔑 默认ID: {{ .ClientId }}\n\n请输入您的ID。" +"email_prompt" = "📧 默认邮件: {{ .ClientEmail }}\n\n请输入您的邮箱。" +"comment_prompt" = "💬 默认评论: {{ .ClientComment }}\n\n请输入您的评论。" +"inbound_client_data" = "🔄 入站数据: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" +"cancel" = "❌ 过程已取消! \n\n您可以随时 /start 重新开始。 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ 关闭键盘" "cancel" = "❌ 取消" @@ -606,6 +616,12 @@ "getBanLogs" = "禁止日志" "allClients" = "所有客户" +"addClient" = "添加客户" +"submitEnable" = "提交为启用 ✅" +"submitDisable" = "提交为禁用 🚫" +"use_default" = "🏷️ 使用默认" +"change_default" = "🔄⚙️ 更改默认" + [tgbot.answers] "successfulOperation" = "✅ 成功!" "errorOperation" = "❗ 操作错误。" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index f12f6d5b..8dd8d96c 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -572,6 +572,16 @@ "yes" = "✅ 是的" "no" = "❌ 沒有" +"received_id" = "🔑📥 接收到的ID: {{ .ClientId }}" +"received_email" = "📧📥 接收到的電子郵件: {{ .ClientEmail }}" +"received_comment" = "💬📥 接收到的評論: {{ .ClientComment }}" +"id_prompt" = "🔑 預設ID: {{ .ClientId }}\n\n請輸入您的ID。" +"email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。" +"comment_prompt" = "💬 預設評論: {{ .ClientComment }}\n\n請輸入您的評論。" +"inbound_client_data" = "🔄 進站數據: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" +"client_data" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" +"cancel" = "❌ 處理已取消! \n\n您隨時可以 /start 再次開始。 🔄" + [tgbot.buttons] "closeKeyboard" = "❌ 關閉鍵盤" "cancel" = "❌ 取消" @@ -606,6 +616,12 @@ "getBanLogs" = "禁止日誌" "allClients" = "所有客戶" +"addClient" = "新增客戶" +"submitEnable" = "提交為啟用 ✅" +"submitDisable" = "提交為停用 🚫" +"use_default" = "🏷️ 使用預設" +"change_default" = "🔄⚙️ 更改預設" + [tgbot.answers] "successfulOperation" = "✅ 成功!" "errorOperation" = "❗ 操作錯誤。" From ae0b98c87eca638b0d8ca3fe51c41a0c7215693d Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Sat, 15 Mar 2025 03:00:18 +0330 Subject: [PATCH 2/9] update the go.mod --- go.mod | 1 + 1 file changed, 1 insertion(+) diff --git a/go.mod b/go.mod index fe0f83f6..02515227 100644 --- a/go.mod +++ b/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 From 698c1be3bb1a9b75c95738711e9a0194c4564313 Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Sun, 16 Mar 2025 03:49:23 +0330 Subject: [PATCH 3/9] feat: complete submission process for adding a client to inbounds --- web/service/tgbot.go | 70 +++++++++++++++++++++++++--- web/translation/translate.en_US.toml | 2 + web/translation/translate.es_ES.toml | 2 + web/translation/translate.fa_IR.toml | 2 + web/translation/translate.id_ID.toml | 2 + web/translation/translate.ja_JP.toml | 2 + web/translation/translate.pt_BR.toml | 2 + web/translation/translate.ru_RU.toml | 2 + web/translation/translate.tr_TR.toml | 2 + web/translation/translate.uk_UA.toml | 2 + web/translation/translate.vi_VN.toml | 2 + web/translation/translate.zh_CN.toml | 2 + web/translation/translate.zh_TW.toml | 2 + 13 files changed, 88 insertions(+), 6 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 5189dc13..dc99a24d 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -2,10 +2,10 @@ package service import ( "crypto/rand" - "math/big" "embed" "errors" "fmt" + "math/big" "net" "net/url" "os" @@ -919,6 +919,19 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool } t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseClient", "Inbound=="+inbound.Remark), clients) case "add_client_to": + // assign default values to clients variables + client_Id = uuid.New().String() + client_Flow = "" + client_Email = t.randomLowerAndNum(8) + client_LimitIP = 0 + client_TotalGB = 0 + client_ExpiryTime = 0 + client_Enable = true + client_TgID = "" + client_SubID = t.randomLowerAndNum(16) + client_Comment = "" + client_Reset = 0 + inboundId := dataArray[1] inboundIdInt, err := strconv.Atoi(inboundId) if err != nil { @@ -990,17 +1003,17 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.commands.helpAdminCommands")) case "add_client": // assign default values to clients variables - client_Id = uuid.New().String() // button + client_Id = uuid.New().String() client_Flow = "" - client_Email = t.randomLowerAndNum(8) // button + client_Email = t.randomLowerAndNum(8) client_LimitIP = 0 client_TotalGB = 0 client_ExpiryTime = 0 - client_Enable = true // button + client_Enable = true client_TgID = "" client_SubID = t.randomLowerAndNum(16) - client_Comment = "" // button - client_Reset = 0 // button + client_Comment = "" + client_Reset = 0 inbounds, err := t.getInboundsAddClient() if err != nil { @@ -1054,9 +1067,54 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool case "add_client_cancel": delete(userStates, chatId) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.cancel"), tu.ReplyKeyboardRemove()) + case "add_client_submit_enable": + inboundService := &InboundService{} + _, err := inboundService.SubmitAddClient() + if err != nil { + errorMessage := fmt.Sprintf("%v", err) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) + } else { + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.success_add_client"), tu.ReplyKeyboardRemove()) + } + case "add_client_submit_disable": + client_Enable = false + inboundService := &InboundService{} + _, err := inboundService.SubmitAddClient() + if err != nil { + errorMessage := fmt.Sprintf("%v", err) + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) + } else { + t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.success_add_client"), tu.ReplyKeyboardRemove()) + } } } + +func (s *InboundService) SubmitAddClient() (bool, error) { + jsonString := fmt.Sprintf(`{"clients": [{ + "id": "%s", + "flow": "%s", + "email": "%s", + "limitIp": %d, + "totalGB": %d, + "expiryTime": %d, + "enable": %t, + "tgId": "%s", + "subId": "%s", + "comment": "%s", + "reset": %d +}]}`, client_Id, client_Flow, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + + + newInbound := &model.Inbound{ + Id: receiver_inbound_ID, + Settings: jsonString, + } + + + return s.AddInboundClient(newInbound) +} + func checkAdmin(tgId int64) bool { for _, adminId := range adminIds { if adminId == tgId { diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index 96b6b8a9..ae4974dc 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\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 }}" +"success_add_client" = "🏆 Success! You can now modify it using the 'All Clients' inline button." [tgbot.buttons] "closeKeyboard" = "❌ Close Keyboard" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index b9081d90..64b813ce 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" "cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄" +"error_add_client" = "⚠️ Error:\n\n {{ .error }}" +"success_add_client" = "🏆 ¡Éxito! Ahora puedes modificarlo usando el botón en línea 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Cerrar Teclado" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 75057f07..0dee6dc3 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" "client_data" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" "cancel" = "❌ فرآیند لغو شد! \n\nشما می‌توانید هر زمان دوباره /start کنید. 🔄" +"error_add_client" = "⚠️ خطا:\n\n {{ .error }}" +"success_add_client" = "🏆 موفقیت! اکنون می‌توانید آن را با استفاده از دکمه 'All Clients' تغییر دهید." [tgbot.buttons] "closeKeyboard" = "❌ بستن کیبورد" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 84e8fb22..70fb9c46 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" "cancel" = "❌ Proses dibatalkan! \n\nAnda bisa /start lagi kapan saja. 🔄" +"error_add_client" = "⚠️ Kesalahan:\n\n {{ .error }}" +"success_add_client" = "🏆 Sukses! Sekarang Anda dapat mengubahnya menggunakan tombol 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Tutup Papan Ketik" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index 102ea429..f70790e1 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 受信データ: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" "cancel" = "❌ 処理がキャンセルされました! \n\nいつでも/startでやり直せます。 🔄" +"error_add_client" = "⚠️ エラー:\n\n {{ .error }}" +"success_add_client" = "🏆 成功!「All Clients」ボタンを使って変更できます。" [tgbot.buttons] "closeKeyboard" = "❌ キーボードを閉じる" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index f3a2bb9f..3365bd40 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" "cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄" +"error_add_client" = "⚠️ Erro:\n\n {{ .error }}" +"success_add_client" = "🏆 Sucesso! Agora você pode modificá-lo usando o botão 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Fechar teclado" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 4cd2abe3..59366148 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" "cancel" = "❌ Процесс отменен! \n\nВы можете снова запустить /start в любое время. 🔄" +"error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}" +"success_add_client" = "🏆 Успех! Теперь вы можете изменить его с помощью кнопки 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Закрыть клавиатуру" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index e5ee0a95..3e0fdc12 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" "cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start komutunu tekrar verebilirsiniz. 🔄" +"error_add_client" = "⚠️ Hata:\n\n {{ .error }}" +"success_add_client" = "🏆 Başarılı! Şimdi 'All Clients' düğmesini kullanarak düzenleyebilirsiniz." [tgbot.buttons] "closeKeyboard" = "❌ Klavyeyi Kapat" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index c3d66b54..66b5217c 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Вхідні дані: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" "cancel" = "❌ Процес скасовано! \n\nВи можете /start знову в будь-який час. 🔄" +"error_add_client" = "⚠️ Помилка:\n\n {{ .error }}" +"success_add_client" = "🏆 Успіх! Тепер ви можете змінити його за допомогою кнопки 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Закрити клавіатуру" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 2b450ab3..5131c9f8 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" "cancel" = "❌ Quá trình bị hủy! \n\nBạn có thể /start lại bất cứ lúc nào. 🔄" +"error_add_client" = "⚠️ Lỗi:\n\n {{ .error }}" +"success_add_client" = "🏆 Thành công! Bây giờ bạn có thể chỉnh sửa nó bằng nút 'All Clients'." [tgbot.buttons] "closeKeyboard" = "❌ Đóng Bàn Phím" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index dd60be9e..d56fd43e 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 入站数据: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" "cancel" = "❌ 过程已取消! \n\n您可以随时 /start 重新开始。 🔄" +"error_add_client" = "⚠️ 错误:\n\n {{ .error }}" +"success_add_client" = "🏆 成功!现在您可以使用“All Clients”按钮进行修改。" [tgbot.buttons] "closeKeyboard" = "❌ 关闭键盘" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 8dd8d96c..2938c7c8 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -581,6 +581,8 @@ "inbound_client_data" = "🔄 進站數據: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" "cancel" = "❌ 處理已取消! \n\n您隨時可以 /start 再次開始。 🔄" +"error_add_client" = "⚠️ 錯誤:\n\n {{ .error }}" +"success_add_client" = "🏆 成功!現在您可以使用「All Clients」按鈕進行修改。" [tgbot.buttons] "closeKeyboard" = "❌ 關閉鍵盤" From 27fca74d10c72475c80f4eb20d84d4f30ed75970 Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Mon, 17 Mar 2025 02:03:28 +0330 Subject: [PATCH 4/9] - Add client variables: client_method, client_sh_password, client_tr_password - Exclude specific inbound protocols (HTTP, WireGuard, Socks, DOKODEMO) from addclient inline button --- web/service/tgbot.go | 76 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index dc99a24d..00c74100 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -3,6 +3,7 @@ package service import ( "crypto/rand" "embed" + "encoding/base64" "errors" "fmt" "math/big" @@ -51,7 +52,12 @@ var ( client_TgID string client_SubID string client_Comment string - client_Reset int + client_Reset int + client_security string + client_ShPassword string + client_TrPassword string + client_method string + ) @@ -424,6 +430,17 @@ func (t *Tgbot) randomLowerAndNum(length int) string { return string(bytes) } + +func (t *Tgbot) randomShadowSocksPassword() string { + array := make([]byte, 32) + _, err := rand.Read(array) + if err != nil { + return t.randomLowerAndNum(32) + } + return base64.StdEncoding.EncodeToString(array) +} + + func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool) { chatId := callbackQuery.Message.GetChat().ID @@ -931,6 +948,10 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool client_SubID = t.randomLowerAndNum(16) client_Comment = "" client_Reset = 0 + client_security="auto" + client_ShPassword=t.randomShadowSocksPassword() + client_TrPassword=t.randomLowerAndNum(10) + client_method="" inboundId := dataArray[1] inboundIdInt, err := strconv.Atoi(inboundId) @@ -1014,6 +1035,9 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool client_SubID = t.randomLowerAndNum(16) client_Comment = "" client_Reset = 0 + client_ShPassword=t.randomShadowSocksPassword() + client_TrPassword=t.randomLowerAndNum(10) + client_method="" inbounds, err := t.getInboundsAddClient() if err != nil { @@ -1389,7 +1413,7 @@ func (t *Tgbot) getInboundUsages() string { } return info } -func (t *Tgbot) getInboundsKeyboard(action string) (*telego.InlineKeyboardMarkup, error) { +func (t *Tgbot) getInbounds() (*telego.InlineKeyboardMarkup, error) { inbounds, err := t.inboundService.GetAllInbounds() if err != nil { logger.Warning("GetAllInbounds run failed:", err) @@ -1407,11 +1431,11 @@ func (t *Tgbot) getInboundsKeyboard(action string) (*telego.InlineKeyboardMarkup if inbound.Enable { status = "✅" } - callbackData := t.encodeQuery(fmt.Sprintf("%s %d", action, inbound.Id)) + callbackData := t.encodeQuery(fmt.Sprintf("%s %d","get_clients", inbound.Id)) buttons = append(buttons, tu.InlineKeyboardButton(fmt.Sprintf("%v - %v", inbound.Remark, status)).WithCallbackData(callbackData)) } - cols := 3 + cols := 1 if len(buttons) >= 6 { cols = 2 } @@ -1420,12 +1444,46 @@ func (t *Tgbot) getInboundsKeyboard(action string) (*telego.InlineKeyboardMarkup return keyboard, nil } -func (t *Tgbot) getInbounds() (*telego.InlineKeyboardMarkup, error) { - return t.getInboundsKeyboard("get_clients") -} - func (t *Tgbot) getInboundsAddClient() (*telego.InlineKeyboardMarkup, error) { - return t.getInboundsKeyboard("add_client_to") + inbounds, err := t.inboundService.GetAllInbounds() + if err != nil { + logger.Warning("GetAllInbounds run failed:", err) + return nil, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + + if len(inbounds) == 0 { + logger.Warning("No inbounds found") + return nil, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + + excludedProtocols := map[model.Protocol]bool{ + model.DOKODEMO: true, + model.Socks: true, + model.WireGuard: true, + model.HTTP: true, + } + + var buttons []telego.InlineKeyboardButton + for _, inbound := range inbounds { + if excludedProtocols[inbound.Protocol] { + continue + } + + status := "❌" + if inbound.Enable { + status = "✅" + } + callbackData := t.encodeQuery(fmt.Sprintf("%s %d","add_client_to", inbound.Id)) + buttons = append(buttons, tu.InlineKeyboardButton(fmt.Sprintf("%v - %v", inbound.Remark, status)).WithCallbackData(callbackData)) + } + + cols := 1 + if len(buttons) >= 6 { + cols = 2 + } + + keyboard := tu.InlineKeyboardGrid(tu.InlineKeyboardCols(cols, buttons...)) + return keyboard, nil } func (t *Tgbot) getInboundClients(id int) (*telego.InlineKeyboardMarkup, error) { From 03dcb184a82455788e7b915eee6cbf28ff4024db Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:00:47 +0330 Subject: [PATCH 5/9] - customize the add client message and json for each protocol --- web/service/tgbot.go | 148 ++++++++++++++++++++++----- web/translation/translate.en_US.toml | 3 +- web/translation/translate.es_ES.toml | 3 +- web/translation/translate.fa_IR.toml | 3 +- web/translation/translate.id_ID.toml | 3 +- web/translation/translate.ja_JP.toml | 3 +- web/translation/translate.pt_BR.toml | 3 +- web/translation/translate.ru_RU.toml | 3 +- web/translation/translate.tr_TR.toml | 3 +- web/translation/translate.uk_UA.toml | 3 +- web/translation/translate.vi_VN.toml | 3 +- web/translation/translate.zh_CN.toml | 3 +- web/translation/translate.zh_TW.toml | 3 +- 13 files changed, 147 insertions(+), 37 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 00c74100..543f93c4 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -53,10 +53,10 @@ var ( client_SubID string client_Comment string client_Reset int - client_security string + client_Security string client_ShPassword string client_TrPassword string - client_method string + client_Method string ) @@ -948,10 +948,10 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool client_SubID = t.randomLowerAndNum(16) client_Comment = "" client_Reset = 0 - client_security="auto" + client_Security="auto" client_ShPassword=t.randomShadowSocksPassword() client_TrPassword=t.randomLowerAndNum(10) - client_method="" + client_Method="" inboundId := dataArray[1] inboundIdInt, err := strconv.Atoi(inboundId) @@ -966,7 +966,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool return } - message := t.I18nBot("tgbot.messages.inbound_client_data", "InboundRemark=="+inbound.Remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + message, err := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol) t.addClient(chatId, message) } @@ -1035,9 +1035,10 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool client_SubID = t.randomLowerAndNum(16) client_Comment = "" client_Reset = 0 + client_Security="auto" client_ShPassword=t.randomShadowSocksPassword() client_TrPassword=t.randomLowerAndNum(10) - client_method="" + client_Method="" inbounds, err := t.getInboundsAddClient() if err != nil { @@ -1092,8 +1093,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool delete(userStates, chatId) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.cancel"), tu.ReplyKeyboardRemove()) case "add_client_submit_enable": - inboundService := &InboundService{} - _, err := inboundService.SubmitAddClient() + _, err := t.SubmitAddClient() if err != nil { errorMessage := fmt.Sprintf("%v", err) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) @@ -1102,8 +1102,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool } case "add_client_submit_disable": client_Enable = false - inboundService := &InboundService{} - _, err := inboundService.SubmitAddClient() + _, err := t.SubmitAddClient() if err != nil { errorMessage := fmt.Sprintf("%v", err) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) @@ -1113,22 +1112,121 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool } } +func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string ,protocol model.Protocol) (string, error) { + var message string -func (s *InboundService) SubmitAddClient() (bool, error) { - jsonString := fmt.Sprintf(`{"clients": [{ - "id": "%s", - "flow": "%s", - "email": "%s", - "limitIp": %d, - "totalGB": %d, - "expiryTime": %d, - "enable": %t, - "tgId": "%s", - "subId": "%s", - "comment": "%s", - "reset": %d -}]}`, client_Id, client_Flow, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + switch protocol { + case model.VMESS: + message = t.I18nBot("tgbot.messages.inbound_client_data_id", "InboundRemark=="+inbound_remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + case model.VLESS: + message = t.I18nBot("tgbot.messages.inbound_client_data_id", "InboundRemark=="+inbound_remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + case model.Trojan: + message = t.I18nBot("tgbot.messages.inbound_client_data_pass", "InboundRemark=="+inbound_remark,"ClientPass=="+client_TrPassword,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + case model.Shadowsocks: + message = t.I18nBot("tgbot.messages.inbound_client_data_pass", "InboundRemark=="+inbound_remark,"ClientPass=="+client_ShPassword,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + default: + return "", errors.New("unknown protocol") + } + + return message, nil +} + + + +func (t *Tgbot) BuildJSONForProtocol(protocol model.Protocol) (string, error) { + var jsonString string + + switch protocol { + case model.VMESS: + jsonString = fmt.Sprintf(`{ + "clients": [{ + "id": "%s", + "security": "%s", + "email": "%s", + "limitIp": %d, + "totalGB": %d, + "expiryTime": %d, + "enable": %t, + "tgId": "%s", + "subId": "%s", + "comment": "%s", + "reset": %d + }] + }`, client_Id, client_Security, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + + case model.VLESS: + jsonString = fmt.Sprintf(`{ + "clients": [{ + "id": "%s", + "flow": "%s", + "email": "%s", + "limitIp": %d, + "totalGB": %d, + "expiryTime": %d, + "enable": %t, + "tgId": "%s", + "subId": "%s", + "comment": "%s", + "reset": %d + }] + }`, client_Id, client_Flow, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + + case model.Trojan: + jsonString = fmt.Sprintf(`{ + "clients": [{ + "password": "%s", + "email": "%s", + "limitIp": %d, + "totalGB": %d, + "expiryTime": %d, + "enable": %t, + "tgId": "%s", + "subId": "%s", + "comment": "%s", + "reset": %d + }] + }`, client_TrPassword, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + + case model.Shadowsocks: + jsonString = fmt.Sprintf(`{ + "clients": [{ + "method": "%s", + "password": "%s", + "email": "%s", + "limitIp": %d, + "totalGB": %d, + "expiryTime": %d, + "enable": %t, + "tgId": "%s", + "subId": "%s", + "comment": "%s", + "reset": %d + }] + }`, client_Method, client_ShPassword, client_Email, client_LimitIP, client_TotalGB, client_ExpiryTime, client_Enable, client_TgID, client_SubID, client_Comment, client_Reset) + + default: + return "", errors.New("unknown protocol") + } + + return jsonString, nil +} + + +func (t *Tgbot) SubmitAddClient() (bool, error) { + + + inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) + if err != nil { + logger.Warning("getIboundClients run failed:", err) + return false, errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + + + + jsonString, err := t.BuildJSONForProtocol(inbound.Protocol) newInbound := &model.Inbound{ Id: receiver_inbound_ID, @@ -1136,7 +1234,7 @@ func (s *InboundService) SubmitAddClient() (bool, error) { } - return s.AddInboundClient(newInbound) + return t.inboundService.AddInboundClient(newInbound) } func checkAdmin(tgId int64) bool { diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index ae4974dc..eaaba530 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id." "email_prompt" = "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email." "comment_prompt" = "💬 Default Comment: {{ .ClientComment }}\n\nEnter your Comment." -"inbound_client_data" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\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💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\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 }}" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index 64b813ce..f3eb33d2 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID." "email_prompt" = "📧 Correo predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo." "comment_prompt" = "💬 Comentario predeterminado: {{ .ClientComment }}\n\nIntroduce tu comentario." -"inbound_client_data" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" "cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄" "error_add_client" = "⚠️ Error:\n\n {{ .error }}" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 0dee6dc3..0fff3ea8 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 شناسه پیش‌فرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید." "email_prompt" = "📧 ایمیل پیش‌فرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید." "comment_prompt" = "💬 کامنت پیش‌فرض: {{ .ClientComment }}\n\nکامنت خود را وارد کنید." -"inbound_client_data" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به inbound اضافه کنید!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به inbound اضافه کنید!" "client_data" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" "cancel" = "❌ فرآیند لغو شد! \n\nشما می‌توانید هر زمان دوباره /start کنید. 🔄" "error_add_client" = "⚠️ خطا:\n\n {{ .error }}" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 70fb9c46..ff787fb7 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 ID default: {{ .ClientId }}\n\nMasukkan ID Anda." "email_prompt" = "📧 Email default: {{ .ClientEmail }}\n\nMasukkan email Anda." "comment_prompt" = "💬 Komentar default: {{ .ClientComment }}\n\nMasukkan komentar Anda." -"inbound_client_data" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" "cancel" = "❌ Proses dibatalkan! \n\nAnda bisa /start lagi kapan saja. 🔄" "error_add_client" = "⚠️ Kesalahan:\n\n {{ .error }}" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index f70790e1..4f629ad7 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。" "email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。" "comment_prompt" = "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。" -"inbound_client_data" = "🔄 受信データ: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをInboundに追加できます!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをInboundに追加できます!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" "cancel" = "❌ 処理がキャンセルされました! \n\nいつでも/startでやり直せます。 🔄" "error_add_client" = "⚠️ エラー:\n\n {{ .error }}" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index 3365bd40..d3a745d9 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 ID padrão: {{ .ClientId }}\n\nDigite seu ID." "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" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente ao inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente ao inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" "cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄" "error_add_client" = "⚠️ Erro:\n\n {{ .error }}" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 59366148..b97c6c97 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID." "email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email." "comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий." -"inbound_client_data" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" "cancel" = "❌ Процесс отменен! \n\nВы можете снова запустить /start в любое время. 🔄" "error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index 3e0fdc12..851c1ad6 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 Varsayılan ID: {{ .ClientId }}\n\nID'nizi girin." "email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-posta adresinizi girin." "comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin." -"inbound_client_data" = "🔄 Giriş: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi inbound'a ekleyebilirsiniz!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi inbound'a ekleyebilirsiniz!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" "cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start komutunu tekrar verebilirsiniz. 🔄" "error_add_client" = "⚠️ Hata:\n\n {{ .error }}" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 66b5217c..80dd1c98 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 За замовчуванням ID: {{ .ClientId }}\n\nВведіть ваш ID." "email_prompt" = "📧 За замовчуванням Email: {{ .ClientEmail }}\n\nВведіть ваш email." "comment_prompt" = "💬 За замовчуванням коментар: {{ .ClientComment }}\n\nВведіть ваш коментар." -"inbound_client_data" = "🔄 Вхідні дані: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" "cancel" = "❌ Процес скасовано! \n\nВи можете /start знову в будь-який час. 🔄" "error_add_client" = "⚠️ Помилка:\n\n {{ .error }}" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 5131c9f8..11ffb6dd 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 ID mặc định: {{ .ClientId }}\n\nNhập ID của bạn." "email_prompt" = "📧 Email mặc định: {{ .ClientEmail }}\n\nNhập email của bạn." "comment_prompt" = "💬 Bình luận mặc định: {{ .ClientComment }}\n\nNhập bình luận của bạn." -"inbound_client_data" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" "cancel" = "❌ Quá trình bị hủy! \n\nBạn có thể /start lại bất cứ lúc nào. 🔄" "error_add_client" = "⚠️ Lỗi:\n\n {{ .error }}" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index d56fd43e..da2d9380 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 默认ID: {{ .ClientId }}\n\n请输入您的ID。" "email_prompt" = "📧 默认邮件: {{ .ClientEmail }}\n\n请输入您的邮箱。" "comment_prompt" = "💬 默认评论: {{ .ClientComment }}\n\n请输入您的评论。" -"inbound_client_data" = "🔄 入站数据: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" "cancel" = "❌ 过程已取消! \n\n您可以随时 /start 重新开始。 🔄" "error_add_client" = "⚠️ 错误:\n\n {{ .error }}" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 2938c7c8..69dfc847 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -578,7 +578,8 @@ "id_prompt" = "🔑 預設ID: {{ .ClientId }}\n\n請輸入您的ID。" "email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。" "comment_prompt" = "💬 預設評論: {{ .ClientComment }}\n\n請輸入您的評論。" -"inbound_client_data" = "🔄 進站數據: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 註解: {{ .ClientComment }}\n\n現在您可以將客戶添加到inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 註解: {{ .ClientComment }}\n\n現在您可以將客戶添加到inbound!" "client_data" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" "cancel" = "❌ 處理已取消! \n\n您隨時可以 /start 再次開始。 🔄" "error_add_client" = "⚠️ 錯誤:\n\n {{ .error }}" From f77fb6f2e26ae89ae3b6c64516db8a0d3ddead9d Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Mon, 17 Mar 2025 13:14:59 +0330 Subject: [PATCH 6/9] - handle password input rather than id for shadow and trojan protocols --- web/service/tgbot.go | 106 +++++++++++++++++++++++---- web/translation/translate.en_US.toml | 7 +- web/translation/translate.es_ES.toml | 18 +++-- web/translation/translate.fa_IR.toml | 18 +++-- web/translation/translate.id_ID.toml | 26 ++++--- web/translation/translate.ja_JP.toml | 26 ++++--- web/translation/translate.pt_BR.toml | 14 ++-- web/translation/translate.ru_RU.toml | 14 ++-- web/translation/translate.tr_TR.toml | 18 +++-- web/translation/translate.uk_UA.toml | 22 +++--- web/translation/translate.vi_VN.toml | 16 ++-- web/translation/translate.zh_CN.toml | 18 +++-- web/translation/translate.zh_TW.toml | 18 +++-- 13 files changed, 224 insertions(+), 97 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 543f93c4..e7975460 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -280,6 +280,28 @@ func (t *Tgbot) OnReceive() { ), ) t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) + case "awaiting_password_tr": + client_TrPassword = message.Text + userStates[message.Chat.ID] = "awaiting_email" + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_password", "ClientPass=="+client_TrPassword), tu.ReplyKeyboardRemove()) + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) + case "awaiting_password_sh": + client_ShPassword = message.Text + userStates[message.Chat.ID] = "awaiting_email" + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_password", "ClientPass=="+client_ShPassword), tu.ReplyKeyboardRemove()) + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) case "awaiting_email": client_Email = message.Text userStates[message.Chat.ID] = "awaiting_comment" @@ -294,7 +316,7 @@ func (t *Tgbot) OnReceive() { case "awaiting_comment": client_Comment = message.Text t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_comment", "ClientComment=="+client_Comment), tu.ReplyKeyboardRemove()) - message_text := t.I18nBot("tgbot.messages.client_data", "ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + message_text, _ := t.BuildClientDataMessage() inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( @@ -966,9 +988,9 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool return } - message, err := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol) + message_text, err := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol) - t.addClient(chatId, message) + t.addClient(chatId, message_text) } return } else { @@ -1048,15 +1070,20 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.addClient")) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseInbound"), inbounds) case "add_client_ch_default": + var prompt_state string + var prompt_message string + + + prompt_state ,prompt_message, _ = t.BuildClientChDefaultResponse() cancel_btn_markup := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_id"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_id_pass"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), ), ) - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Id),cancel_btn_markup) - userStates[chatId] = "awaiting_id" - case "default_client_id": + t.SendMsgToTgbot(chatId, prompt_message,cancel_btn_markup) + userStates[chatId] = prompt_state + case "default_client_id_pass": cancel_btn_markup := tu.InlineKeyboard( tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), @@ -1075,7 +1102,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment),inlineKeyboard) userStates[chatId] = "awaiting_comment" case "default_client_comment": - message_text := t.I18nBot("tgbot.messages.client_data", "ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + message_text, _ := t.BuildClientDataMessage() inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( @@ -1112,16 +1139,41 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool } } + +func (t *Tgbot) BuildClientChDefaultResponse() (string,string,error) { + + inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) + if err != nil { + logger.Warning("getIboundClients run failed:", err) + return "", "",errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + + protocol := inbound.Protocol + + switch protocol { + case model.VMESS, model.VLESS: + prompt := t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Id) + return "awaiting_id", prompt,errors.New("unknown protocol") + case model.Trojan: + prompt := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_TrPassword) + return "awaiting_password_tr", prompt,errors.New("unknown protocol") + case model.Shadowsocks: + prompt := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_ShPassword) + return "awaiting_password_sh", prompt,errors.New("unknown protocol") + default: + return "","", errors.New("unknown protocol") + } +} + + func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string ,protocol model.Protocol) (string, error) { var message string switch protocol { - case model.VMESS: + case model.VMESS, model.VLESS: message = t.I18nBot("tgbot.messages.inbound_client_data_id", "InboundRemark=="+inbound_remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) - case model.VLESS: - message = t.I18nBot("tgbot.messages.inbound_client_data_id", "InboundRemark=="+inbound_remark,"ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) - - case model.Trojan: + + case model.Trojan: message = t.I18nBot("tgbot.messages.inbound_client_data_pass", "InboundRemark=="+inbound_remark,"ClientPass=="+client_TrPassword,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) case model.Shadowsocks: @@ -1134,6 +1186,34 @@ func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string ,protocol mo return message, nil } +func (t *Tgbot) BuildClientDataMessage() (string, error) { + var message string + + inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) + if err != nil { + logger.Warning("getIboundClients run failed:", err) + return "", errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) + } + protocol := inbound.Protocol + + + switch protocol { + case model.VMESS, model.VLESS: + message = t.I18nBot("tgbot.messages.client_data_id", "ClientId=="+client_Id,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + case model.Trojan: + message = t.I18nBot("tgbot.messages.client_data_pass", "ClientPass=="+client_TrPassword,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + case model.Shadowsocks: + message = t.I18nBot("tgbot.messages.client_data_pass", "ClientPass=="+client_ShPassword,"ClientEmail=="+client_Email,"ClientComment=="+client_Comment) + + default: + return "", errors.New("unknown protocol") + } + + return message, nil +} + func (t *Tgbot) BuildJSONForProtocol(protocol model.Protocol) (string, error) { diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index eaaba530..bea6ea1b 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -573,17 +573,20 @@ "no" = "❌ No" "received_id" = "🔑📥 Received ID: {{ .ClientId }}" +"received_password" = "🔑📥 Received Password: {{ .ClientPass }}" "received_email" = "📧📥 Received Email: {{ .ClientEmail }}" "received_comment" = "💬📥 Received Comment: {{ .ClientComment }}" "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💬 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💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\nYou can add the client to inbound now!" +"client_data_pass" = "🔑 Password: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\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 }}" -"success_add_client" = "🏆 Success! You can now modify it using the 'All Clients' inline button." +"success_add_client" = "🏆 Success! \nYou can now modify it using the 'All Clients' inline button." [tgbot.buttons] "closeKeyboard" = "❌ Close Keyboard" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index f3eb33d2..a17f07e2 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -573,17 +573,21 @@ "no" = "❌ No" "received_id" = "🔑📥 ID recibido: {{ .ClientId }}" -"received_email" = "📧📥 Correo recibido: {{ .ClientEmail }}" +"received_password" = "🔑📥 Contraseña recibida: {{ .ClientPass }}" +"received_email" = "📧📥 Correo electrónico recibido: {{ .ClientEmail }}" "received_comment" = "💬📥 Comentario recibido: {{ .ClientComment }}" "id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID." -"email_prompt" = "📧 Correo predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo." +"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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comment: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Correo: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" -"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start de nuevo en cualquier momento. 🔄" +"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" +"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" +"client_data_pass" = "🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" +"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes usar /start en cualquier momento. 🔄" "error_add_client" = "⚠️ Error:\n\n {{ .error }}" -"success_add_client" = "🏆 ¡Éxito! Ahora puedes modificarlo usando el botón en línea 'All Clients'." +"success_add_client" = "🏆 ¡Éxito! \nAhora puedes modificarlo usando el botón en línea 'Todos los Clientes'." + [tgbot.buttons] "closeKeyboard" = "❌ Cerrar Teclado" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 0fff3ea8..e5649811 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -573,17 +573,21 @@ "no" = "❌ خیر" "received_id" = "🔑📥 شناسه دریافت شده: {{ .ClientId }}" +"received_password" = "🔑📥 رمز عبور دریافت شده: {{ .ClientPass }}" "received_email" = "📧📥 ایمیل دریافت شده: {{ .ClientEmail }}" -"received_comment" = "💬📥 کامنت دریافت شده: {{ .ClientComment }}" +"received_comment" = "💬📥 نظر دریافت شده: {{ .ClientComment }}" "id_prompt" = "🔑 شناسه پیش‌فرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید." +"pass_prompt" = "🔑 رمز عبور پیش‌فرض: {{ .ClientPassword }}\n\nرمز عبور خود را وارد کنید." "email_prompt" = "📧 ایمیل پیش‌فرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید." -"comment_prompt" = "💬 کامنت پیش‌فرض: {{ .ClientComment }}\n\nکامنت خود را وارد کنید." -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به inbound اضافه کنید!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به inbound اضافه کنید!" -"client_data" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 کامنت: {{ .ClientComment }}\n\nهم‌اکنون می‌توانید مشتری را به ورودی اضافه کنید!" -"cancel" = "❌ فرآیند لغو شد! \n\nشما می‌توانید هر زمان دوباره /start کنید. 🔄" +"comment_prompt" = "💬 نظر پیش‌فرض: {{ .ClientComment }}\n\nنظر خود را وارد کنید." +"inbound_client_data_id" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"inbound_client_data_pass" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"client_data_id" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"client_data_pass" = "🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" +"cancel" = "❌ فرایند لغو شد! \n\nشما می‌توانید هر زمان که خواستید /start را اجرا کنید. 🔄" "error_add_client" = "⚠️ خطا:\n\n {{ .error }}" -"success_add_client" = "🏆 موفقیت! اکنون می‌توانید آن را با استفاده از دکمه 'All Clients' تغییر دهید." +"success_add_client" = "🏆 موفقیت! اکنون می‌توانید آن را از طریق دکمه 'همه مشتریان' ویرایش کنید." + [tgbot.buttons] "closeKeyboard" = "❌ بستن کیبورد" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index ff787fb7..bcf733be 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -572,18 +572,22 @@ "no" = "❌ Tidak" -"received_id" = "🔑📥 ID diterima: {{ .ClientId }}" -"received_email" = "📧📥 Email diterima: {{ .ClientEmail }}" -"received_comment" = "💬📥 Komentar diterima: {{ .ClientComment }}" -"id_prompt" = "🔑 ID default: {{ .ClientId }}\n\nMasukkan ID Anda." -"email_prompt" = "📧 Email default: {{ .ClientEmail }}\n\nMasukkan email Anda." -"comment_prompt" = "💬 Komentar default: {{ .ClientComment }}\n\nMasukkan komentar Anda." -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda bisa menambahkan klien ke inbound!" -"cancel" = "❌ Proses dibatalkan! \n\nAnda bisa /start lagi kapan saja. 🔄" +"received_id" = "🔑📥 ID yang diterima: {{ .ClientId }}" +"received_password" = "🔑📥 Kata sandi yang diterima: {{ .ClientPass }}" +"received_email" = "📧📥 Email yang diterima: {{ .ClientEmail }}" +"received_comment" = "💬📥 Komentar yang diterima: {{ .ClientComment }}" +"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💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" +"inbound_client_data_pass" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" +"client_data_pass" = "🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" +"cancel" = "❌ Proses Dibatalkan! \n\nAnda dapat memulai lagi kapan saja dengan /start. 🔄" "error_add_client" = "⚠️ Kesalahan:\n\n {{ .error }}" -"success_add_client" = "🏆 Sukses! Sekarang Anda dapat mengubahnya menggunakan tombol 'All Clients'." +"success_add_client" = "🏆 Berhasil! \nSekarang Anda dapat mengeditnya menggunakan tombol 'Semua Klien'." + [tgbot.buttons] "closeKeyboard" = "❌ Tutup Papan Ketik" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index 4f629ad7..756402fc 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -572,18 +572,22 @@ "yes" = "✅ はい" "no" = "❌ いいえ" -"received_id" = "🔑📥 受け取ったID: {{ .ClientId }}" -"received_email" = "📧📥 受け取ったメール: {{ .ClientEmail }}" -"received_comment" = "💬📥 受け取ったコメント: {{ .ClientComment }}" -"id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。" -"email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。" -"comment_prompt" = "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。" -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをInboundに追加できます!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをInboundに追加できます!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\nクライアントを受信リストに追加できます!" -"cancel" = "❌ 処理がキャンセルされました! \n\nいつでも/startでやり直せます。 🔄" +"received_id" = "🔑📥 受信したID: {{ .ClientId }}" +"received_password" = "🔑📥 受信したパスワード: {{ .ClientPass }}" +"received_email" = "📧📥 受信したメール: {{ .ClientEmail }}" +"received_comment" = "💬📥 受信したコメント: {{ .ClientComment }}" +"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💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" +"inbound_client_data_pass" = "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" +"client_data_pass" = "🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" +"cancel" = "❌ プロセスがキャンセルされました!\n\nいつでも /start を使用できます。 🔄" "error_add_client" = "⚠️ エラー:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!「All Clients」ボタンを使って変更できます。" +"success_add_client" = "🏆 成功!\n「すべてのクライアント」ボタンを使用して、編集できます。" + [tgbot.buttons] "closeKeyboard" = "❌ キーボードを閉じる" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index d3a745d9..3f237b28 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -573,17 +573,21 @@ "no" = "❌ Não" "received_id" = "🔑📥 ID recebido: {{ .ClientId }}" +"received_password" = "🔑📥 Senha recebida: {{ .ClientPass }}" "received_email" = "📧📥 E-mail recebido: {{ .ClientEmail }}" "received_comment" = "💬📥 Comentário recebido: {{ .ClientComment }}" "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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente ao inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente ao inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" -"cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄" +"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" +"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" +"client_data_pass" = "🔑 Senha: {{ .ClientPass }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" +"cancel" = "❌ Processo cancelado! \n\nVocê pode usar /start a qualquer momento. 🔄" "error_add_client" = "⚠️ Erro:\n\n {{ .error }}" -"success_add_client" = "🏆 Sucesso! Agora você pode modificá-lo usando o botão 'All Clients'." +"success_add_client" = "🏆 Sucesso! \nAgora você pode editá-lo usando o botão 'Todos os Clientes'." + [tgbot.buttons] "closeKeyboard" = "❌ Fechar teclado" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index b97c6c97..8b4a94d3 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -573,17 +573,21 @@ "no" = "❌ Нет" "received_id" = "🔑📥 Полученный ID: {{ .ClientId }}" +"received_password" = "🔑📥 Полученный пароль: {{ .ClientPass }}" "received_email" = "📧📥 Полученный email: {{ .ClientEmail }}" "received_comment" = "💬📥 Полученный комментарий: {{ .ClientComment }}" "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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента в входящие!" -"cancel" = "❌ Процесс отменен! \n\nВы можете снова запустить /start в любое время. 🔄" +"inbound_client_data_id" = "🔄 Входящий: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"inbound_client_data_pass" = "🔄 Входящий: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"cancel" = "❌ Процесс отменен! \n\nВы можете начать заново в любое время с помощью /start. 🔄" "error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}" -"success_add_client" = "🏆 Успех! Теперь вы можете изменить его с помощью кнопки 'All Clients'." +"success_add_client" = "🏆 Успех! \nТеперь вы можете изменить его, используя кнопку 'Все клиенты'." + [tgbot.buttons] "closeKeyboard" = "❌ Закрыть клавиатуру" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index 851c1ad6..90481b3b 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -572,18 +572,22 @@ "yes" = "✅ Evet" "no" = "❌ Hayır" -"received_id" = "🔑📥 Alınan ID: {{ .ClientId }}" +"received_id" = "🔑📥 Alınan Kimlik: {{ .ClientId }}" +"received_password" = "🔑📥 Alınan Şifre: {{ .ClientPass }}" "received_email" = "📧📥 Alınan E-posta: {{ .ClientEmail }}" "received_comment" = "💬📥 Alınan Yorum: {{ .ClientComment }}" -"id_prompt" = "🔑 Varsayılan ID: {{ .ClientId }}\n\nID'nizi girin." +"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-posta adresinizi girin." "comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin." -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi inbound'a ekleyebilirsiniz!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteriyi inbound'a ekleyebilirsiniz!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri girişine ekleyebilirsiniz!" -"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start komutunu tekrar verebilirsiniz. 🔄" +"inbound_client_data_id" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" +"inbound_client_data_pass" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" +"client_data_id" = "🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" +"client_data_pass" = "🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" +"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start kullanabilirsiniz. 🔄" "error_add_client" = "⚠️ Hata:\n\n {{ .error }}" -"success_add_client" = "🏆 Başarılı! Şimdi 'All Clients' düğmesini kullanarak düzenleyebilirsiniz." +"success_add_client" = "🏆 Başarılı! \nArtık 'Tüm Müşteriler' düğmesini kullanarak düzenleyebilirsiniz." + [tgbot.buttons] "closeKeyboard" = "❌ Klavyeyi Kapat" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index 80dd1c98..adc522ac 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -573,17 +573,21 @@ "no" = "❌ Ні" "received_id" = "🔑📥 Отриманий ID: {{ .ClientId }}" -"received_email" = "📧📥 Отриманий Email: {{ .ClientEmail }}" +"received_password" = "🔑📥 Отриманий пароль: {{ .ClientPass }}" +"received_email" = "📧📥 Отриманий email: {{ .ClientEmail }}" "received_comment" = "💬📥 Отриманий коментар: {{ .ClientComment }}" -"id_prompt" = "🔑 За замовчуванням ID: {{ .ClientId }}\n\nВведіть ваш ID." -"email_prompt" = "📧 За замовчуванням Email: {{ .ClientEmail }}\n\nВведіть ваш email." -"comment_prompt" = "💬 За замовчуванням коментар: {{ .ClientComment }}\n\nВведіть ваш коментар." -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nЗараз ви можете додати клієнта до вхідних!" -"cancel" = "❌ Процес скасовано! \n\nВи можете /start знову в будь-який час. 🔄" +"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💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"inbound_client_data_pass" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"cancel" = "❌ Процес скасовано! \n\nВи можете використати /start у будь-який час. 🔄" "error_add_client" = "⚠️ Помилка:\n\n {{ .error }}" -"success_add_client" = "🏆 Успіх! Тепер ви можете змінити його за допомогою кнопки 'All Clients'." +"success_add_client" = "🏆 Успіх! \nТепер ви можете редагувати його за допомогою кнопки 'Усі клієнти'." + [tgbot.buttons] "closeKeyboard" = "❌ Закрити клавіатуру" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 11ffb6dd..1ebe0baf 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -573,17 +573,21 @@ "no" = "❌ Không" "received_id" = "🔑📥 ID nhận được: {{ .ClientId }}" +"received_password" = "🔑📥 Mật khẩu nhận được: {{ .ClientPass }}" "received_email" = "📧📥 Email nhận được: {{ .ClientEmail }}" -"received_comment" = "💬📥 Nhận được bình luận: {{ .ClientComment }}" +"received_comment" = "💬📥 Bình luận nhận được: {{ .ClientComment }}" "id_prompt" = "🔑 ID mặc định: {{ .ClientId }}\n\nNhập ID của bạn." +"pass_prompt" = "🔑 Mật khẩu mặc định: {{ .ClientPassword }}\n\nNhập mật khẩu của bạn." "email_prompt" = "📧 Email mặc định: {{ .ClientEmail }}\n\nNhập email của bạn." "comment_prompt" = "💬 Bình luận mặc định: {{ .ClientComment }}\n\nNhập bình luận của bạn." -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBây giờ bạn có thể thêm khách hàng vào danh sách đến!" -"cancel" = "❌ Quá trình bị hủy! \n\nBạn có thể /start lại bất cứ lúc nào. 🔄" +"inbound_client_data_id" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" +"inbound_client_data_pass" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" +"client_data_pass" = "🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" +"cancel" = "❌ Quá trình đã bị hủy! \n\nBạn có thể sử dụng /start bất cứ lúc nào. 🔄" "error_add_client" = "⚠️ Lỗi:\n\n {{ .error }}" -"success_add_client" = "🏆 Thành công! Bây giờ bạn có thể chỉnh sửa nó bằng nút 'All Clients'." +"success_add_client" = "🏆 Thành công! \nGiờ đây bạn có thể chỉnh sửa bằng nút 'Tất Cả Khách Hàng'." + [tgbot.buttons] "closeKeyboard" = "❌ Đóng Bàn Phím" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index da2d9380..4ab663af 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -573,17 +573,21 @@ "no" = "❌ 没有" "received_id" = "🔑📥 接收到的ID: {{ .ClientId }}" -"received_email" = "📧📥 接收到的邮件: {{ .ClientEmail }}" +"received_password" = "🔑📥 接收到的密码: {{ .ClientPass }}" +"received_email" = "📧📥 接收到的电子邮件: {{ .ClientEmail }}" "received_comment" = "💬📥 接收到的评论: {{ .ClientComment }}" "id_prompt" = "🔑 默认ID: {{ .ClientId }}\n\n请输入您的ID。" -"email_prompt" = "📧 默认邮件: {{ .ClientEmail }}\n\n请输入您的邮箱。" +"pass_prompt" = "🔑 默认密码: {{ .ClientPassword }}\n\n请输入您的密码。" +"email_prompt" = "📧 默认电子邮件: {{ .ClientEmail }}\n\n请输入您的电子邮件。" "comment_prompt" = "💬 默认评论: {{ .ClientComment }}\n\n请输入您的评论。" -"inbound_client_data_id" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在您可以将客户添加到入站!" -"cancel" = "❌ 过程已取消! \n\n您可以随时 /start 重新开始。 🔄" +"inbound_client_data_id" = "🔄 传入数据: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" +"inbound_client_data_pass" = "🔄 传入数据: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" +"client_data_pass" = "🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" +"cancel" = "❌ 过程已取消!\n\n您可以随时使用 /start。 🔄" "error_add_client" = "⚠️ 错误:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!现在您可以使用“All Clients”按钮进行修改。" +"success_add_client" = "🏆 成功!\n您现在可以使用'所有客户'按钮进行修改。" + [tgbot.buttons] "closeKeyboard" = "❌ 关闭键盘" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 69dfc847..88836c3f 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -572,18 +572,22 @@ "yes" = "✅ 是的" "no" = "❌ 沒有" -"received_id" = "🔑📥 接收到的ID: {{ .ClientId }}" +"received_id" = "🔑📥 接收到的 ID: {{ .ClientId }}" +"received_password" = "🔑📥 接收到的密碼: {{ .ClientPass }}" "received_email" = "📧📥 接收到的電子郵件: {{ .ClientEmail }}" "received_comment" = "💬📥 接收到的評論: {{ .ClientComment }}" -"id_prompt" = "🔑 預設ID: {{ .ClientId }}\n\n請輸入您的ID。" +"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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 註解: {{ .ClientComment }}\n\n現在您可以將客戶添加到inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 註解: {{ .ClientComment }}\n\n現在您可以將客戶添加到inbound!" -"client_data" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶加入進站!" -"cancel" = "❌ 處理已取消! \n\n您隨時可以 /start 再次開始。 🔄" +"inbound_client_data_id" = "🔄 傳入數據: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" +"inbound_client_data_pass" = "🔄 傳入數據: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" +"client_data_pass" = "🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" +"cancel" = "❌ 過程已取消!\n\n您可以隨時使用 /start。 🔄" "error_add_client" = "⚠️ 錯誤:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!現在您可以使用「All Clients」按鈕進行修改。" +"success_add_client" = "🏆 成功!\n您現在可以使用'所有客戶'按鈕進行修改。" + [tgbot.buttons] "closeKeyboard" = "❌ 關閉鍵盤" From 176f90704374d539fe2ad34ffc1b3a7deb2f6204 Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Mon, 17 Mar 2025 13:32:39 +0330 Subject: [PATCH 7/9] - remove add_client_as_enable button in bot --- web/service/tgbot.go | 19 +------------------ web/translation/translate.en_US.toml | 3 +-- web/translation/translate.es_ES.toml | 3 +-- web/translation/translate.fa_IR.toml | 3 +-- web/translation/translate.id_ID.toml | 3 +-- web/translation/translate.ja_JP.toml | 3 +-- web/translation/translate.pt_BR.toml | 3 +-- web/translation/translate.ru_RU.toml | 3 +-- web/translation/translate.tr_TR.toml | 3 +-- web/translation/translate.uk_UA.toml | 3 +-- web/translation/translate.vi_VN.toml | 3 +-- web/translation/translate.zh_CN.toml | 3 +-- web/translation/translate.zh_TW.toml | 3 +-- 13 files changed, 13 insertions(+), 42 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index e7975460..21baba38 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -319,12 +319,9 @@ func (t *Tgbot) OnReceive() { message_text, _ := t.BuildClientDataMessage() inlineKeyboard := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), ), ) t.SendMsgToTgbot(message.Chat.ID, message_text, inlineKeyboard) @@ -1106,10 +1103,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - ), - tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), ), ) @@ -1119,14 +1113,6 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool case "add_client_cancel": delete(userStates, chatId) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.cancel"), tu.ReplyKeyboardRemove()) - case "add_client_submit_enable": - _, err := t.SubmitAddClient() - if err != nil { - errorMessage := fmt.Sprintf("%v", err) - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) - } else { - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.success_add_client"), tu.ReplyKeyboardRemove()) - } case "add_client_submit_disable": client_Enable = false _, err := t.SubmitAddClient() @@ -1962,10 +1948,7 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_default")).WithCallbackData("add_client_ch_default"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - ), - tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), ), ) diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index bea6ea1b..07b22055 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -623,8 +623,7 @@ "allClients" = "All Clients" "addClient" = "Add Client" -"submitEnable" = "Submit As Enable ✅" -"submitDisable" = "Submit As Disable 🚫" +"submitDisable" = "Submit As Disable ✅" "use_default" = "🏷️ Use default" "change_default" = "🔄⚙️ Change Default" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index a17f07e2..56ebf293 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -624,8 +624,7 @@ "allClients" = "Todos los Clientes" "addClient" = "Añadir Cliente" -"submitEnable" = "Enviar como Habilitado ✅" -"submitDisable" = "Enviar como Deshabilitado 🚫" +"submitDisable" = "Enviar como Deshabilitado ✅" "use_default" = "🏷️ Usar por defecto" "change_default" = "🔄⚙️ Cambiar por defecto" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index e5649811..58e84b95 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -624,8 +624,7 @@ "allClients" = "همه مشتریان" "addClient" = "افزودن مشتری" -"submitEnable" = "ارسال به عنوان فعال ✅" -"submitDisable" = "ارسال به عنوان غیرفعال 🚫" +"submitDisable" = "ارسال به عنوان غیرفعال ✅" "use_default" = "🏷️ استفاده از پیش‌فرض" "change_default" = "🔄⚙️ تغییر پیش‌فرض" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index bcf733be..703b799b 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -624,8 +624,7 @@ "allClients" = "Semua Klien" "addClient" = "Tambah Klien" -"submitEnable" = "Kirim Sebagai Aktif ✅" -"submitDisable" = "Kirim Sebagai Nonaktif 🚫" +"submitDisable" = "Kirim Sebagai Nonaktif ✅" "use_default" = "🏷️ Gunakan Default" "change_default" = "🔄⚙️ Ubah Default" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index 756402fc..5e1b92d5 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -624,8 +624,7 @@ "allClients" = "すべてのクライアント" "addClient" = "クライアントを追加" -"submitEnable" = "有効として送信 ✅" -"submitDisable" = "無効として送信 🚫" +"submitDisable" = "無効として送信 ✅" "use_default" = "🏷️ デフォルトを使用" "change_default" = "🔄⚙️ デフォルトを変更" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index 3f237b28..31a14376 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -624,8 +624,7 @@ "allClients" = "Todos os clientes" "addClient" = "Adicionar Cliente" -"submitEnable" = "Enviar como Ativado ✅" -"submitDisable" = "Enviar como Desativado 🚫" +"submitDisable" = "Enviar como Desativado ✅" "use_default" = "🏷️ Usar padrão" "change_default" = "🔄⚙️ Alterar Padrão" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index 8b4a94d3..9f753d49 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -624,8 +624,7 @@ "allClients" = "Все клиенты" "addClient" = "Добавить клиента" -"submitEnable" = "Отправить как включено ✅" -"submitDisable" = "Отправить как отключено 🚫" +"submitDisable" = "Отправить как отключено ✅" "use_default" = "🏷️ Использовать по умолчанию" "change_default" = "🔄⚙️ Изменить по умолчанию" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index 90481b3b..f4dec336 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -624,8 +624,7 @@ "allClients" = "Tüm Müşteriler" "addClient" = "Müşteri Ekle" -"submitEnable" = "Etkin Olarak Gönder ✅" -"submitDisable" = "Devre Dışı Olarak Gönder 🚫" +"submitDisable" = "Devre Dışı Olarak Gönder ✅" "use_default" = "🏷️ Varsayılanı Kullan" "change_default" = "🔄⚙️ Varsayılanı Değiştir" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index adc522ac..00b622c5 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -624,8 +624,7 @@ "allClients" = "Всі Клієнти" "addClient" = "Додати клієнта" -"submitEnable" = "Надіслати як увімкнено ✅" -"submitDisable" = "Надіслати як вимкнено 🚫" +"submitDisable" = "Надіслати як вимкнено ✅" "use_default" = "🏷️ Використати за замовчуванням" "change_default" = "🔄⚙️ Змінити за замовчуванням" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index 1ebe0baf..95fa2b7c 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -624,8 +624,7 @@ "allClients" = "Tất cả Khách hàng" "addClient" = "Thêm Khách Hàng" -"submitEnable" = "Gửi Dưới Dạng Bật ✅" -"submitDisable" = "Gửi Dưới Dạng Tắt 🚫" +"submitDisable" = "Gửi Dưới Dạng Tắt ✅" "use_default" = "🏷️ Sử dụng mặc định" "change_default" = "🔄⚙️ Thay đổi mặc định" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index 4ab663af..b6946e97 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -624,8 +624,7 @@ "allClients" = "所有客户" "addClient" = "添加客户" -"submitEnable" = "提交为启用 ✅" -"submitDisable" = "提交为禁用 🚫" +"submitDisable" = "提交为禁用 ✅" "use_default" = "🏷️ 使用默认" "change_default" = "🔄⚙️ 更改默认" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 88836c3f..bf9c6b55 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -624,8 +624,7 @@ "allClients" = "所有客戶" "addClient" = "新增客戶" -"submitEnable" = "提交為啟用 ✅" -"submitDisable" = "提交為停用 🚫" +"submitDisable" = "提交為停用 ✅" "use_default" = "🏷️ 使用預設" "change_default" = "🔄⚙️ 更改預設" From f717cbe40e85e1acfd66cf127f9ccaa6ae73648c Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Fri, 21 Mar 2025 17:13:14 +0330 Subject: [PATCH 8/9] restructrure the add client bot feature --- web/service/tgbot.go | 401 ++++++++++++++++++++++++++++--------------- 1 file changed, 263 insertions(+), 138 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 21baba38..8a7bf827 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -10,6 +10,7 @@ import ( "net" "net/url" "os" + "regexp" "strconv" "strings" "time" @@ -270,61 +271,72 @@ func (t *Tgbot) OnReceive() { if userState, exists := userStates[message.Chat.ID]; exists { switch userState { case "awaiting_id": - client_Id = message.Text - userStates[message.Chat.ID] = "awaiting_email" - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_id", "ClientId=="+client_Id), tu.ReplyKeyboardRemove()) - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) - case "awaiting_password_tr": - client_TrPassword = message.Text - userStates[message.Chat.ID] = "awaiting_email" - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_password", "ClientPass=="+client_TrPassword), tu.ReplyKeyboardRemove()) - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) - case "awaiting_password_sh": - client_ShPassword = message.Text - userStates[message.Chat.ID] = "awaiting_email" - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_password", "ClientPass=="+client_ShPassword), tu.ReplyKeyboardRemove()) - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email), cancel_btn_markup) - case "awaiting_email": - client_Email = message.Text - userStates[message.Chat.ID] = "awaiting_comment" - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_email", "ClientEmail=="+client_Email), tu.ReplyKeyboardRemove()) - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_comment"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment), cancel_btn_markup) - case "awaiting_comment": - client_Comment = message.Text - t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_comment", "ClientComment=="+client_Comment), tu.ReplyKeyboardRemove()) - message_text, _ := t.BuildClientDataMessage() + client_Id = strings.TrimSpace(message.Text) + if t.isSingleWord(client_Id) { + userStates[message.Chat.ID] = "awaiting_id" - inlineKeyboard := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - ), - ) - t.SendMsgToTgbot(message.Chat.ID, message_text, inlineKeyboard) + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + + t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + } else { + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok id", 3, tu.ReplyKeyboardRemove()) + delete(userStates, message.Chat.ID) + } + case "awaiting_password_tr": + client_TrPassword = strings.TrimSpace(message.Text) + if t.isSingleWord(client_TrPassword) { + userStates[message.Chat.ID] = "awaiting_password_tr" + + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + + t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + } else { + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok pass tr", 3, tu.ReplyKeyboardRemove()) + delete(userStates, message.Chat.ID) + } + case "awaiting_password_sh": + client_ShPassword = strings.TrimSpace(message.Text) + if t.isSingleWord(client_ShPassword) { + userStates[message.Chat.ID] = "awaiting_password_sh" + + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + + t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + } else { + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok pass sh", 3, tu.ReplyKeyboardRemove()) + delete(userStates, message.Chat.ID) + } + case "awaiting_email": + client_Email = strings.TrimSpace(message.Text) + if t.isSingleWord(client_Email) { + userStates[message.Chat.ID] = "awaiting_email" + + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + + t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + } else { + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok email", 3, tu.ReplyKeyboardRemove()) + delete(userStates, message.Chat.ID) + } + case "awaiting_comment": + client_Comment = strings.TrimSpace(message.Text) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok comment", 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } @@ -462,7 +474,7 @@ func (t *Tgbot) randomShadowSocksPassword() string { func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool) { chatId := callbackQuery.Message.GetChat().ID - + if isAdmin { // get query from hash storage decodedQuery, err := t.decodeQuery(callbackQuery.Data) @@ -1066,53 +1078,72 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool } t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.addClient")) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseInbound"), inbounds) - case "add_client_ch_default": - var prompt_state string - var prompt_message string + case "add_client_refresh": + messageId := callbackQuery.Message.GetMessageID() + inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) + if err != nil { + t.sendCallbackAnswerTgBot(callbackQuery.ID, err.Error()) + return + } + message_text, err := t.BuildInboundClientDataMessage(inbound.Remark, inbound.Protocol) - - prompt_state ,prompt_message, _ = t.BuildClientChDefaultResponse() - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_id_pass"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(chatId, prompt_message,cancel_btn_markup) - userStates[chatId] = prompt_state - case "default_client_id_pass": - cancel_btn_markup := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_email"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.email_prompt", "ClientEmail=="+client_Email),cancel_btn_markup) + t.addClient(chatId,message_text,messageId) + t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.answers.clientRefreshSuccess", "Email=="+client_Email)) + case "add_client_ch_default_email": userStates[chatId] = "awaiting_email" - case "default_client_email": - inlineKeyboard := tu.InlineKeyboard( + cancel_btn_markup := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_comment"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment),inlineKeyboard) - userStates[chatId] = "awaiting_comment" - case "default_client_comment": - message_text, _ := t.BuildClientDataMessage() - - inlineKeyboard := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), ), ) - - t.SendMsgToTgbot(chatId, message_text, inlineKeyboard) + prompt_message := t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Email) + t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup) + case "add_client_ch_default_id": + userStates[chatId] = "awaiting_id" + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + prompt_message := t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Id) + t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup) + case "add_client_ch_default_pass_tr": + userStates[chatId] = "awaiting_password_tr" + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + prompt_message := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_TrPassword) + t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup) + case "add_client_ch_default_pass_sh": + userStates[chatId] = "awaiting_password_sh" + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + prompt_message := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_ShPassword) + t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup) + case "add_client_ch_default_comment": + userStates[chatId] = "awaiting_comment" + cancel_btn_markup := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"), + ), + ) + prompt_message := t.I18nBot("tgbot.messages.comment_prompt", "ClientComment=="+client_Comment) + t.SendMsgToTgbot(chatId, prompt_message, cancel_btn_markup) + case "add_client_ch_default_traffic": + userStates[chatId] = "awaiting_id" + case "add_client_ch_default_exp": + userStates[chatId] = "awaiting_id" + case "add_client_default_info": + t.SendMsgToTgbotDeleteAfter(chatId, "ok", 5, tu.ReplyKeyboardRemove()) delete(userStates, chatId) case "add_client_cancel": delete(userStates, chatId) - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.cancel"), tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(chatId, t.I18nBot("tgbot.messages.cancel"), 5, tu.ReplyKeyboardRemove()) case "add_client_submit_disable": client_Enable = false _, err := t.SubmitAddClient() @@ -1120,38 +1151,12 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool errorMessage := fmt.Sprintf("%v", err) t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove()) } else { - t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.success_add_client"), tu.ReplyKeyboardRemove()) + t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.answers.successfulOperation")) } } } -func (t *Tgbot) BuildClientChDefaultResponse() (string,string,error) { - - inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) - if err != nil { - logger.Warning("getIboundClients run failed:", err) - return "", "",errors.New(t.I18nBot("tgbot.answers.getInboundsFailed")) - } - - protocol := inbound.Protocol - - switch protocol { - case model.VMESS, model.VLESS: - prompt := t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Id) - return "awaiting_id", prompt,errors.New("unknown protocol") - case model.Trojan: - prompt := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_TrPassword) - return "awaiting_password_tr", prompt,errors.New("unknown protocol") - case model.Shadowsocks: - prompt := t.I18nBot("tgbot.messages.pass_prompt", "ClientPassword=="+client_ShPassword) - return "awaiting_password_sh", prompt,errors.New("unknown protocol") - default: - return "","", errors.New("unknown protocol") - } -} - - func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string ,protocol model.Protocol) (string, error) { var message string @@ -1201,7 +1206,6 @@ func (t *Tgbot) BuildClientDataMessage() (string, error) { } - func (t *Tgbot) BuildJSONForProtocol(protocol model.Protocol) (string, error) { var jsonString string @@ -1940,23 +1944,98 @@ func (t *Tgbot) searchClient(chatId int64, email string, messageID ...int) { } } - func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { - - inlineKeyboard := tu.InlineKeyboard( - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_default")).WithCallbackData("add_client_ch_default"), - ), - tu.InlineKeyboardRow( - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), - tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), - ), - ) - if len(messageID) > 0 { - t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard) - } else { - t.SendMsgToTgbot(chatId, msg, inlineKeyboard) + inbound, err := t.inboundService.GetInbound(receiver_inbound_ID) + if err != nil { + t.SendMsgToTgbot(chatId, err.Error()) + return } + + protocol := inbound.Protocol + + switch protocol { + case model.VMESS, model.VLESS: + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton("Id").WithCallbackData("add_client_ch_default_id"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + if len(messageID) > 0 { + t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard) + } else { + t.SendMsgToTgbot(chatId, msg, inlineKeyboard) + } + case model.Trojan: + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton("pass trojan").WithCallbackData("add_client_ch_default_pass_tr"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + if len(messageID) > 0 { + t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard) + } else { + t.SendMsgToTgbot(chatId, msg, inlineKeyboard) + } + + case model.Shadowsocks: + inlineKeyboard := tu.InlineKeyboard( + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton("pass sh").WithCallbackData("add_client_ch_default_pass_sh"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + ), + tu.InlineKeyboardRow( + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"), + ), + ) + + if len(messageID) > 0 { + t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard) + } else { + t.SendMsgToTgbot(chatId, msg, inlineKeyboard) + } + } + } func (t *Tgbot) searchInbound(chatId int64, remark string) { @@ -2328,4 +2407,50 @@ func (t *Tgbot) editMessageTgBot(chatId int64, messageID int, text string, inlin if _, err := bot.EditMessageText(¶ms); err != nil { logger.Warning(err) } -} \ No newline at end of file +} + + +func (t *Tgbot) SendMsgToTgbotDeleteAfter(chatId int64, msg string, delayInSeconds int, replyMarkup ...telego.ReplyMarkup) { + // Determine if replyMarkup was passed; otherwise, set it to nil + var replyMarkupParam telego.ReplyMarkup + if len(replyMarkup) > 0 { + replyMarkupParam = replyMarkup[0] // Use the first element + } + + // Send the message + sentMsg, err := bot.SendMessage(&telego.SendMessageParams{ + ChatID: tu.ID(chatId), + Text: msg, + ReplyMarkup: replyMarkupParam, // Use the correct replyMarkup value + }) + if err != nil { + logger.Warning("Failed to send message:", err) + return + } + + // Delete the sent message after the specified number of seconds + go func() { + time.Sleep(time.Duration(delayInSeconds) * time.Second) // Wait for the specified delay + t.deleteMessageTgBot(chatId, sentMsg.MessageID) // Delete the message + delete(userStates, chatId) + }() +} + +func (t *Tgbot) deleteMessageTgBot(chatId int64, messageID int) { + params := telego.DeleteMessageParams{ + ChatID: tu.ID(chatId), + MessageID: messageID, + } + if err := bot.DeleteMessage(¶ms); err != nil { + logger.Warning("Failed to delete message:", err) + } else { + logger.Info("Message deleted successfully") + } +} + +func (t *Tgbot) isSingleWord(text string) bool { + text = strings.TrimSpace(text) + re := regexp.MustCompile(`\s+`) + return re.MatchString(text) +} + From f92ba7ab1332cf1079b2592de05272f330572bf5 Mon Sep 17 00:00:00 2001 From: nistootsin <104831639+nistootsin@users.noreply.github.com> Date: Fri, 21 Mar 2025 18:18:17 +0330 Subject: [PATCH 9/9] update all files in web/translation/ --- web/service/tgbot.go | 44 ++++++++++++++-------------- web/translation/translate.en_US.toml | 16 ++++++---- web/translation/translate.es_ES.toml | 29 ++++++++++-------- web/translation/translate.fa_IR.toml | 38 ++++++++++++++---------- web/translation/translate.id_ID.toml | 38 +++++++++++++----------- web/translation/translate.ja_JP.toml | 27 ++++++++++------- web/translation/translate.pt_BR.toml | 29 ++++++++++-------- web/translation/translate.ru_RU.toml | 37 +++++++++++++---------- web/translation/translate.tr_TR.toml | 29 ++++++++++-------- web/translation/translate.uk_UA.toml | 39 +++++++++++++----------- web/translation/translate.vi_VN.toml | 27 ++++++++++------- web/translation/translate.zh_CN.toml | 29 ++++++++++-------- web/translation/translate.zh_TW.toml | 27 ++++++++++------- 13 files changed, 234 insertions(+), 175 deletions(-) diff --git a/web/service/tgbot.go b/web/service/tgbot.go index 8a7bf827..544a7885 100644 --- a/web/service/tgbot.go +++ b/web/service/tgbot.go @@ -281,9 +281,9 @@ func (t *Tgbot) OnReceive() { ), ) - t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup) } else { - t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok id", 3, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_id"), 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } case "awaiting_password_tr": @@ -297,9 +297,9 @@ func (t *Tgbot) OnReceive() { ), ) - t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup) } else { - t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok pass tr", 3, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_password"), 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } case "awaiting_password_sh": @@ -313,9 +313,9 @@ func (t *Tgbot) OnReceive() { ), ) - t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup) } else { - t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok pass sh", 3, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_password"), 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } case "awaiting_email": @@ -329,14 +329,14 @@ func (t *Tgbot) OnReceive() { ), ) - t.SendMsgToTgbot(message.Chat.ID, "invalid input", cancel_btn_markup) + t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup) } else { - t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok email", 3, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_email"), 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } case "awaiting_comment": client_Comment = strings.TrimSpace(message.Text) - t.SendMsgToTgbotDeleteAfter(message.Chat.ID, "ok comment", 3, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_comment"), 3, tu.ReplyKeyboardRemove()) delete(userStates, message.Chat.ID) } @@ -1139,7 +1139,7 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool case "add_client_ch_default_exp": userStates[chatId] = "awaiting_id" case "add_client_default_info": - t.SendMsgToTgbotDeleteAfter(chatId, "ok", 5, tu.ReplyKeyboardRemove()) + t.SendMsgToTgbotDeleteAfter(chatId, t.I18nBot("tgbot.messages.using_default_value"), 3, tu.ReplyKeyboardRemove()) delete(userStates, chatId) case "add_client_cancel": delete(userStates, chatId) @@ -1957,18 +1957,18 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { case model.VMESS, model.VLESS: inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), - tu.InlineKeyboardButton("Id").WithCallbackData("add_client_ch_default_id"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_id")).WithCallbackData("add_client_ch_default_id"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), @@ -1983,18 +1983,18 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { case model.Trojan: inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), - tu.InlineKeyboardButton("pass trojan").WithCallbackData("add_client_ch_default_pass_tr"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_password")).WithCallbackData("add_client_ch_default_pass_tr"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), @@ -2010,18 +2010,18 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) { case model.Shadowsocks: inlineKeyboard := tu.InlineKeyboard( tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Refresh").WithCallbackData("add_client_refresh"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Email").WithCallbackData("add_client_ch_default_email"), - tu.InlineKeyboardButton("pass sh").WithCallbackData("add_client_ch_default_pass_sh"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_email")).WithCallbackData("add_client_ch_default_email"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_password")).WithCallbackData("add_client_ch_default_pass_sh"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.limitTraffic")).WithCallbackData("add_client_ch_default_traffic"), tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.resetExpire")).WithCallbackData("add_client_ch_default_exp"), ), tu.InlineKeyboardRow( - tu.InlineKeyboardButton("Comment").WithCallbackData("add_client_ch_default_comment"), + tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_comment")).WithCallbackData("add_client_ch_default_comment"), ), tu.InlineKeyboardRow( tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"), diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml index 0f9ef708..84947040 100644 --- a/web/translation/translate.en_US.toml +++ b/web/translation/translate.en_US.toml @@ -582,10 +582,10 @@ "yes" = "✅ Yes" "no" = "❌ No" -"received_id" = "🔑📥 Received ID: {{ .ClientId }}" -"received_password" = "🔑📥 Received Password: {{ .ClientPass }}" -"received_email" = "📧📥 Received Email: {{ .ClientEmail }}" -"received_comment" = "💬📥 Received Comment: {{ .ClientComment }}" +"received_id" = "🔑📥 ID updated. Press refresh to see changes." +"received_password" = "🔑📥 Password updated. Press refresh to see changes." +"received_email" = "📧📥 Email updated. Press refresh to see changes." +"received_comment" = "💬📥 Comment updated. Press refresh to see changes." "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." @@ -596,7 +596,8 @@ "client_data_pass" = "🔑 Password: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\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 }}" -"success_add_client" = "🏆 Success! \nYou can now modify it using the 'All Clients' inline button." +"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" @@ -635,7 +636,10 @@ "addClient" = "Add Client" "submitDisable" = "Submit As Disable ✅" "use_default" = "🏷️ Use default" -"change_default" = "🔄⚙️ Change Default" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Password" +"change_email" = "⚙️📧 Email" +"change_comment" = "⚙️💬 Comment" [tgbot.answers] "successfulOperation" = "✅ Operation successful!" diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml index 9837cd5d..0455a13b 100644 --- a/web/translation/translate.es_ES.toml +++ b/web/translation/translate.es_ES.toml @@ -584,21 +584,22 @@ "yes" = "✅ Sí" "no" = "❌ No" -"received_id" = "🔑📥 ID recibido: {{ .ClientId }}" -"received_password" = "🔑📥 Contraseña recibida: {{ .ClientPass }}" -"received_email" = "📧📥 Correo electrónico recibido: {{ .ClientEmail }}" -"received_comment" = "💬📥 Comentario recibido: {{ .ClientComment }}" +"received_id" = "🔑📥 ID actualizada. Pulsa refrescar para ver los cambios." +"received_password" = "🔑📥 Contraseña actualizada. Pulsa refrescar para ver los cambios." +"received_email" = "📧📥 Correo electrónico actualizado. Pulsa refrescar para ver los cambios." +"received_comment" = "💬📥 Comentario actualizado. Pulsa refrescar para ver los cambios." "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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"inbound_client_data_pass" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"client_data_pass" = "🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!" -"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes usar /start en cualquier momento. 🔄" +"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"client_data_pass" = "🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Puedes añadir el cliente a la entrada ahora!" +"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start nuevamente en cualquier momento. 🔄" "error_add_client" = "⚠️ Error:\n\n {{ .error }}" -"success_add_client" = "🏆 ¡Éxito! \nAhora puedes modificarlo usando el botón en línea 'Todos los Clientes'." +"using_default_value" = "Está bien, usaré 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] @@ -637,8 +638,12 @@ "addClient" = "Añadir Cliente" "submitDisable" = "Enviar como Deshabilitado ✅" -"use_default" = "🏷️ Usar por defecto" -"change_default" = "🔄⚙️ Cambiar por defecto" +"use_default" = "🏷️ Usar predeterminado" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Contraseña" +"change_email" = "⚙️📧 Correo electrónico" +"change_comment" = "⚙️💬 Comentario" + [tgbot.answers] "successfulOperation" = "✅ ¡Exitosa!" diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml index 4e5b4420..d156966e 100644 --- a/web/translation/translate.fa_IR.toml +++ b/web/translation/translate.fa_IR.toml @@ -584,21 +584,23 @@ "yes" = "✅ بله" "no" = "❌ خیر" -"received_id" = "🔑📥 شناسه دریافت شده: {{ .ClientId }}" -"received_password" = "🔑📥 رمز عبور دریافت شده: {{ .ClientPass }}" -"received_email" = "📧📥 ایمیل دریافت شده: {{ .ClientEmail }}" -"received_comment" = "💬📥 نظر دریافت شده: {{ .ClientComment }}" -"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💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" -"inbound_client_data_pass" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" -"client_data_id" = "🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" -"client_data_pass" = "🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nاکنون می‌توانید مشتری را به ورودی اضافه کنید!" -"cancel" = "❌ فرایند لغو شد! \n\nشما می‌توانید هر زمان که خواستید /start را اجرا کنید. 🔄" +"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💬 نظر: {{ .ClientComment }}\n\nشما می‌توانید مشتری را به ورودی اضافه کنید!" +"inbound_client_data_pass" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nشما می‌توانید مشتری را به ورودی اضافه کنید!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nشما می‌توانید مشتری را به ورودی اضافه کنید!" +"client_data_pass" = "🔑 رمز عبور: {{ .ClientPass }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nشما می‌توانید مشتری را به ورودی اضافه کنید!" +"cancel" = "❌ فرایند لغو شد! \n\nشما می‌توانید هر زمان با /start دوباره شروع کنید. 🔄" "error_add_client" = "⚠️ خطا:\n\n {{ .error }}" -"success_add_client" = "🏆 موفقیت! اکنون می‌توانید آن را از طریق دکمه 'همه مشتریان' ویرایش کنید." +"using_default_value" = "باشه، من با مقدار پیش‌فرض ادامه میدم. 😊" +"incorrect_input" = "ورودی شما نامعتبر است.\nعبارات باید پیوسته باشند بدون فاصله.\nمثال صحیح: aaaaaa\nمثال غلط: aaa aaa 🚫" + [tgbot.buttons] @@ -635,10 +637,14 @@ "getBanLogs" = "گزارش های بلوک را دریافت کنید" "allClients" = "همه مشتریان" -"addClient" = "افزودن مشتری" +"addClient" = "اضافه کردن مشتری" "submitDisable" = "ارسال به عنوان غیرفعال ✅" "use_default" = "🏷️ استفاده از پیش‌فرض" -"change_default" = "🔄⚙️ تغییر پیش‌فرض" +"change_id" = "⚙️🔑 شناسه" +"change_password" = "⚙️🔑 رمز عبور" +"change_email" = "⚙️📧 ایمیل" +"change_comment" = "⚙️💬 نظر" + [tgbot.answers] "successfulOperation" = "✅ انجام شد!" diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml index 4d44cc5a..e6c586d6 100644 --- a/web/translation/translate.id_ID.toml +++ b/web/translation/translate.id_ID.toml @@ -583,22 +583,22 @@ "yes" = "✅ Ya" "no" = "❌ Tidak" - -"received_id" = "🔑📥 ID yang diterima: {{ .ClientId }}" -"received_password" = "🔑📥 Kata sandi yang diterima: {{ .ClientPass }}" -"received_email" = "📧📥 Email yang diterima: {{ .ClientEmail }}" -"received_comment" = "💬📥 Komentar yang diterima: {{ .ClientComment }}" -"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💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" -"inbound_client_data_pass" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" -"client_data_pass" = "🔑 Kata Sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nAnda dapat menambahkan klien ke inbound sekarang!" -"cancel" = "❌ Proses Dibatalkan! \n\nAnda dapat memulai lagi kapan saja dengan /start. 🔄" +"received_id" = "🔑📥 ID diperbarui. Tekan refresh untuk melihat perubahan." +"received_password" = "🔑📥 Kata sandi diperbarui. Tekan refresh untuk melihat perubahan." +"received_email" = "📧📥 Email diperbarui. Tekan refresh untuk melihat perubahan." +"received_comment" = "💬📥 Komentar diperbarui. Tekan refresh untuk melihat perubahan." +"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💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" +"inbound_client_data_pass" = "🔄 Masuk: {{ .InboundRemark }}\n\n🔑 Kata sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" +"client_data_pass" = "🔑 Kata sandi: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Komentar: {{ .ClientComment }}\n\nSekarang Anda dapat menambahkan klien ke inbound!" +"cancel" = "❌ Proses dibatalkan! \n\nAnda dapat /start kapan saja. 🔄" "error_add_client" = "⚠️ Kesalahan:\n\n {{ .error }}" -"success_add_client" = "🏆 Berhasil! \nSekarang Anda dapat mengeditnya menggunakan tombol 'Semua Klien'." +"using_default_value" = "Baik, saya akan tetap dengan nilai default. 😊" +"incorrect_input" = "Input Anda tidak valid.\nFrasa harus berurutan tanpa spasi.\nContoh yang benar: aaaaaa\nContoh yang salah: aaa aaa 🚫" [tgbot.buttons] @@ -637,8 +637,12 @@ "addClient" = "Tambah Klien" "submitDisable" = "Kirim Sebagai Nonaktif ✅" -"use_default" = "🏷️ Gunakan Default" -"change_default" = "🔄⚙️ Ubah Default" +"use_default" = "🏷️ Gunakan default" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Kata Sandi" +"change_email" = "⚙️📧 Email" +"change_comment" = "⚙️💬 Komentar" + [tgbot.answers] "successfulOperation" = "✅ Operasi berhasil!" diff --git a/web/translation/translate.ja_JP.toml b/web/translation/translate.ja_JP.toml index abf802ea..68a8ab2a 100644 --- a/web/translation/translate.ja_JP.toml +++ b/web/translation/translate.ja_JP.toml @@ -584,21 +584,22 @@ "yes" = "✅ はい" "no" = "❌ いいえ" -"received_id" = "🔑📥 受信したID: {{ .ClientId }}" -"received_password" = "🔑📥 受信したパスワード: {{ .ClientPass }}" -"received_email" = "📧📥 受信したメール: {{ .ClientEmail }}" -"received_comment" = "💬📥 受信したコメント: {{ .ClientComment }}" -"id_prompt" = "🔑 デフォルトのID: {{ .ClientId }}\n\nIDを入力してください。" -"pass_prompt" = "🔑 デフォルトのパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。" -"email_prompt" = "📧 デフォルトのメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。" -"comment_prompt" = "💬 デフォルトのコメント: {{ .ClientComment }}\n\nコメントを入力してください。" +"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💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" "inbound_client_data_pass" = "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" "client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" "client_data_pass" = "🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!" -"cancel" = "❌ プロセスがキャンセルされました!\n\nいつでも /start を使用できます。 🔄" +"cancel" = "❌ 処理がキャンセルされました! \n\nいつでも/startを使用して再開できます。 🔄" "error_add_client" = "⚠️ エラー:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!\n「すべてのクライアント」ボタンを使用して、編集できます。" +"using_default_value" = "わかりました、デフォルト値を使用します。😊" +"incorrect_input" = "入力が無効です。\nフレーズはスペースなしで連続している必要があります。\n正しい例: aaaaaa\n間違った例: aaa aaa 🚫" [tgbot.buttons] @@ -638,7 +639,11 @@ "addClient" = "クライアントを追加" "submitDisable" = "無効として送信 ✅" "use_default" = "🏷️ デフォルトを使用" -"change_default" = "🔄⚙️ デフォルトを変更" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 パスワード" +"change_email" = "⚙️📧 メール" +"change_comment" = "⚙️💬 コメント" + [tgbot.answers] "successfulOperation" = "✅ 成功!" diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml index d05f73cf..8f9e36f3 100644 --- a/web/translation/translate.pt_BR.toml +++ b/web/translation/translate.pt_BR.toml @@ -584,21 +584,22 @@ "yes" = "✅ Sim" "no" = "❌ Não" -"received_id" = "🔑📥 ID recebido: {{ .ClientId }}" -"received_password" = "🔑📥 Senha recebida: {{ .ClientPass }}" -"received_email" = "📧📥 E-mail recebido: {{ .ClientEmail }}" -"received_comment" = "💬📥 Comentário recebido: {{ .ClientComment }}" +"received_id" = "🔑📥 ID atualizado. Pressione atualizar para ver as mudanças." +"received_password" = "🔑📥 Senha atualizada. Pressione atualizar para ver as mudanças." +"received_email" = "📧📥 Email atualizado. Pressione atualizar para ver as mudanças." +"received_comment" = "💬📥 Comentário atualizado. Pressione atualizar para ver as mudanças." "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." +"email_prompt" = "📧 Email padrão: {{ .ClientEmail }}\n\nDigite seu email." "comment_prompt" = "💬 Comentário padrão: {{ .ClientComment }}\n\nDigite seu comentário." -"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" -"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" -"client_data_pass" = "🔑 Senha: {{ .ClientPass }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!" -"cancel" = "❌ Processo cancelado! \n\nVocê pode usar /start a qualquer momento. 🔄" +"inbound_client_data_id" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"inbound_client_data_pass" = "🔄 Entrada: {{ .InboundRemark }}\n\n🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"client_data_pass" = "🔑 Senha: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!" +"cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄" "error_add_client" = "⚠️ Erro:\n\n {{ .error }}" -"success_add_client" = "🏆 Sucesso! \nAgora você pode editá-lo usando o botão 'Todos os Clientes'." +"using_default_value" = "Ok, 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] @@ -638,7 +639,11 @@ "addClient" = "Adicionar Cliente" "submitDisable" = "Enviar como Desativado ✅" "use_default" = "🏷️ Usar padrão" -"change_default" = "🔄⚙️ Alterar Padrão" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Senha" +"change_email" = "⚙️📧 E-mail" +"change_comment" = "⚙️💬 Comentário" + [tgbot.answers] "successfulOperation" = "✅ Operação bem-sucedida!" diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml index a9461ac4..eb98c44d 100644 --- a/web/translation/translate.ru_RU.toml +++ b/web/translation/translate.ru_RU.toml @@ -584,21 +584,22 @@ "yes" = "✅ Да" "no" = "❌ Нет" -"received_id" = "🔑📥 Полученный ID: {{ .ClientId }}" -"received_password" = "🔑📥 Полученный пароль: {{ .ClientPass }}" -"received_email" = "📧📥 Полученный email: {{ .ClientEmail }}" -"received_comment" = "💬📥 Полученный комментарий: {{ .ClientComment }}" -"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💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" -"inbound_client_data_pass" = "🔄 Входящий: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" -"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" -"cancel" = "❌ Процесс отменен! \n\nВы можете начать заново в любое время с помощью /start. 🔄" +"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Введите ваш email." +"comment_prompt" = "💬 Комментарий по умолчанию: {{ .ClientComment }}\n\nВведите ваш комментарий." +"inbound_client_data_id" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"inbound_client_data_pass" = "🔄 Входящие: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!" +"cancel" = "❌ Процесс отменен! \n\nВы можете /start снова в любое время. 🔄" "error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}" -"success_add_client" = "🏆 Успех! \nТеперь вы можете изменить его, используя кнопку 'Все клиенты'." +"using_default_value" = "Хорошо, я оставлю значение по умолчанию. 😊" +"incorrect_input" = "Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫" [tgbot.buttons] @@ -636,9 +637,13 @@ "allClients" = "Все клиенты" "addClient" = "Добавить клиента" -"submitDisable" = "Отправить как отключено ✅" +"submitDisable" = "Отправить как отключенный ✅" "use_default" = "🏷️ Использовать по умолчанию" -"change_default" = "🔄⚙️ Изменить по умолчанию" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Пароль" +"change_email" = "⚙️📧 Электронная почта" +"change_comment" = "⚙️💬 Комментарий" + [tgbot.answers] "successfulOperation" = "✅ Успешно!" diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml index d81e6ce9..f947895e 100644 --- a/web/translation/translate.tr_TR.toml +++ b/web/translation/translate.tr_TR.toml @@ -584,21 +584,22 @@ "yes" = "✅ Evet" "no" = "❌ Hayır" -"received_id" = "🔑📥 Alınan Kimlik: {{ .ClientId }}" -"received_password" = "🔑📥 Alınan Şifre: {{ .ClientPass }}" -"received_email" = "📧📥 Alınan E-posta: {{ .ClientEmail }}" -"received_comment" = "💬📥 Alınan Yorum: {{ .ClientComment }}" -"id_prompt" = "🔑 Varsayılan Kimlik: {{ .ClientId }}\n\nKimliğinizi girin." +"received_id" = "🔑📥 ID güncellendi. Değişiklikleri görmek için yenileyin." +"received_password" = "🔑📥 Şifre güncellendi. Değişiklikleri görmek için yenileyin." +"received_email" = "📧📥 E-posta güncellendi. Değişiklikleri görmek için yenileyin." +"received_comment" = "💬📥 Yorum güncellendi. Değişiklikleri görmek için yenileyin." +"id_prompt" = "🔑 Varsayılan ID: {{ .ClientId }}\n\nID'nizi girin." "pass_prompt" = "🔑 Varsayılan Şifre: {{ .ClientPassword }}\n\nŞifrenizi girin." "email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-posta adresinizi girin." "comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu girin." -"inbound_client_data_id" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" -"inbound_client_data_pass" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" -"client_data_id" = "🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" -"client_data_pass" = "🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!" -"cancel" = "❌ İşlem iptal edildi! \n\nİstediğiniz zaman /start kullanabilirsiniz. 🔄" +"inbound_client_data_id" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri gelen kutusuna eklenebilir!" +"inbound_client_data_pass" = "🔄 Gelen: {{ .InboundRemark }}\n\n🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri gelen kutusuna eklenebilir!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri gelen kutusuna eklenebilir!" +"client_data_pass" = "🔑 Şifre: {{ .ClientPass }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nŞimdi müşteri gelen kutusuna eklenebilir!" +"cancel" = "❌ İşlem iptal edildi! \n\nHer zaman /start ile tekrar başlayabilirsiniz. 🔄" "error_add_client" = "⚠️ Hata:\n\n {{ .error }}" -"success_add_client" = "🏆 Başarılı! \nArtık 'Tüm Müşteriler' düğmesini kullanarak düzenleyebilirsiniz." +"using_default_value" = "Tamam, varsayılan değeri kullanacağım. 😊" +"incorrect_input" = "Girdiğiniz geçersiz.\nCümleler boşluk olmadan ardışık olmalıdır.\nDoğru örnek: aaaaaa\nYanlış örnek: aaa aaa 🚫" [tgbot.buttons] @@ -638,7 +639,11 @@ "addClient" = "Müşteri Ekle" "submitDisable" = "Devre Dışı Olarak Gönder ✅" "use_default" = "🏷️ Varsayılanı Kullan" -"change_default" = "🔄⚙️ Varsayılanı Değiştir" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Şifre" +"change_email" = "⚙️📧 E-posta" +"change_comment" = "⚙️💬 Yorum" + [tgbot.answers] "successfulOperation" = "✅ İşlem başarılı!" diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml index c66b66d0..3d150509 100644 --- a/web/translation/translate.uk_UA.toml +++ b/web/translation/translate.uk_UA.toml @@ -584,21 +584,22 @@ "yes" = "✅ Так" "no" = "❌ Ні" -"received_id" = "🔑📥 Отриманий ID: {{ .ClientId }}" -"received_password" = "🔑📥 Отриманий пароль: {{ .ClientPass }}" -"received_email" = "📧📥 Отриманий email: {{ .ClientEmail }}" -"received_comment" = "💬📥 Отриманий коментар: {{ .ClientComment }}" -"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💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" -"inbound_client_data_pass" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" -"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" -"cancel" = "❌ Процес скасовано! \n\nВи можете використати /start у будь-який час. 🔄" +"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💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"inbound_client_data_pass" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 Пароль: {{ .ClientPass }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!" +"cancel" = "❌ Процес скасовано! \n\nВи можете /start знову в будь-який час. 🔄" "error_add_client" = "⚠️ Помилка:\n\n {{ .error }}" -"success_add_client" = "🏆 Успіх! \nТепер ви можете редагувати його за допомогою кнопки 'Усі клієнти'." +"using_default_value" = "Добре, я залишу значення за замовчуванням. 😊" +"incorrect_input" = "Ваш ввід недійсний.\nФрази повинні йти без пробілів.\nПравильний приклад: aaaaaa\nНеправильний приклад: aaa aaa 🚫" [tgbot.buttons] @@ -636,9 +637,13 @@ "allClients" = "Всі Клієнти" "addClient" = "Додати клієнта" -"submitDisable" = "Надіслати як вимкнено ✅" -"use_default" = "🏷️ Використати за замовчуванням" -"change_default" = "🔄⚙️ Змінити за замовчуванням" +"submitDisable" = "Надіслати як вимкнене ✅" +"use_default" = "🏷️ Використовувати за замовчуванням" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 Пароль" +"change_email" = "⚙️📧 Електронна пошта" +"change_comment" = "⚙️💬 Коментар" + [tgbot.answers] "successfulOperation" = "✅ Операція успішна!" diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml index d625d181..4df863ff 100644 --- a/web/translation/translate.vi_VN.toml +++ b/web/translation/translate.vi_VN.toml @@ -584,21 +584,22 @@ "yes" = "✅ Có" "no" = "❌ Không" -"received_id" = "🔑📥 ID nhận được: {{ .ClientId }}" -"received_password" = "🔑📥 Mật khẩu nhận được: {{ .ClientPass }}" -"received_email" = "📧📥 Email nhận được: {{ .ClientEmail }}" -"received_comment" = "💬📥 Bình luận nhận được: {{ .ClientComment }}" +"received_id" = "🔑📥 ID đã được cập nhật. Nhấn làm mới để xem thay đổi." +"received_password" = "🔑📥 Mật khẩu đã được cập nhật. Nhấn làm mới để xem thay đổi." +"received_email" = "📧📥 Email đã được cập nhật. Nhấn làm mới để xem thay đổi." +"received_comment" = "💬📥 Bình luận đã được cập nhật. Nhấn làm mới để xem thay đổi." "id_prompt" = "🔑 ID mặc định: {{ .ClientId }}\n\nNhập ID của bạn." "pass_prompt" = "🔑 Mật khẩu mặc định: {{ .ClientPassword }}\n\nNhập mật khẩu của bạn." "email_prompt" = "📧 Email mặc định: {{ .ClientEmail }}\n\nNhập email của bạn." "comment_prompt" = "💬 Bình luận mặc định: {{ .ClientComment }}\n\nNhập bình luận của bạn." -"inbound_client_data_id" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" -"inbound_client_data_pass" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" -"client_data_pass" = "🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào danh sách đến ngay bây giờ!" -"cancel" = "❌ Quá trình đã bị hủy! \n\nBạn có thể sử dụng /start bất cứ lúc nào. 🔄" +"inbound_client_data_id" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào inbound ngay bây giờ!" +"inbound_client_data_pass" = "🔄 Dữ liệu đến: {{ .InboundRemark }}\n\n🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào inbound ngay bây giờ!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào inbound ngay bây giờ!" +"client_data_pass" = "🔑 Mật khẩu: {{ .ClientPass }}\n📧 Email: {{ .ClientEmail }}\n💬 Bình luận: {{ .ClientComment }}\n\nBạn có thể thêm khách hàng vào inbound ngay bây giờ!" +"cancel" = "❌ Quá trình đã hủy! \n\nBạn có thể /start lại bất cứ lúc nào. 🔄" "error_add_client" = "⚠️ Lỗi:\n\n {{ .error }}" -"success_add_client" = "🏆 Thành công! \nGiờ đây bạn có thể chỉnh sửa bằng nút 'Tất Cả Khách Hàng'." +"using_default_value" = "Được rồi, tôi sẽ giữ giá trị mặc định. 😊" +"incorrect_input" = "Dữ liệu bạn nhập không hợp lệ.\nCác cụm từ phải liên tiếp mà không có khoảng trắng.\nVí dụ đúng: aaaaaa\nVí dụ sai: aaa aaa 🚫" [tgbot.buttons] @@ -638,7 +639,11 @@ "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_default" = "🔄⚙️ Thay đổi 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!" diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml index 09ad64b3..c8c9892f 100644 --- a/web/translation/translate.zh_CN.toml +++ b/web/translation/translate.zh_CN.toml @@ -584,21 +584,22 @@ "yes" = "✅ 是的" "no" = "❌ 没有" -"received_id" = "🔑📥 接收到的ID: {{ .ClientId }}" -"received_password" = "🔑📥 接收到的密码: {{ .ClientPass }}" -"received_email" = "📧📥 接收到的电子邮件: {{ .ClientEmail }}" -"received_comment" = "💬📥 接收到的评论: {{ .ClientComment }}" -"id_prompt" = "🔑 默认ID: {{ .ClientId }}\n\n请输入您的ID。" +"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💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" -"inbound_client_data_pass" = "🔄 传入数据: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" -"client_data_pass" = "🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n您现在可以将客户添加到传入列表!" -"cancel" = "❌ 过程已取消!\n\n您可以随时使用 /start。 🔄" +"inbound_client_data_id" = "🔄 传入数据: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在可以将客户添加到传入数据中!" +"inbound_client_data_pass" = "🔄 传入数据: {{ .InboundRemark }}\n\n🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在可以将客户添加到传入数据中!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在可以将客户添加到传入数据中!" +"client_data_pass" = "🔑 密码: {{ .ClientPass }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在可以将客户添加到传入数据中!" +"cancel" = "❌ 过程已取消! \n\n您可以随时重新开始 /start。 🔄" "error_add_client" = "⚠️ 错误:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!\n您现在可以使用'所有客户'按钮进行修改。" +"using_default_value" = "好的,我将使用默认值。😊" +"incorrect_input" = "您的输入无效。\n短语应连续无空格。\n正确示例: aaaaaa\n错误示例: aaa aaa 🚫" [tgbot.buttons] @@ -638,7 +639,11 @@ "addClient" = "添加客户" "submitDisable" = "提交为禁用 ✅" "use_default" = "🏷️ 使用默认" -"change_default" = "🔄⚙️ 更改默认" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 密码" +"change_email" = "⚙️📧 邮箱" +"change_comment" = "⚙️💬 评论" + [tgbot.answers] "successfulOperation" = "✅ 成功!" diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml index 7f7fa85c..0b19547b 100644 --- a/web/translation/translate.zh_TW.toml +++ b/web/translation/translate.zh_TW.toml @@ -584,21 +584,22 @@ "yes" = "✅ 是的" "no" = "❌ 沒有" -"received_id" = "🔑📥 接收到的 ID: {{ .ClientId }}" -"received_password" = "🔑📥 接收到的密碼: {{ .ClientPass }}" -"received_email" = "📧📥 接收到的電子郵件: {{ .ClientEmail }}" -"received_comment" = "💬📥 接收到的評論: {{ .ClientComment }}" +"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💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" -"inbound_client_data_pass" = "🔄 傳入數據: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" -"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" -"client_data_pass" = "🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n您現在可以將客戶添加到傳入列表!" -"cancel" = "❌ 過程已取消!\n\n您可以隨時使用 /start。 🔄" +"inbound_client_data_id" = "🔄 進來資料: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n現在您可以將客戶添加到進來資料中!" +"inbound_client_data_pass" = "🔄 進來資料: {{ .InboundRemark }}\n\n🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n現在您可以將客戶添加到進來資料中!" +"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n現在您可以將客戶添加到進來資料中!" +"client_data_pass" = "🔑 密碼: {{ .ClientPass }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n現在您可以將客戶添加到進來資料中!" +"cancel" = "❌ 處理已取消! \n\n您可以隨時重新開始 /start。 🔄" "error_add_client" = "⚠️ 錯誤:\n\n {{ .error }}" -"success_add_client" = "🏆 成功!\n您現在可以使用'所有客戶'按鈕進行修改。" +"using_default_value" = "好的,我會使用預設值。😊" +"incorrect_input" = "您的輸入無效。\n短語應該連貫而不應有空格。\n正確範例: aaaaaa\n錯誤範例: aaa aaa 🚫" [tgbot.buttons] @@ -638,7 +639,11 @@ "addClient" = "新增客戶" "submitDisable" = "提交為停用 ✅" "use_default" = "🏷️ 使用預設" -"change_default" = "🔄⚙️ 更改預設" +"change_id" = "⚙️🔑 ID" +"change_password" = "⚙️🔑 密碼" +"change_email" = "⚙️📧 電子郵件" +"change_comment" = "⚙️💬 評論" + [tgbot.answers] "successfulOperation" = "✅ 成功!"