mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-04-19 21:42:24 +00:00
Compare commits
6 commits
cbdcf1c344
...
f92ba7ab13
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f92ba7ab13 | ||
![]() |
f717cbe40e | ||
![]() |
8f9e4acd2c | ||
![]() |
db140a1e9b | ||
![]() |
db945e2fbd | ||
![]() |
667fac15f4 |
20 changed files with 566 additions and 382 deletions
|
@ -253,8 +253,8 @@ location /sub {
|
||||||
- Parch Linux
|
- Parch Linux
|
||||||
- Manjaro
|
- Manjaro
|
||||||
- Armbian
|
- Armbian
|
||||||
- AlmaLinux 8.0+
|
- AlmaLinux 9.5+
|
||||||
- Rocky Linux 8+
|
- Rocky Linux 9.5+
|
||||||
- Oracle Linux 8+
|
- Oracle Linux 8+
|
||||||
- OpenSUSE Tubleweed
|
- OpenSUSE Tubleweed
|
||||||
- Amazon Linux 2023
|
- Amazon Linux 2023
|
||||||
|
|
|
@ -254,8 +254,8 @@ location /sub {
|
||||||
- Parch Linux
|
- Parch Linux
|
||||||
- Manjaro
|
- Manjaro
|
||||||
- Armbian
|
- Armbian
|
||||||
- AlmaLinux 8.0+
|
- AlmaLinux 9.5+
|
||||||
- Rocky Linux 8+
|
- Rocky Linux 9.5+
|
||||||
- Oracle Linux 8+
|
- Oracle Linux 8+
|
||||||
- OpenSUSE Tubleweed
|
- OpenSUSE Tubleweed
|
||||||
- Amazon Linux 2023
|
- Amazon Linux 2023
|
||||||
|
|
|
@ -258,8 +258,8 @@ location /sub {
|
||||||
- Parch Linux
|
- Parch Linux
|
||||||
- Manjaro
|
- Manjaro
|
||||||
- Armbian
|
- Armbian
|
||||||
- AlmaLinux 8.0+
|
- AlmaLinux 9.5+
|
||||||
- Rocky Linux 8+
|
- Rocky Linux 9.5+
|
||||||
- Oracle Linux 8+
|
- Oracle Linux 8+
|
||||||
- OpenSUSE Tubleweed
|
- OpenSUSE Tubleweed
|
||||||
- Amazon Linux 2023
|
- Amazon Linux 2023
|
||||||
|
|
|
@ -257,8 +257,8 @@ location /sub {
|
||||||
- Parch Linux
|
- Parch Linux
|
||||||
- Manjaro
|
- Manjaro
|
||||||
- Armbian
|
- Armbian
|
||||||
- AlmaLinux 8.0+
|
- AlmaLinux 9.5+
|
||||||
- Rocky Linux 8+
|
- Rocky Linux 9.5+
|
||||||
- Oracle Linux 8+
|
- Oracle Linux 8+
|
||||||
- OpenSUSE Tubleweed
|
- OpenSUSE Tubleweed
|
||||||
- Amazon Linux 2023
|
- Amazon Linux 2023
|
||||||
|
|
|
@ -254,8 +254,8 @@ location /sub {
|
||||||
- Parch Linux
|
- Parch Linux
|
||||||
- Manjaro
|
- Manjaro
|
||||||
- Armbian
|
- Armbian
|
||||||
- AlmaLinux 8.0+
|
- AlmaLinux 9.5+
|
||||||
- Rocky Linux 8+
|
- Rocky Linux 9.5+
|
||||||
- Oracle Linux 8+
|
- Oracle Linux 8+
|
||||||
- OpenSUSE Tubleweed
|
- OpenSUSE Tubleweed
|
||||||
- Amazon Linux 2023
|
- Amazon Linux 2023
|
||||||
|
|
12
install.sh
12
install.sh
|
@ -79,12 +79,12 @@ elif [[ "${release}" == "debian" ]]; then
|
||||||
echo -e "${red} Please use Debian 12 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use Debian 12 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "almalinux" ]]; then
|
elif [[ "${release}" == "almalinux" ]]; then
|
||||||
if [[ ${os_version} -lt 80 ]]; then
|
if [[ ${os_version} -lt 95 ]]; then
|
||||||
echo -e "${red} Please use AlmaLinux 8.0 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use AlmaLinux 9.5 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "rocky" ]]; then
|
elif [[ "${release}" == "rocky" ]]; then
|
||||||
if [[ ${os_version} -lt 8 ]]; then
|
if [[ ${os_version} -lt 95 ]]; then
|
||||||
echo -e "${red} Please use Rocky Linux 8 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use Rocky Linux 9.5 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "ol" ]]; then
|
elif [[ "${release}" == "ol" ]]; then
|
||||||
if [[ ${os_version} -lt 8 ]]; then
|
if [[ ${os_version} -lt 8 ]]; then
|
||||||
|
@ -106,8 +106,8 @@ else
|
||||||
echo "- Parch Linux"
|
echo "- Parch Linux"
|
||||||
echo "- Manjaro"
|
echo "- Manjaro"
|
||||||
echo "- Armbian"
|
echo "- Armbian"
|
||||||
echo "- AlmaLinux 8.0+"
|
echo "- AlmaLinux 9.5+"
|
||||||
echo "- Rocky Linux 8+"
|
echo "- Rocky Linux 9.5+"
|
||||||
echo "- Oracle Linux 8+"
|
echo "- Oracle Linux 8+"
|
||||||
echo "- OpenSUSE Tumbleweed"
|
echo "- OpenSUSE Tumbleweed"
|
||||||
echo "- Amazon Linux 2023"
|
echo "- Amazon Linux 2023"
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -270,61 +271,72 @@ func (t *Tgbot) OnReceive() {
|
||||||
if userState, exists := userStates[message.Chat.ID]; exists {
|
if userState, exists := userStates[message.Chat.ID]; exists {
|
||||||
switch userState {
|
switch userState {
|
||||||
case "awaiting_id":
|
case "awaiting_id":
|
||||||
client_Id = message.Text
|
client_Id = strings.TrimSpace(message.Text)
|
||||||
userStates[message.Chat.ID] = "awaiting_email"
|
if t.isSingleWord(client_Id) {
|
||||||
t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.received_id", "ClientId=="+client_Id), tu.ReplyKeyboardRemove())
|
userStates[message.Chat.ID] = "awaiting_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(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()
|
|
||||||
|
|
||||||
inlineKeyboard := tu.InlineKeyboard(
|
cancel_btn_markup := tu.InlineKeyboard(
|
||||||
tu.InlineKeyboardRow(
|
tu.InlineKeyboardRow(
|
||||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"),
|
||||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
),
|
||||||
),
|
)
|
||||||
)
|
|
||||||
t.SendMsgToTgbot(message.Chat.ID, message_text, inlineKeyboard)
|
t.SendMsgToTgbot(message.Chat.ID, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup)
|
||||||
|
} else {
|
||||||
|
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_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, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup)
|
||||||
|
} else {
|
||||||
|
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_password"), 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, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup)
|
||||||
|
} else {
|
||||||
|
t.SendMsgToTgbotDeleteAfter(message.Chat.ID, t.I18nBot("tgbot.messages.received_password"), 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, t.I18nBot("tgbot.messages.incorrect_input"), cancel_btn_markup)
|
||||||
|
} else {
|
||||||
|
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, t.I18nBot("tgbot.messages.received_comment"), 3, tu.ReplyKeyboardRemove())
|
||||||
delete(userStates, message.Chat.ID)
|
delete(userStates, message.Chat.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1066,53 +1078,72 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool
|
||||||
}
|
}
|
||||||
t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.addClient"))
|
t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.buttons.addClient"))
|
||||||
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseInbound"), inbounds)
|
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.chooseInbound"), inbounds)
|
||||||
case "add_client_ch_default":
|
case "add_client_refresh":
|
||||||
var prompt_state string
|
messageId := callbackQuery.Message.GetMessageID()
|
||||||
var prompt_message string
|
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)
|
||||||
|
|
||||||
|
t.addClient(chatId,message_text,messageId)
|
||||||
prompt_state ,prompt_message, _ = t.BuildClientChDefaultResponse()
|
t.sendCallbackAnswerTgBot(callbackQuery.ID, t.I18nBot("tgbot.answers.clientRefreshSuccess", "Email=="+client_Email))
|
||||||
cancel_btn_markup := tu.InlineKeyboard(
|
case "add_client_ch_default_email":
|
||||||
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)
|
|
||||||
userStates[chatId] = "awaiting_email"
|
userStates[chatId] = "awaiting_email"
|
||||||
case "default_client_email":
|
cancel_btn_markup := tu.InlineKeyboard(
|
||||||
inlineKeyboard := tu.InlineKeyboard(
|
|
||||||
tu.InlineKeyboardRow(
|
tu.InlineKeyboardRow(
|
||||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("default_client_comment"),
|
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.use_default")).WithCallbackData("add_client_default_info"),
|
||||||
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"),
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
prompt_message := t.I18nBot("tgbot.messages.id_prompt", "ClientId=="+client_Email)
|
||||||
t.SendMsgToTgbot(chatId, message_text, inlineKeyboard)
|
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, t.I18nBot("tgbot.messages.using_default_value"), 3, tu.ReplyKeyboardRemove())
|
||||||
delete(userStates, chatId)
|
delete(userStates, chatId)
|
||||||
case "add_client_cancel":
|
case "add_client_cancel":
|
||||||
delete(userStates, chatId)
|
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":
|
case "add_client_submit_disable":
|
||||||
client_Enable = false
|
client_Enable = false
|
||||||
_, err := t.SubmitAddClient()
|
_, err := t.SubmitAddClient()
|
||||||
|
@ -1120,38 +1151,12 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool
|
||||||
errorMessage := fmt.Sprintf("%v", err)
|
errorMessage := fmt.Sprintf("%v", err)
|
||||||
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove())
|
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.messages.error_add_client", "error=="+errorMessage), tu.ReplyKeyboardRemove())
|
||||||
} else {
|
} 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) {
|
func (t *Tgbot) BuildInboundClientDataMessage(inbound_remark string ,protocol model.Protocol) (string, error) {
|
||||||
var message string
|
var message string
|
||||||
|
|
||||||
|
@ -1201,7 +1206,6 @@ func (t *Tgbot) BuildClientDataMessage() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func (t *Tgbot) BuildJSONForProtocol(protocol model.Protocol) (string, error) {
|
func (t *Tgbot) BuildJSONForProtocol(protocol model.Protocol) (string, error) {
|
||||||
var jsonString string
|
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) {
|
func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
||||||
|
inbound, err := t.inboundService.GetInbound(receiver_inbound_ID)
|
||||||
inlineKeyboard := tu.InlineKeyboard(
|
if err != nil {
|
||||||
tu.InlineKeyboardRow(
|
t.SendMsgToTgbot(chatId, err.Error())
|
||||||
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.change_default")).WithCallbackData("add_client_ch_default"),
|
return
|
||||||
),
|
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protocol := inbound.Protocol
|
||||||
|
|
||||||
|
switch protocol {
|
||||||
|
case model.VMESS, model.VLESS:
|
||||||
|
inlineKeyboard := tu.InlineKeyboard(
|
||||||
|
tu.InlineKeyboardRow(
|
||||||
|
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"),
|
||||||
|
),
|
||||||
|
tu.InlineKeyboardRow(
|
||||||
|
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(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"),
|
||||||
|
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(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"),
|
||||||
|
),
|
||||||
|
tu.InlineKeyboardRow(
|
||||||
|
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(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"),
|
||||||
|
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(t.I18nBot("tgbot.buttons.refresh")).WithCallbackData("add_client_refresh"),
|
||||||
|
),
|
||||||
|
tu.InlineKeyboardRow(
|
||||||
|
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(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"),
|
||||||
|
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) {
|
func (t *Tgbot) searchInbound(chatId int64, remark string) {
|
||||||
|
@ -2329,3 +2408,49 @@ func (t *Tgbot) editMessageTgBot(chatId int64, messageID int, text string, inlin
|
||||||
logger.Warning(err)
|
logger.Warning(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -582,10 +582,10 @@
|
||||||
"yes" = "✅ Yes"
|
"yes" = "✅ Yes"
|
||||||
"no" = "❌ No"
|
"no" = "❌ No"
|
||||||
|
|
||||||
"received_id" = "🔑📥 Received ID: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID updated. Press refresh to see changes."
|
||||||
"received_password" = "🔑📥 Received Password: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Password updated. Press refresh to see changes."
|
||||||
"received_email" = "📧📥 Received Email: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Email updated. Press refresh to see changes."
|
||||||
"received_comment" = "💬📥 Received Comment: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Comment updated. Press refresh to see changes."
|
||||||
"id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id."
|
"id_prompt" = "🔑 Default ID: {{ .ClientId }}\n\nEnter your id."
|
||||||
"pass_prompt" = "🔑 Default Password: {{ .ClientPassword }}\n\nEnter your password."
|
"pass_prompt" = "🔑 Default Password: {{ .ClientPassword }}\n\nEnter your password."
|
||||||
"email_prompt" = "📧 Default Email: {{ .ClientEmail }}\n\nEnter your email."
|
"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!"
|
"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. 🔄"
|
"cancel" = "❌ Process Canceled! \n\nYou can /start again anytime. 🔄"
|
||||||
"error_add_client" = "⚠️ Error:\n\n {{ .error }}"
|
"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]
|
[tgbot.buttons]
|
||||||
"closeKeyboard" = "❌ Close Keyboard"
|
"closeKeyboard" = "❌ Close Keyboard"
|
||||||
|
@ -635,7 +636,10 @@
|
||||||
"addClient" = "Add Client"
|
"addClient" = "Add Client"
|
||||||
"submitDisable" = "Submit As Disable ✅"
|
"submitDisable" = "Submit As Disable ✅"
|
||||||
"use_default" = "🏷️ Use default"
|
"use_default" = "🏷️ Use default"
|
||||||
"change_default" = "🔄⚙️ Change Default"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 Password"
|
||||||
|
"change_email" = "⚙️📧 Email"
|
||||||
|
"change_comment" = "⚙️💬 Comment"
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Operation successful!"
|
"successfulOperation" = "✅ Operation successful!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Sí"
|
"yes" = "✅ Sí"
|
||||||
"no" = "❌ No"
|
"no" = "❌ No"
|
||||||
|
|
||||||
"received_id" = "🔑📥 ID recibido: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID actualizada. Pulsa refrescar para ver los cambios."
|
||||||
"received_password" = "🔑📥 Contraseña recibida: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Contraseña actualizada. Pulsa refrescar para ver los cambios."
|
||||||
"received_email" = "📧📥 Correo electrónico recibido: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Correo electrónico actualizado. Pulsa refrescar para ver los cambios."
|
||||||
"received_comment" = "💬📥 Comentario recibido: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Comentario actualizado. Pulsa refrescar para ver los cambios."
|
||||||
"id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID."
|
"id_prompt" = "🔑 ID predeterminado: {{ .ClientId }}\n\nIntroduce tu ID."
|
||||||
"pass_prompt" = "🔑 Contraseña predeterminada: {{ .ClientPassword }}\n\nIntroduce tu contraseña."
|
"pass_prompt" = "🔑 Contraseña predeterminada: {{ .ClientPassword }}\n\nIntroduce tu contraseña."
|
||||||
"email_prompt" = "📧 Correo electrónico predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo electrónico."
|
"email_prompt" = "📧 Correo electrónico predeterminado: {{ .ClientEmail }}\n\nIntroduce tu correo electrónico."
|
||||||
"comment_prompt" = "💬 Comentario predeterminado: {{ .ClientComment }}\n\nIntroduce tu comentario."
|
"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_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" = "🔄 Inbound: {{ .InboundRemark }}\n\n🔑 Contraseña: {{ .ClientPass }}\n📧 Correo electrónico: {{ .ClientEmail }}\n💬 Comentario: {{ .ClientComment }}\n\n¡Ahora puedes agregar al cliente a inbound!"
|
"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¡Ahora puedes agregar al cliente a inbound!"
|
"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¡Ahora puedes agregar al cliente a inbound!"
|
"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 usar /start en cualquier momento. 🔄"
|
"cancel" = "❌ ¡Proceso cancelado! \n\nPuedes /start nuevamente en cualquier momento. 🔄"
|
||||||
"error_add_client" = "⚠️ Error:\n\n {{ .error }}"
|
"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]
|
[tgbot.buttons]
|
||||||
|
@ -637,8 +638,12 @@
|
||||||
|
|
||||||
"addClient" = "Añadir Cliente"
|
"addClient" = "Añadir Cliente"
|
||||||
"submitDisable" = "Enviar como Deshabilitado ✅"
|
"submitDisable" = "Enviar como Deshabilitado ✅"
|
||||||
"use_default" = "🏷️ Usar por defecto"
|
"use_default" = "🏷️ Usar predeterminado"
|
||||||
"change_default" = "🔄⚙️ Cambiar por defecto"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 Contraseña"
|
||||||
|
"change_email" = "⚙️📧 Correo electrónico"
|
||||||
|
"change_comment" = "⚙️💬 Comentario"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ ¡Exitosa!"
|
"successfulOperation" = "✅ ¡Exitosa!"
|
||||||
|
|
|
@ -584,21 +584,23 @@
|
||||||
"yes" = "✅ بله"
|
"yes" = "✅ بله"
|
||||||
"no" = "❌ خیر"
|
"no" = "❌ خیر"
|
||||||
|
|
||||||
"received_id" = "🔑📥 شناسه دریافت شده: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID بهروزرسانی شد. لطفاً برای مشاهده تغییرات، دکمه رفرش را فشار دهید."
|
||||||
"received_password" = "🔑📥 رمز عبور دریافت شده: {{ .ClientPass }}"
|
"received_password" = "🔑📥 رمز عبور بهروزرسانی شد. لطفاً برای مشاهده تغییرات، دکمه رفرش را فشار دهید."
|
||||||
"received_email" = "📧📥 ایمیل دریافت شده: {{ .ClientEmail }}"
|
"received_email" = "📧📥 ایمیل بهروزرسانی شد. لطفاً برای مشاهده تغییرات، دکمه رفرش را فشار دهید."
|
||||||
"received_comment" = "💬📥 نظر دریافت شده: {{ .ClientComment }}"
|
"received_comment" = "💬📥 نظر بهروزرسانی شد. لطفاً برای مشاهده تغییرات، دکمه رفرش را فشار دهید."
|
||||||
"id_prompt" = "🔑 شناسه پیشفرض: {{ .ClientId }}\n\nشناسه خود را وارد کنید."
|
"id_prompt" = "🔑 ID پیشفرض: {{ .ClientId }}\n\nلطفاً ID خود را وارد کنید."
|
||||||
"pass_prompt" = "🔑 رمز عبور پیشفرض: {{ .ClientPassword }}\n\nرمز عبور خود را وارد کنید."
|
"pass_prompt" = "🔑 رمز عبور پیشفرض: {{ .ClientPassword }}\n\nلطفاً رمز عبور خود را وارد کنید."
|
||||||
"email_prompt" = "📧 ایمیل پیشفرض: {{ .ClientEmail }}\n\nایمیل خود را وارد کنید."
|
"email_prompt" = "📧 ایمیل پیشفرض: {{ .ClientEmail }}\n\nلطفاً ایمیل خود را وارد کنید."
|
||||||
"comment_prompt" = "💬 نظر پیشفرض: {{ .ClientComment }}\n\nنظر خود را وارد کنید."
|
"comment_prompt" = "💬 نظر پیشفرض: {{ .ClientComment }}\n\nلطفاً نظر خود را وارد کنید."
|
||||||
"inbound_client_data_id" = "🔄 ورودی: {{ .InboundRemark }}\n\n🔑 شناسه: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .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اکنون میتوانید مشتری را به ورودی اضافه کنید!"
|
"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_id" = "🔑 ID: {{ .ClientId }}\n📧 ایمیل: {{ .ClientEmail }}\n💬 نظر: {{ .ClientComment }}\n\nشما میتوانید مشتری را به ورودی اضافه کنید!"
|
||||||
"client_data_pass" = "🔑 رمز عبور: {{ .ClientPass }}\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 }}"
|
"error_add_client" = "⚠️ خطا:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 موفقیت! اکنون میتوانید آن را از طریق دکمه 'همه مشتریان' ویرایش کنید."
|
"using_default_value" = "باشه، من با مقدار پیشفرض ادامه میدم. 😊"
|
||||||
|
"incorrect_input" = "ورودی شما نامعتبر است.\nعبارات باید پیوسته باشند بدون فاصله.\nمثال صحیح: aaaaaa\nمثال غلط: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -635,10 +637,14 @@
|
||||||
"getBanLogs" = "گزارش های بلوک را دریافت کنید"
|
"getBanLogs" = "گزارش های بلوک را دریافت کنید"
|
||||||
"allClients" = "همه مشتریان"
|
"allClients" = "همه مشتریان"
|
||||||
|
|
||||||
"addClient" = "افزودن مشتری"
|
"addClient" = "اضافه کردن مشتری"
|
||||||
"submitDisable" = "ارسال به عنوان غیرفعال ✅"
|
"submitDisable" = "ارسال به عنوان غیرفعال ✅"
|
||||||
"use_default" = "🏷️ استفاده از پیشفرض"
|
"use_default" = "🏷️ استفاده از پیشفرض"
|
||||||
"change_default" = "🔄⚙️ تغییر پیشفرض"
|
"change_id" = "⚙️🔑 شناسه"
|
||||||
|
"change_password" = "⚙️🔑 رمز عبور"
|
||||||
|
"change_email" = "⚙️📧 ایمیل"
|
||||||
|
"change_comment" = "⚙️💬 نظر"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ انجام شد!"
|
"successfulOperation" = "✅ انجام شد!"
|
||||||
|
|
|
@ -583,22 +583,22 @@
|
||||||
"yes" = "✅ Ya"
|
"yes" = "✅ Ya"
|
||||||
"no" = "❌ Tidak"
|
"no" = "❌ Tidak"
|
||||||
|
|
||||||
|
"received_id" = "🔑📥 ID diperbarui. Tekan refresh untuk melihat perubahan."
|
||||||
"received_id" = "🔑📥 ID yang diterima: {{ .ClientId }}"
|
"received_password" = "🔑📥 Kata sandi diperbarui. Tekan refresh untuk melihat perubahan."
|
||||||
"received_password" = "🔑📥 Kata sandi yang diterima: {{ .ClientPass }}"
|
"received_email" = "📧📥 Email diperbarui. Tekan refresh untuk melihat perubahan."
|
||||||
"received_email" = "📧📥 Email yang diterima: {{ .ClientEmail }}"
|
"received_comment" = "💬📥 Komentar diperbarui. Tekan refresh untuk melihat perubahan."
|
||||||
"received_comment" = "💬📥 Komentar yang diterima: {{ .ClientComment }}"
|
"id_prompt" = "🔑 ID default: {{ .ClientId }}\n\nMasukkan ID Anda."
|
||||||
"id_prompt" = "🔑 ID Default: {{ .ClientId }}\n\nMasukkan ID Anda."
|
"pass_prompt" = "🔑 Kata sandi default: {{ .ClientPassword }}\n\nMasukkan kata sandi Anda."
|
||||||
"pass_prompt" = "🔑 Kata Sandi Default: {{ .ClientPassword }}\n\nMasukkan kata sandi Anda."
|
"email_prompt" = "📧 Email default: {{ .ClientEmail }}\n\nMasukkan email Anda."
|
||||||
"email_prompt" = "📧 Email Default: {{ .ClientEmail }}\n\nMasukkan email Anda."
|
"comment_prompt" = "💬 Komentar default: {{ .ClientComment }}\n\nMasukkan komentar 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_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\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\nAnda dapat menambahkan klien ke inbound sekarang!"
|
"client_data_id" = "🔑 ID: {{ .ClientId }}\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\nAnda dapat menambahkan klien ke inbound sekarang!"
|
"client_data_pass" = "🔑 Kata sandi: {{ .ClientPass }}\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\nAnda dapat menambahkan klien ke inbound sekarang!"
|
"cancel" = "❌ Proses dibatalkan! \n\nAnda dapat /start kapan saja. 🔄"
|
||||||
"cancel" = "❌ Proses Dibatalkan! \n\nAnda dapat memulai lagi kapan saja dengan /start. 🔄"
|
|
||||||
"error_add_client" = "⚠️ Kesalahan:\n\n {{ .error }}"
|
"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]
|
[tgbot.buttons]
|
||||||
|
@ -637,8 +637,12 @@
|
||||||
|
|
||||||
"addClient" = "Tambah Klien"
|
"addClient" = "Tambah Klien"
|
||||||
"submitDisable" = "Kirim Sebagai Nonaktif ✅"
|
"submitDisable" = "Kirim Sebagai Nonaktif ✅"
|
||||||
"use_default" = "🏷️ Gunakan Default"
|
"use_default" = "🏷️ Gunakan default"
|
||||||
"change_default" = "🔄⚙️ Ubah Default"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 Kata Sandi"
|
||||||
|
"change_email" = "⚙️📧 Email"
|
||||||
|
"change_comment" = "⚙️💬 Komentar"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Operasi berhasil!"
|
"successfulOperation" = "✅ Operasi berhasil!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ はい"
|
"yes" = "✅ はい"
|
||||||
"no" = "❌ いいえ"
|
"no" = "❌ いいえ"
|
||||||
|
|
||||||
"received_id" = "🔑📥 受信したID: {{ .ClientId }}"
|
"received_id" = "🔑📥 IDが更新されました。変更を見るにはリフレッシュを押してください。"
|
||||||
"received_password" = "🔑📥 受信したパスワード: {{ .ClientPass }}"
|
"received_password" = "🔑📥 パスワードが更新されました。変更を見るにはリフレッシュを押してください。"
|
||||||
"received_email" = "📧📥 受信したメール: {{ .ClientEmail }}"
|
"received_email" = "📧📥 メールが更新されました。変更を見るにはリフレッシュを押してください。"
|
||||||
"received_comment" = "💬📥 受信したコメント: {{ .ClientComment }}"
|
"received_comment" = "💬📥 コメントが更新されました。変更を見るにはリフレッシュを押してください。"
|
||||||
"id_prompt" = "🔑 デフォルトのID: {{ .ClientId }}\n\nIDを入力してください。"
|
"id_prompt" = "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。"
|
||||||
"pass_prompt" = "🔑 デフォルトのパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。"
|
"pass_prompt" = "🔑 デフォルトパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。"
|
||||||
"email_prompt" = "📧 デフォルトのメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。"
|
"email_prompt" = "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールアドレスを入力してください。"
|
||||||
"comment_prompt" = "💬 デフォルトのコメント: {{ .ClientComment }}\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_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今すぐクライアントをインバウンドに追加できます!"
|
"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_id" = "🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐクライアントをインバウンドに追加できます!"
|
||||||
"client_data_pass" = "🔑 パスワード: {{ .ClientPass }}\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 }}"
|
"error_add_client" = "⚠️ エラー:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 成功!\n「すべてのクライアント」ボタンを使用して、編集できます。"
|
"using_default_value" = "わかりました、デフォルト値を使用します。😊"
|
||||||
|
"incorrect_input" = "入力が無効です。\nフレーズはスペースなしで連続している必要があります。\n正しい例: aaaaaa\n間違った例: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "クライアントを追加"
|
"addClient" = "クライアントを追加"
|
||||||
"submitDisable" = "無効として送信 ✅"
|
"submitDisable" = "無効として送信 ✅"
|
||||||
"use_default" = "🏷️ デフォルトを使用"
|
"use_default" = "🏷️ デフォルトを使用"
|
||||||
"change_default" = "🔄⚙️ デフォルトを変更"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 パスワード"
|
||||||
|
"change_email" = "⚙️📧 メール"
|
||||||
|
"change_comment" = "⚙️💬 コメント"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ 成功!"
|
"successfulOperation" = "✅ 成功!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Sim"
|
"yes" = "✅ Sim"
|
||||||
"no" = "❌ Não"
|
"no" = "❌ Não"
|
||||||
|
|
||||||
"received_id" = "🔑📥 ID recebido: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID atualizado. Pressione atualizar para ver as mudanças."
|
||||||
"received_password" = "🔑📥 Senha recebida: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Senha atualizada. Pressione atualizar para ver as mudanças."
|
||||||
"received_email" = "📧📥 E-mail recebido: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Email atualizado. Pressione atualizar para ver as mudanças."
|
||||||
"received_comment" = "💬📥 Comentário recebido: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Comentário atualizado. Pressione atualizar para ver as mudanças."
|
||||||
"id_prompt" = "🔑 ID padrão: {{ .ClientId }}\n\nDigite seu ID."
|
"id_prompt" = "🔑 ID padrão: {{ .ClientId }}\n\nDigite seu ID."
|
||||||
"pass_prompt" = "🔑 Senha padrão: {{ .ClientPassword }}\n\nDigite sua senha."
|
"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."
|
"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_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📧 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📧 Email: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nVocê pode adicionar o cliente à entrada agora!"
|
||||||
"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
|
"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📧 E-mail: {{ .ClientEmail }}\n💬 Comentário: {{ .ClientComment }}\n\nAgora você pode adicionar o cliente à entrada!"
|
"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 usar /start a qualquer momento. 🔄"
|
"cancel" = "❌ Processo cancelado! \n\nVocê pode /start novamente a qualquer momento. 🔄"
|
||||||
"error_add_client" = "⚠️ Erro:\n\n {{ .error }}"
|
"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]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "Adicionar Cliente"
|
"addClient" = "Adicionar Cliente"
|
||||||
"submitDisable" = "Enviar como Desativado ✅"
|
"submitDisable" = "Enviar como Desativado ✅"
|
||||||
"use_default" = "🏷️ Usar padrão"
|
"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]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Operação bem-sucedida!"
|
"successfulOperation" = "✅ Operação bem-sucedida!"
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
"copySuccess" = "Скопировано"
|
"copySuccess" = "Скопировано"
|
||||||
"sure" = "Да"
|
"sure" = "Да"
|
||||||
"encryption" = "Шифрование"
|
"encryption" = "Шифрование"
|
||||||
"transmission" = "Протокол передачи"
|
"transmission" = "Протокол"
|
||||||
"host" = "Хост"
|
"host" = "Хост"
|
||||||
"path" = "Путь"
|
"path" = "Путь"
|
||||||
"camouflage" = "Маскировка"
|
"camouflage" = "Маскировка"
|
||||||
|
@ -67,11 +67,11 @@
|
||||||
"emptyReverseDesc" = "Нет добавленных обратных прокси."
|
"emptyReverseDesc" = "Нет добавленных обратных прокси."
|
||||||
|
|
||||||
[menu]
|
[menu]
|
||||||
"theme" = "Тема"
|
"theme" = "Тема оформления"
|
||||||
"dark" = "Темная"
|
"dark" = "Темная"
|
||||||
"ultraDark" = "Ультра темная"
|
"ultraDark" = "Ультра темная"
|
||||||
"dashboard" = "Статус системы"
|
"dashboard" = "Статус системы"
|
||||||
"inbounds" = "Подключения"
|
"inbounds" = "Входящие подключения"
|
||||||
"settings" = "Настройки панели"
|
"settings" = "Настройки панели"
|
||||||
"xray" = "Настройки Xray"
|
"xray" = "Настройки Xray"
|
||||||
"logout" = "Выход"
|
"logout" = "Выход"
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
"xraySwitchVersionDialog" = "Переключить версию Xray"
|
"xraySwitchVersionDialog" = "Переключить версию Xray"
|
||||||
"xraySwitchVersionDialogDesc" = "Вы точно хотите сменить версию Xray?"
|
"xraySwitchVersionDialogDesc" = "Вы точно хотите сменить версию Xray?"
|
||||||
"dontRefresh" = "Установка в процессе. Не обновляйте страницу"
|
"dontRefresh" = "Установка в процессе. Не обновляйте страницу"
|
||||||
"logs" = "Логи"
|
"logs" = "Журнал"
|
||||||
"config" = "Конфигурация"
|
"config" = "Конфигурация"
|
||||||
"backup" = "Резервная копия"
|
"backup" = "Резервная копия"
|
||||||
"backupTitle" = "База данных резервных копий"
|
"backupTitle" = "База данных резервных копий"
|
||||||
|
@ -126,10 +126,10 @@
|
||||||
"importDatabaseDesc" = "Нажмите, чтобы выбрать и загрузить файл .db с вашего устройства для восстановления базы данных из резервной копии."
|
"importDatabaseDesc" = "Нажмите, чтобы выбрать и загрузить файл .db с вашего устройства для восстановления базы данных из резервной копии."
|
||||||
|
|
||||||
[pages.inbounds]
|
[pages.inbounds]
|
||||||
"title" = "Подключения"
|
"title" = "Входящие подключения"
|
||||||
"totalDownUp" = "Общий объем отправленного/полученного трафика"
|
"totalDownUp" = "Объем отправленного/полученного трафика"
|
||||||
"totalUsage" = "Всего использовано"
|
"totalUsage" = "Всего использовано"
|
||||||
"inboundCount" = "Количество подключений"
|
"inboundCount" = "Всего входящих подключений"
|
||||||
"operate" = "Меню"
|
"operate" = "Меню"
|
||||||
"enable" = "Включить"
|
"enable" = "Включить"
|
||||||
"remark" = "Примечание"
|
"remark" = "Примечание"
|
||||||
|
@ -139,20 +139,20 @@
|
||||||
"details" = "Подробнее"
|
"details" = "Подробнее"
|
||||||
"transportConfig" = "Транспорт"
|
"transportConfig" = "Транспорт"
|
||||||
"expireDate" = "Дата окончания"
|
"expireDate" = "Дата окончания"
|
||||||
"resetTraffic" = "Сбросить трафик"
|
"resetTraffic" = "Сброс статистики трафика"
|
||||||
"addInbound" = "Добавить подключение"
|
"addInbound" = "Создать входящее подключение"
|
||||||
"generalActions" = "Общие действия"
|
"generalActions" = "Общие действия"
|
||||||
"autoRefresh" = "Автообновление"
|
"autoRefresh" = "Автообновление"
|
||||||
"autoRefreshInterval" = "Интервал"
|
"autoRefreshInterval" = "Интервал"
|
||||||
"create" = "Создать"
|
"create" = "Создать"
|
||||||
"update" = "Обновить"
|
"update" = "Обновить"
|
||||||
"modifyInbound" = "Изменить подключение"
|
"modifyInbound" = "Изменить входящее подключение"
|
||||||
"deleteInbound" = "Удалить подключение"
|
"deleteInbound" = "Удалить входящее подключение"
|
||||||
"deleteInboundContent" = "Вы уверены, что хотите удалить подключение?"
|
"deleteInboundContent" = "Вы уверены, что хотите удалить входящее подключение?"
|
||||||
"deleteClient" = "Удалить клиента"
|
"deleteClient" = "Удалить клиента"
|
||||||
"deleteClientContent" = "Вы уверены, что хотите удалить клиента?"
|
"deleteClientContent" = "Вы уверены, что хотите удалить клиента?"
|
||||||
"resetTrafficContent" = "Вы уверены, что хотите сбросить трафик?"
|
"resetTrafficContent" = "Вы уверены, что хотите сбросить трафик?"
|
||||||
"copyLink" = "Копировать ключ"
|
"copyLink" = "Копировать ссылку"
|
||||||
"address" = "Адрес"
|
"address" = "Адрес"
|
||||||
"network" = "Сеть"
|
"network" = "Сеть"
|
||||||
"destinationPort" = "Порт назначения"
|
"destinationPort" = "Порт назначения"
|
||||||
|
@ -162,36 +162,36 @@
|
||||||
"totalFlow" = "Общий расход"
|
"totalFlow" = "Общий расход"
|
||||||
"leaveBlankToNeverExpire" = "Оставьте пустым, чтобы не истекало"
|
"leaveBlankToNeverExpire" = "Оставьте пустым, чтобы не истекало"
|
||||||
"noRecommendKeepDefault" = "Рекомендуется оставить настройки по умолчанию"
|
"noRecommendKeepDefault" = "Рекомендуется оставить настройки по умолчанию"
|
||||||
"certificatePath" = "Путь к файлу"
|
"certificatePath" = "Путь к сертификату"
|
||||||
"certificateContent" = "Содержимое файла"
|
"certificateContent" = "Содержимое сертификата"
|
||||||
"publicKey" = "Публичный ключ"
|
"publicKey" = "Публичный ключ"
|
||||||
"privatekey" = "Закрытый ключ"
|
"privatekey" = "Закрытый ключ"
|
||||||
"clickOnQRcode" = "Нажмите на QR-код, чтобы скопировать"
|
"clickOnQRcode" = "Нажмите на QR-код, чтобы скопировать"
|
||||||
"client" = "Клиент"
|
"client" = "Клиент"
|
||||||
"export" = "Экспорт ключей"
|
"export" = "Экспорт ссылок"
|
||||||
"clone" = "Клонировать"
|
"clone" = "Клонировать"
|
||||||
"cloneInbound" = "Клонировать"
|
"cloneInbound" = "Клонировать"
|
||||||
"cloneInboundContent" = "Будут клонированы все настройки подключений, за исключением списка клиентов, порта и IP-адреса прослушивания"
|
"cloneInboundContent" = "Будут клонированы все настройки входящих подключений, за исключением списка клиентов, порта и IP-адреса прослушивания"
|
||||||
"cloneInboundOk" = "Клонировано"
|
"cloneInboundOk" = "Клонировано"
|
||||||
"resetAllTraffic" = "Сбросить трафик всех подключений"
|
"resetAllTraffic" = "Сброс статистики всего трафика"
|
||||||
"resetAllTrafficTitle" = "Сброс трафика всех подключений"
|
"resetAllTrafficTitle" = "Сброс трафика всех подключений"
|
||||||
"resetAllTrafficContent" = "Вы уверены, что хотите сбросить трафик всех подключений?"
|
"resetAllTrafficContent" = "Вы уверены, что хотите сбросить трафик всех входящих подключений?"
|
||||||
"resetInboundClientTraffics" = "Сбросить трафик пользователей"
|
"resetInboundClientTraffics" = "Сброс входящего трафика клиента"
|
||||||
"resetInboundClientTrafficTitle" = "Сброс трафика пользователей"
|
"resetInboundClientTrafficTitle" = "Сброс трафика клиентов"
|
||||||
"resetInboundClientTrafficContent" = "Вы уверены, что хотите сбросить весь трафик для этих пользователей?"
|
"resetInboundClientTrafficContent" = "Вы уверены, что хотите сбросить весь трафик для этих клиентов?"
|
||||||
"resetAllClientTraffics" = "Сбросить трафик всех пользователей"
|
"resetAllClientTraffics" = "Сброс трафик всех клиентов"
|
||||||
"resetAllClientTrafficTitle" = "Сброс трафика всех пользователей"
|
"resetAllClientTrafficTitle" = "Сброс трафика всех клиентов"
|
||||||
"resetAllClientTrafficContent" = "Вы уверены, что хотите сбросить трафик всех пользователей?"
|
"resetAllClientTrafficContent" = "Вы уверены, что хотите сбросить трафик всех клиентов?"
|
||||||
"delDepletedClients" = "Удалить отключенных пользователей"
|
"delDepletedClients" = "Удалить отключенных клиентов"
|
||||||
"delDepletedClientsTitle" = "Удаление отключенных пользователей"
|
"delDepletedClientsTitle" = "Удаление отключенных клиентов"
|
||||||
"delDepletedClientsContent" = "Вы уверены, что хотите удалить всех отключенных пользователей?"
|
"delDepletedClientsContent" = "Вы уверены, что хотите удалить всех отключенных клиентов?"
|
||||||
"email" = "Email"
|
"email" = "Email"
|
||||||
"emailDesc" = "Пожалуйста, укажите уникальный Email"
|
"emailDesc" = "Пожалуйста, укажите уникальный Email"
|
||||||
"IPLimit" = "Лимит по IP"
|
"IPLimit" = "Лимит по IP"
|
||||||
"IPLimitDesc" = "Ограничение количества подключений с одного IP (0 – отключить)"
|
"IPLimitDesc" = "Ограничение количества подключений с одного IP (0 – отключить)"
|
||||||
"IPLimitlog" = "Лог IP-адресов"
|
"IPLimitlog" = "Лог IP-адресов"
|
||||||
"IPLimitlogDesc" = "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить список)"
|
"IPLimitlogDesc" = "Лог IP-адресов (перед включением лога IP-адресов, вы должны очистить список)"
|
||||||
"IPLimitlogclear" = "Очистить лог"
|
"IPLimitlogclear" = "Очистить журнал"
|
||||||
"setDefaultCert" = "Установить сертификат с панели"
|
"setDefaultCert" = "Установить сертификат с панели"
|
||||||
"telegramDesc" = "Пожалуйста, укажите ID чата Telegram. (используйте команду '/id' в боте) или (@userinfobot)"
|
"telegramDesc" = "Пожалуйста, укажите ID чата Telegram. (используйте команду '/id' в боте) или (@userinfobot)"
|
||||||
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее', также вы можете использовать одно и то же имя для нескольких конфигураций"
|
"subscriptionDesc" = "Вы можете найти свою ссылку подписки в разделе 'Подробнее', также вы можете использовать одно и то же имя для нескольких конфигураций"
|
||||||
|
@ -200,14 +200,14 @@
|
||||||
"inboundData" = "Входящие данные"
|
"inboundData" = "Входящие данные"
|
||||||
"exportInbound" = "Экспорт входящих"
|
"exportInbound" = "Экспорт входящих"
|
||||||
"import" = "Импортировать"
|
"import" = "Импортировать"
|
||||||
"importInbound" = "Импортировать подключение"
|
"importInbound" = "Импорт входящего подключения"
|
||||||
|
|
||||||
[pages.client]
|
[pages.client]
|
||||||
"add" = "Добавить пользователя"
|
"add" = "Создать клиента"
|
||||||
"edit" = "Редактировать пользователя"
|
"edit" = "Редактировать клиента"
|
||||||
"submitAdd" = "Добавить пользователя"
|
"submitAdd" = "Добавить"
|
||||||
"submitEdit" = "Сохранить изменения"
|
"submitEdit" = "Сохранить"
|
||||||
"clientCount" = "Количество пользователей"
|
"clientCount" = "Количество клиентов"
|
||||||
"bulk" = "Добавить несколько"
|
"bulk" = "Добавить несколько"
|
||||||
"method" = "Метод"
|
"method" = "Метод"
|
||||||
"first" = "Первый"
|
"first" = "Первый"
|
||||||
|
@ -344,12 +344,12 @@
|
||||||
"proxyAndServer" = "Прокси и сервер"
|
"proxyAndServer" = "Прокси и сервер"
|
||||||
"intervals" = "Интервалы"
|
"intervals" = "Интервалы"
|
||||||
"information" = "Информация"
|
"information" = "Информация"
|
||||||
"language" = "Язык"
|
"language" = "Язык интерфейса"
|
||||||
"telegramBotLanguage" = "Язык Telegram-бота"
|
"telegramBotLanguage" = "Язык Telegram-бота"
|
||||||
|
|
||||||
[pages.xray]
|
[pages.xray]
|
||||||
"title" = "Настройки Xray"
|
"title" = "Настройки Xray"
|
||||||
"save" = "Сохранить настройки"
|
"save" = "Сохранить"
|
||||||
"restart" = "Перезапустить Xray"
|
"restart" = "Перезапустить Xray"
|
||||||
"basicTemplate" = "Базовый шаблон"
|
"basicTemplate" = "Базовый шаблон"
|
||||||
"advancedTemplate" = "Расширенный шаблон"
|
"advancedTemplate" = "Расширенный шаблон"
|
||||||
|
@ -358,16 +358,16 @@
|
||||||
"logConfigs" = "Журнал"
|
"logConfigs" = "Журнал"
|
||||||
"logConfigsDesc" = "Логи могут замедлять работу сервера. Включайте только нужные вам виды логов при необходимости!"
|
"logConfigsDesc" = "Логи могут замедлять работу сервера. Включайте только нужные вам виды логов при необходимости!"
|
||||||
"blockConfigs" = "Блокировка конфигураций"
|
"blockConfigs" = "Блокировка конфигураций"
|
||||||
"blockConfigsDesc" = "Эти параметры не позволят пользователям подключаться к определенным протоколам и веб-сайтам"
|
"blockConfigsDesc" = "Эти параметры не позволят клиентам подключаться к определенным протоколам и веб-сайтам"
|
||||||
"basicRouting" = "Базовые соединения"
|
"basicRouting" = "Базовые соединения"
|
||||||
"blockConnectionsConfigsDesc" = "Эти параметры будут блокировать трафик в зависимости от запрашиваемой страны."
|
"blockConnectionsConfigsDesc" = "Эти параметры будут блокировать трафик в зависимости от запрашиваемой страны."
|
||||||
"directConnectionsConfigsDesc" = "Прямое соединение гарантирует, что определенный трафик не будет перенаправлен через другой сервер."
|
"directConnectionsConfigsDesc" = "Прямое соединение гарантирует, что определенный трафик не будет перенаправлен через другой сервер."
|
||||||
"blockips" = "Блокировать IP-адреса"
|
"blockips" = "Заблокированные IP-адреса"
|
||||||
"blockdomains" = "Блокировать домены"
|
"blockdomains" = "Заблокированные домены"
|
||||||
"directips" = "Прямые IP-адреса"
|
"directips" = "Прямые IP-адреса"
|
||||||
"directdomains" = "Прямые домены"
|
"directdomains" = "Прямые домены"
|
||||||
"ipv4Routing" = "Правила IPv4"
|
"ipv4Routing" = "Правила IPv4"
|
||||||
"ipv4RoutingDesc" = "Эти параметры позволят пользователям маршрутизироваться к целевым доменам только через IPv4"
|
"ipv4RoutingDesc" = "Эти параметры позволят клиентам маршрутизироваться к целевым доменам только через IPv4"
|
||||||
"warpRouting" = "Правила WARP"
|
"warpRouting" = "Правила WARP"
|
||||||
"warpRoutingDesc" = "Внимание: перед использованием этих параметров установите WARP в режиме прокси-сервера socks5 на свой сервер, следуя инструкциям на GitHub панели. WARP будет направлять трафик на веб-сайты через серверы Cloudflare"
|
"warpRoutingDesc" = "Внимание: перед использованием этих параметров установите WARP в режиме прокси-сервера socks5 на свой сервер, следуя инструкциям на GitHub панели. WARP будет направлять трафик на веб-сайты через серверы Cloudflare"
|
||||||
"Template" = "Шаблон конфигурации Xray"
|
"Template" = "Шаблон конфигурации Xray"
|
||||||
|
@ -376,16 +376,16 @@
|
||||||
"FreedomStrategyDesc" = "Установка стратегии вывода сети в протоколе Freedom"
|
"FreedomStrategyDesc" = "Установка стратегии вывода сети в протоколе Freedom"
|
||||||
"RoutingStrategy" = "Настройка стратегии маршрутизации доменов"
|
"RoutingStrategy" = "Настройка стратегии маршрутизации доменов"
|
||||||
"RoutingStrategyDesc" = "Установка общей стратегии маршрутизации разрешения DNS"
|
"RoutingStrategyDesc" = "Установка общей стратегии маршрутизации разрешения DNS"
|
||||||
"Torrent" = "Запрет использования BitTorrent"
|
"Torrent" = "Заблокировать BitTorrent"
|
||||||
"TorrentDesc" = "Изменение шаблона конфигурации для предупреждения использования BitTorrent пользователями"
|
"TorrentDesc" = "Запретить входящий/исходящий трафик, в котором фигурирует протокол BitTorrent"
|
||||||
"Family" = "Блокируйте вредоносное ПО и контент для взрослых"
|
"Family" = "Семейный режим"
|
||||||
"FamilyDesc" = "DNS-преобразователи Cloudflare для блокировки вредоносного ПО и контента для взрослых в целях защиты семьи."
|
"FamilyDesc" = "Использовать DNS-сервера Cloudflare для блокировки вредоносного ПО и контента для взрослых в целях защиты семьи."
|
||||||
"Inbounds" = "Входящие"
|
"Inbounds" = "Входящее соединение"
|
||||||
"InboundsDesc" = "Изменение шаблона конфигурации для подключения определенных пользователей"
|
"InboundsDesc" = "Изменение шаблона конфигурации для подключения определенных клиентов"
|
||||||
"Outbounds" = "Исходящие"
|
"Outbounds" = "Исходящее соединение"
|
||||||
"Balancers" = "Балансировщик нагрузки"
|
"Balancers" = "Балансировщик"
|
||||||
"OutboundsDesc" = "Изменение шаблона конфигурации, чтобы определить исходящие пути для этого сервера"
|
"OutboundsDesc" = "Изменение шаблона конфигурации, чтобы определить исходящие пути для этого сервера"
|
||||||
"Routings" = "Правила маршрутизации"
|
"Routings" = "Маршрутизация"
|
||||||
"RoutingsDesc" = "Важен приоритет каждого правила!"
|
"RoutingsDesc" = "Важен приоритет каждого правила!"
|
||||||
"completeTemplate" = "Все"
|
"completeTemplate" = "Все"
|
||||||
"logLevel" = "Уровень журнала"
|
"logLevel" = "Уровень журнала"
|
||||||
|
@ -394,9 +394,9 @@
|
||||||
"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключает журналы доступа."
|
"accessLogDesc" = "Путь к файлу журнала доступа. Специальное значение «none» отключает журналы доступа."
|
||||||
"errorLog" = "Журнал ошибок"
|
"errorLog" = "Журнал ошибок"
|
||||||
"errorLogDesc" = "Путь к файлу журнала ошибок. Специальное значение «none» отключает журналы ошибок."
|
"errorLogDesc" = "Путь к файлу журнала ошибок. Специальное значение «none» отключает журналы ошибок."
|
||||||
"dnsLog" = "DNS Журнал"
|
"dnsLog" = "Журнал DNS"
|
||||||
"dnsLogDesc" = "Включить логи запросов DNS"
|
"dnsLogDesc" = "Включить логи запросов DNS"
|
||||||
"maskAddress" = "Маскировать Адрес"
|
"maskAddress" = "Маскировка адреса"
|
||||||
"maskAddressDesc" = "При активации реальный IP-адрес заменяется на маскировочный в логах."
|
"maskAddressDesc" = "При активации реальный IP-адрес заменяется на маскировочный в логах."
|
||||||
"statistics" = "Статистика"
|
"statistics" = "Статистика"
|
||||||
"statsInboundUplink" = "Статистика входящего аплинка"
|
"statsInboundUplink" = "Статистика входящего аплинка"
|
||||||
|
@ -411,23 +411,23 @@
|
||||||
[pages.xray.rules]
|
[pages.xray.rules]
|
||||||
"first" = "Первый"
|
"first" = "Первый"
|
||||||
"last" = "Последний"
|
"last" = "Последний"
|
||||||
"up" = "Вверх"
|
"up" = "Поднять вверх"
|
||||||
"down" = "Вниз"
|
"down" = "Опустить вниз"
|
||||||
"source" = "Источник"
|
"source" = "Источник"
|
||||||
"dest" = "Пункт назначения"
|
"dest" = "Пункт назначения"
|
||||||
"inbound" = "Входящий"
|
"inbound" = "Входящее соединение"
|
||||||
"outbound" = "Исходящий"
|
"outbound" = "Исходящее соединение"
|
||||||
"balancer" = "Балансировщик"
|
"balancer" = "Балансировщик"
|
||||||
"info" = "Информация"
|
"info" = "Информация"
|
||||||
"add" = "Добавить правило"
|
"add" = "Создать правило"
|
||||||
"edit" = "Редактировать правило"
|
"edit" = "Редактировать правило"
|
||||||
"useComma" = "Элементы, разделённые запятыми"
|
"useComma" = "Элементы, разделённые запятыми"
|
||||||
|
|
||||||
[pages.xray.outbound]
|
[pages.xray.outbound]
|
||||||
"addOutbound" = "Добавить исходящий"
|
"addOutbound" = "Создать исходящее соединение"
|
||||||
"addReverse" = "Добавить реверс"
|
"addReverse" = "Создать обратный прокси"
|
||||||
"editOutbound" = "Изменить исходящий"
|
"editOutbound" = "Изменить исходящее соединение"
|
||||||
"editReverse" = "Редактировать реверс"
|
"editReverse" = "Редактировать обратное прокси"
|
||||||
"tag" = "Тег"
|
"tag" = "Тег"
|
||||||
"tagDesc" = "Уникальный тег"
|
"tagDesc" = "Уникальный тег"
|
||||||
"address" = "Адрес"
|
"address" = "Адрес"
|
||||||
|
@ -444,7 +444,7 @@
|
||||||
"sendThrough" = "Отправить через"
|
"sendThrough" = "Отправить через"
|
||||||
|
|
||||||
[pages.xray.balancer]
|
[pages.xray.balancer]
|
||||||
"addBalancer" = "Добавить балансировщик"
|
"addBalancer" = "Создать балансировщик"
|
||||||
"editBalancer" = "Редактировать балансировщик"
|
"editBalancer" = "Редактировать балансировщик"
|
||||||
"balancerStrategy" = "Стратегия"
|
"balancerStrategy" = "Стратегия"
|
||||||
"balancerSelectors" = "Селекторы"
|
"balancerSelectors" = "Селекторы"
|
||||||
|
@ -463,7 +463,7 @@
|
||||||
[pages.xray.dns]
|
[pages.xray.dns]
|
||||||
"enable" = "Включить DNS"
|
"enable" = "Включить DNS"
|
||||||
"enableDesc" = "Включить встроенный DNS-сервер"
|
"enableDesc" = "Включить встроенный DNS-сервер"
|
||||||
"tag" = "Входящий тег DNS"
|
"tag" = "Название тега DNS"
|
||||||
"tagDesc" = "Этот тег будет доступен как входящий тег в правилах маршрутизации."
|
"tagDesc" = "Этот тег будет доступен как входящий тег в правилах маршрутизации."
|
||||||
"clientIp" = "IP клиента"
|
"clientIp" = "IP клиента"
|
||||||
"clientIpDesc" = "Используется для уведомления сервера о указанном местоположении IP во время DNS-запросов"
|
"clientIpDesc" = "Используется для уведомления сервера о указанном местоположении IP во время DNS-запросов"
|
||||||
|
@ -475,14 +475,14 @@
|
||||||
"disableFallbackIfMatchDesc" = "Отключает резервные DNS-запросы при совпадении списка доменов DNS-сервера"
|
"disableFallbackIfMatchDesc" = "Отключает резервные DNS-запросы при совпадении списка доменов DNS-сервера"
|
||||||
"strategy" = "Стратегия запроса"
|
"strategy" = "Стратегия запроса"
|
||||||
"strategyDesc" = "Общая стратегия разрешения доменных имен"
|
"strategyDesc" = "Общая стратегия разрешения доменных имен"
|
||||||
"add" = "Добавить сервер"
|
"add" = "Создать DNS"
|
||||||
"edit" = "Редактировать сервер"
|
"edit" = "Редактировать DNS"
|
||||||
"domains" = "Домены"
|
"domains" = "Домены"
|
||||||
"expectIPs" = "Ожидаемые IP"
|
"expectIPs" = "Ожидаемые IP"
|
||||||
|
|
||||||
[pages.xray.fakedns]
|
[pages.xray.fakedns]
|
||||||
"add" = "Добавить поддельный DNS"
|
"add" = "Создать Fake DNS"
|
||||||
"edit" = "Редактировать поддельный DNS"
|
"edit" = "Редактировать Fake DNS"
|
||||||
"ipPool" = "Подсеть пула IP"
|
"ipPool" = "Подсеть пула IP"
|
||||||
"poolSize" = "Размер пула"
|
"poolSize" = "Размер пула"
|
||||||
|
|
||||||
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Да"
|
"yes" = "✅ Да"
|
||||||
"no" = "❌ Нет"
|
"no" = "❌ Нет"
|
||||||
|
|
||||||
"received_id" = "🔑📥 Полученный ID: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID обновлен. Нажмите обновить, чтобы увидеть изменения."
|
||||||
"received_password" = "🔑📥 Полученный пароль: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Пароль обновлен. Нажмите обновить, чтобы увидеть изменения."
|
||||||
"received_email" = "📧📥 Полученный email: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Электронная почта обновлена. Нажмите обновить, чтобы увидеть изменения."
|
||||||
"received_comment" = "💬📥 Полученный комментарий: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Комментарий обновлен. Нажмите обновить, чтобы увидеть изменения."
|
||||||
"id_prompt" = "🔑 Стандартный ID: {{ .ClientId }}\n\nВведите ваш ID."
|
"id_prompt" = "🔑 ID по умолчанию: {{ .ClientId }}\n\nВведите ваш ID."
|
||||||
"pass_prompt" = "🔑 Стандартный пароль: {{ .ClientPassword }}\n\nВведите ваш пароль."
|
"pass_prompt" = "🔑 Пароль по умолчанию: {{ .ClientPassword }}\n\nВведите ваш пароль."
|
||||||
"email_prompt" = "📧 Стандартный email: {{ .ClientEmail }}\n\nВведите ваш email."
|
"email_prompt" = "📧 Электронная почта по умолчанию: {{ .ClientEmail }}\n\nВведите ваш email."
|
||||||
"comment_prompt" = "💬 Стандартный комментарий: {{ .ClientComment }}\n\nВведите ваш комментарий."
|
"comment_prompt" = "💬 Комментарий по умолчанию: {{ .ClientComment }}\n\nВведите ваш комментарий."
|
||||||
"inbound_client_data_id" = "🔄 Входящий: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .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📧 Email: {{ .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📧 Email: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!"
|
"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Электронная почта: {{ .ClientEmail }}\n💬 Комментарий: {{ .ClientComment }}\n\nТеперь вы можете добавить клиента во входящие!"
|
||||||
"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .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 }}"
|
"error_add_client" = "⚠️ Ошибка:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 Успех! \nТеперь вы можете изменить его, используя кнопку 'Все клиенты'."
|
"using_default_value" = "Хорошо, я оставлю значение по умолчанию. 😊"
|
||||||
|
"incorrect_input" = "Ваш ввод недействителен.\nФразы должны быть непрерывными без пробелов.\nПравильный пример: aaaaaa\nНеправильный пример: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -632,13 +633,17 @@
|
||||||
"confirmNumber" = "✅ Подтвердить: {{ .Num }}"
|
"confirmNumber" = "✅ Подтвердить: {{ .Num }}"
|
||||||
"confirmNumberAdd" = "✅ Подтвердить добавление: {{ .Num }}"
|
"confirmNumberAdd" = "✅ Подтвердить добавление: {{ .Num }}"
|
||||||
"limitTraffic" = "🚧 Лимит трафика"
|
"limitTraffic" = "🚧 Лимит трафика"
|
||||||
"getBanLogs" = "Логи блокировок"
|
"getBanLogs" = "Журнал блокировок"
|
||||||
"allClients" = "Все клиенты"
|
"allClients" = "Все клиенты"
|
||||||
|
|
||||||
"addClient" = "Добавить клиента"
|
"addClient" = "Добавить клиента"
|
||||||
"submitDisable" = "Отправить как отключено ✅"
|
"submitDisable" = "Отправить как отключенный ✅"
|
||||||
"use_default" = "🏷️ Использовать по умолчанию"
|
"use_default" = "🏷️ Использовать по умолчанию"
|
||||||
"change_default" = "🔄⚙️ Изменить по умолчанию"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 Пароль"
|
||||||
|
"change_email" = "⚙️📧 Электронная почта"
|
||||||
|
"change_comment" = "⚙️💬 Комментарий"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Успешно!"
|
"successfulOperation" = "✅ Успешно!"
|
||||||
|
@ -660,5 +665,5 @@
|
||||||
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
"enableSuccess" = "✅ {{ .Email }}: Включено успешно."
|
||||||
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
"disableSuccess" = "✅ {{ .Email }}: Отключено успешно."
|
||||||
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <code>{{ .TgUserID }}</code>"
|
"askToAddUserId" = "Ваша конфигурация не найдена!\r\nПожалуйста, попросите администратора использовать ваш идентификатор пользователя Telegram в ваших конфигурациях.\r\n\r\nВаш идентификатор пользователя: <code>{{ .TgUserID }}</code>"
|
||||||
"chooseClient" = "Выберите пользователя для подключения {{ .Inbound }}"
|
"chooseClient" = "Выберите клиента для подключения {{ .Inbound }}"
|
||||||
"chooseInbound" = "Выберите подключение"
|
"chooseInbound" = "Выберите подключение"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Evet"
|
"yes" = "✅ Evet"
|
||||||
"no" = "❌ Hayır"
|
"no" = "❌ Hayır"
|
||||||
|
|
||||||
"received_id" = "🔑📥 Alınan Kimlik: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID güncellendi. Değişiklikleri görmek için yenileyin."
|
||||||
"received_password" = "🔑📥 Alınan Şifre: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Şifre güncellendi. Değişiklikleri görmek için yenileyin."
|
||||||
"received_email" = "📧📥 Alınan E-posta: {{ .ClientEmail }}"
|
"received_email" = "📧📥 E-posta güncellendi. Değişiklikleri görmek için yenileyin."
|
||||||
"received_comment" = "💬📥 Alınan Yorum: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Yorum güncellendi. Değişiklikleri görmek için yenileyin."
|
||||||
"id_prompt" = "🔑 Varsayılan Kimlik: {{ .ClientId }}\n\nKimliğinizi girin."
|
"id_prompt" = "🔑 Varsayılan ID: {{ .ClientId }}\n\nID'nizi girin."
|
||||||
"pass_prompt" = "🔑 Varsayılan Şifre: {{ .ClientPassword }}\n\nŞifrenizi girin."
|
"pass_prompt" = "🔑 Varsayılan Şifre: {{ .ClientPassword }}\n\nŞifrenizi girin."
|
||||||
"email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-posta adresinizi girin."
|
"email_prompt" = "📧 Varsayılan E-posta: {{ .ClientEmail }}\n\nE-posta adresinizi girin."
|
||||||
"comment_prompt" = "💬 Varsayılan Yorum: {{ .ClientComment }}\n\nYorumunuzu 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_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\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\nŞimdi müşteri gelen kutusuna eklenebilir!"
|
||||||
"client_data_id" = "🔑 Kimlik: {{ .ClientId }}\n📧 E-posta: {{ .ClientEmail }}\n💬 Yorum: {{ .ClientComment }}\n\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!"
|
"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\nArtık müşteriyi gelen kutusuna ekleyebilirsiniz!"
|
"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\nİstediğiniz zaman /start kullanabilirsiniz. 🔄"
|
"cancel" = "❌ İşlem iptal edildi! \n\nHer zaman /start ile tekrar başlayabilirsiniz. 🔄"
|
||||||
"error_add_client" = "⚠️ Hata:\n\n {{ .error }}"
|
"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]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "Müşteri Ekle"
|
"addClient" = "Müşteri Ekle"
|
||||||
"submitDisable" = "Devre Dışı Olarak Gönder ✅"
|
"submitDisable" = "Devre Dışı Olarak Gönder ✅"
|
||||||
"use_default" = "🏷️ Varsayılanı Kullan"
|
"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]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ İşlem başarılı!"
|
"successfulOperation" = "✅ İşlem başarılı!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Так"
|
"yes" = "✅ Так"
|
||||||
"no" = "❌ Ні"
|
"no" = "❌ Ні"
|
||||||
|
|
||||||
"received_id" = "🔑📥 Отриманий ID: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID оновлено. Натисніть оновити, щоб побачити зміни."
|
||||||
"received_password" = "🔑📥 Отриманий пароль: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Пароль оновлено. Натисніть оновити, щоб побачити зміни."
|
||||||
"received_email" = "📧📥 Отриманий email: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Електронну пошту оновлено. Натисніть оновити, щоб побачити зміни."
|
||||||
"received_comment" = "💬📥 Отриманий коментар: {{ .ClientComment }}"
|
"received_comment" = "💬📥 Коментар оновлено. Натисніть оновити, щоб побачити зміни."
|
||||||
"id_prompt" = "🔑 Стандартний ID: {{ .ClientId }}\n\nВведіть ваш ID."
|
"id_prompt" = "🔑 ID за замовчуванням: {{ .ClientId }}\n\nВведіть свій ID."
|
||||||
"pass_prompt" = "🔑 Стандартний пароль: {{ .ClientPassword }}\n\nВведіть ваш пароль."
|
"pass_prompt" = "🔑 Пароль за замовчуванням: {{ .ClientPassword }}\n\nВведіть свій пароль."
|
||||||
"email_prompt" = "📧 Стандартний email: {{ .ClientEmail }}\n\nВведіть ваш email."
|
"email_prompt" = "📧 Електронна пошта за замовчуванням: {{ .ClientEmail }}\n\nВведіть свою електронну пошту."
|
||||||
"comment_prompt" = "💬 Стандартний коментар: {{ .ClientComment }}\n\nВведіть ваш коментар."
|
"comment_prompt" = "💬 Коментар за замовчуванням: {{ .ClientComment }}\n\nВведіть свій коментар."
|
||||||
"inbound_client_data_id" = "🔄 Вхідні: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .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📧 Email: {{ .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📧 Email: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!"
|
"client_data_id" = "🔑 ID: {{ .ClientId }}\n📧 Електронна пошта: {{ .ClientEmail }}\n💬 Коментар: {{ .ClientComment }}\n\nТепер ви можете додати клієнта до вхідних!"
|
||||||
"client_data_pass" = "🔑 Пароль: {{ .ClientPass }}\n📧 Email: {{ .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 }}"
|
"error_add_client" = "⚠️ Помилка:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 Успіх! \nТепер ви можете редагувати його за допомогою кнопки 'Усі клієнти'."
|
"using_default_value" = "Добре, я залишу значення за замовчуванням. 😊"
|
||||||
|
"incorrect_input" = "Ваш ввід недійсний.\nФрази повинні йти без пробілів.\nПравильний приклад: aaaaaa\nНеправильний приклад: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -636,9 +637,13 @@
|
||||||
"allClients" = "Всі Клієнти"
|
"allClients" = "Всі Клієнти"
|
||||||
|
|
||||||
"addClient" = "Додати клієнта"
|
"addClient" = "Додати клієнта"
|
||||||
"submitDisable" = "Надіслати як вимкнено ✅"
|
"submitDisable" = "Надіслати як вимкнене ✅"
|
||||||
"use_default" = "🏷️ Використати за замовчуванням"
|
"use_default" = "🏷️ Використовувати за замовчуванням"
|
||||||
"change_default" = "🔄⚙️ Змінити за замовчуванням"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 Пароль"
|
||||||
|
"change_email" = "⚙️📧 Електронна пошта"
|
||||||
|
"change_comment" = "⚙️💬 Коментар"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Операція успішна!"
|
"successfulOperation" = "✅ Операція успішна!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ Có"
|
"yes" = "✅ Có"
|
||||||
"no" = "❌ Không"
|
"no" = "❌ Không"
|
||||||
|
|
||||||
"received_id" = "🔑📥 ID nhận được: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID đã được cập nhật. Nhấn làm mới để xem thay đổi."
|
||||||
"received_password" = "🔑📥 Mật khẩu nhận được: {{ .ClientPass }}"
|
"received_password" = "🔑📥 Mật khẩu đã được cập nhật. Nhấn làm mới để xem thay đổi."
|
||||||
"received_email" = "📧📥 Email nhận được: {{ .ClientEmail }}"
|
"received_email" = "📧📥 Email đã được cập nhật. Nhấn làm mới để xem thay đổi."
|
||||||
"received_comment" = "💬📥 Bình luận nhận được: {{ .ClientComment }}"
|
"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."
|
"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."
|
"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."
|
"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."
|
"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_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 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 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 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 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 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 inbound 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. 🔄"
|
"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 }}"
|
"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]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "Thêm Khách Hàng"
|
"addClient" = "Thêm Khách Hàng"
|
||||||
"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"
|
"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]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ Thành công!"
|
"successfulOperation" = "✅ Thành công!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ 是的"
|
"yes" = "✅ 是的"
|
||||||
"no" = "❌ 没有"
|
"no" = "❌ 没有"
|
||||||
|
|
||||||
"received_id" = "🔑📥 接收到的ID: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID 已更新。请点击刷新查看更改。"
|
||||||
"received_password" = "🔑📥 接收到的密码: {{ .ClientPass }}"
|
"received_password" = "🔑📥 密码已更新。请点击刷新查看更改。"
|
||||||
"received_email" = "📧📥 接收到的电子邮件: {{ .ClientEmail }}"
|
"received_email" = "📧📥 电子邮件已更新。请点击刷新查看更改。"
|
||||||
"received_comment" = "💬📥 接收到的评论: {{ .ClientComment }}"
|
"received_comment" = "💬📥 评论已更新。请点击刷新查看更改。"
|
||||||
"id_prompt" = "🔑 默认ID: {{ .ClientId }}\n\n请输入您的ID。"
|
"id_prompt" = "🔑 默认 ID: {{ .ClientId }}\n\n请输入您的 ID。"
|
||||||
"pass_prompt" = "🔑 默认密码: {{ .ClientPassword }}\n\n请输入您的密码。"
|
"pass_prompt" = "🔑 默认密码: {{ .ClientPassword }}\n\n请输入您的密码。"
|
||||||
"email_prompt" = "📧 默认电子邮件: {{ .ClientEmail }}\n\n请输入您的电子邮件。"
|
"email_prompt" = "📧 默认电子邮件: {{ .ClientEmail }}\n\n请输入您的电子邮件。"
|
||||||
"comment_prompt" = "💬 默认评论: {{ .ClientComment }}\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_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您现在可以将客户添加到传入列表!"
|
"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_id" = "🔑 ID: {{ .ClientId }}\n📧 电子邮件: {{ .ClientEmail }}\n💬 评论: {{ .ClientComment }}\n\n现在可以将客户添加到传入数据中!"
|
||||||
"client_data_pass" = "🔑 密码: {{ .ClientPass }}\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 }}"
|
"error_add_client" = "⚠️ 错误:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 成功!\n您现在可以使用'所有客户'按钮进行修改。"
|
"using_default_value" = "好的,我将使用默认值。😊"
|
||||||
|
"incorrect_input" = "您的输入无效。\n短语应连续无空格。\n正确示例: aaaaaa\n错误示例: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "添加客户"
|
"addClient" = "添加客户"
|
||||||
"submitDisable" = "提交为禁用 ✅"
|
"submitDisable" = "提交为禁用 ✅"
|
||||||
"use_default" = "🏷️ 使用默认"
|
"use_default" = "🏷️ 使用默认"
|
||||||
"change_default" = "🔄⚙️ 更改默认"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 密码"
|
||||||
|
"change_email" = "⚙️📧 邮箱"
|
||||||
|
"change_comment" = "⚙️💬 评论"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ 成功!"
|
"successfulOperation" = "✅ 成功!"
|
||||||
|
|
|
@ -584,21 +584,22 @@
|
||||||
"yes" = "✅ 是的"
|
"yes" = "✅ 是的"
|
||||||
"no" = "❌ 沒有"
|
"no" = "❌ 沒有"
|
||||||
|
|
||||||
"received_id" = "🔑📥 接收到的 ID: {{ .ClientId }}"
|
"received_id" = "🔑📥 ID 已更新。請按刷新查看變更。"
|
||||||
"received_password" = "🔑📥 接收到的密碼: {{ .ClientPass }}"
|
"received_password" = "🔑📥 密碼已更新。請按刷新查看變更。"
|
||||||
"received_email" = "📧📥 接收到的電子郵件: {{ .ClientEmail }}"
|
"received_email" = "📧📥 電子郵件已更新。請按刷新查看變更。"
|
||||||
"received_comment" = "💬📥 接收到的評論: {{ .ClientComment }}"
|
"received_comment" = "💬📥 評論已更新。請按刷新查看變更。"
|
||||||
"id_prompt" = "🔑 預設 ID: {{ .ClientId }}\n\n請輸入您的 ID。"
|
"id_prompt" = "🔑 預設 ID: {{ .ClientId }}\n\n請輸入您的 ID。"
|
||||||
"pass_prompt" = "🔑 預設密碼: {{ .ClientPassword }}\n\n請輸入您的密碼。"
|
"pass_prompt" = "🔑 預設密碼: {{ .ClientPassword }}\n\n請輸入您的密碼。"
|
||||||
"email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。"
|
"email_prompt" = "📧 預設電子郵件: {{ .ClientEmail }}\n\n請輸入您的電子郵件。"
|
||||||
"comment_prompt" = "💬 預設評論: {{ .ClientComment }}\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_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您現在可以將客戶添加到傳入列表!"
|
"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_id" = "🔑 ID: {{ .ClientId }}\n📧 電子郵件: {{ .ClientEmail }}\n💬 評論: {{ .ClientComment }}\n\n現在您可以將客戶添加到進來資料中!"
|
||||||
"client_data_pass" = "🔑 密碼: {{ .ClientPass }}\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 }}"
|
"error_add_client" = "⚠️ 錯誤:\n\n {{ .error }}"
|
||||||
"success_add_client" = "🏆 成功!\n您現在可以使用'所有客戶'按鈕進行修改。"
|
"using_default_value" = "好的,我會使用預設值。😊"
|
||||||
|
"incorrect_input" = "您的輸入無效。\n短語應該連貫而不應有空格。\n正確範例: aaaaaa\n錯誤範例: aaa aaa 🚫"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.buttons]
|
[tgbot.buttons]
|
||||||
|
@ -638,7 +639,11 @@
|
||||||
"addClient" = "新增客戶"
|
"addClient" = "新增客戶"
|
||||||
"submitDisable" = "提交為停用 ✅"
|
"submitDisable" = "提交為停用 ✅"
|
||||||
"use_default" = "🏷️ 使用預設"
|
"use_default" = "🏷️ 使用預設"
|
||||||
"change_default" = "🔄⚙️ 更改預設"
|
"change_id" = "⚙️🔑 ID"
|
||||||
|
"change_password" = "⚙️🔑 密碼"
|
||||||
|
"change_email" = "⚙️📧 電子郵件"
|
||||||
|
"change_comment" = "⚙️💬 評論"
|
||||||
|
|
||||||
|
|
||||||
[tgbot.answers]
|
[tgbot.answers]
|
||||||
"successfulOperation" = "✅ 成功!"
|
"successfulOperation" = "✅ 成功!"
|
||||||
|
|
12
x-ui.sh
12
x-ui.sh
|
@ -76,12 +76,12 @@ elif [[ "${release}" == "debian" ]]; then
|
||||||
echo -e "${red} Please use Debian 12 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use Debian 12 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "almalinux" ]]; then
|
elif [[ "${release}" == "almalinux" ]]; then
|
||||||
if [[ ${os_version} -lt 80 ]]; then
|
if [[ ${os_version} -lt 95 ]]; then
|
||||||
echo -e "${red} Please use AlmaLinux 8.0 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use AlmaLinux 9.5 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "rocky" ]]; then
|
elif [[ "${release}" == "rocky" ]]; then
|
||||||
if [[ ${os_version} -lt 8 ]]; then
|
if [[ ${os_version} -lt 95 ]]; then
|
||||||
echo -e "${red} Please use Rocky Linux 8 or higher ${plain}\n" && exit 1
|
echo -e "${red} Please use Rocky Linux 9.5 or higher ${plain}\n" && exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "${release}" == "ol" ]]; then
|
elif [[ "${release}" == "ol" ]]; then
|
||||||
if [[ ${os_version} -lt 8 ]]; then
|
if [[ ${os_version} -lt 8 ]]; then
|
||||||
|
@ -103,8 +103,8 @@ else
|
||||||
echo "- Parch Linux"
|
echo "- Parch Linux"
|
||||||
echo "- Manjaro"
|
echo "- Manjaro"
|
||||||
echo "- Armbian"
|
echo "- Armbian"
|
||||||
echo "- AlmaLinux 8.0+"
|
echo "- AlmaLinux 9.5+"
|
||||||
echo "- Rocky Linux 8+"
|
echo "- Rocky Linux 9.5+"
|
||||||
echo "- Oracle Linux 8+"
|
echo "- Oracle Linux 8+"
|
||||||
echo "- OpenSUSE Tumbleweed"
|
echo "- OpenSUSE Tumbleweed"
|
||||||
echo "- Amazon Linux 2023"
|
echo "- Amazon Linux 2023"
|
||||||
|
|
Loading…
Reference in a new issue