diff --git a/web/service/tgbot.go b/web/service/tgbot.go
index b8294620..449161d3 100644
--- a/web/service/tgbot.go
+++ b/web/service/tgbot.go
@@ -243,7 +243,12 @@ func (t *Tgbot) answerCommand(message *telego.Message, chatId int64, isAdmin boo
command, _, commandArgs := tu.ParseCommand(message.Text)
- // Extract the command from the Message.
+ // Helper function to handle unknown commands.
+ handleUnknownCommand := func() {
+ msg += t.I18nBot("tgbot.commands.unknown")
+ }
+
+ // Handle the command.
switch command {
case "help":
msg += t.I18nBot("tgbot.commands.help")
@@ -266,9 +271,7 @@ func (t *Tgbot) answerCommand(message *telego.Message, chatId int64, isAdmin boo
if isAdmin {
t.searchClient(chatId, commandArgs[0])
} else {
- // Convert message.From.ID to int64
- fromID := int64(message.From.ID)
- t.getClientUsage(chatId, fromID, commandArgs[0])
+ t.getClientUsage(chatId, int64(message.From.ID), commandArgs[0])
}
} else {
msg += t.I18nBot("tgbot.commands.usage")
@@ -278,19 +281,46 @@ func (t *Tgbot) answerCommand(message *telego.Message, chatId int64, isAdmin boo
if isAdmin && len(commandArgs) > 0 {
t.searchInbound(chatId, commandArgs[0])
} else {
- msg += t.I18nBot("tgbot.commands.unknown")
+ handleUnknownCommand()
+ }
+ case "restart":
+ onlyMessage = true
+ if isAdmin {
+ if len(commandArgs) == 0 {
+ msg += t.I18nBot("tgbot.commands.restartUsage")
+ } else if strings.ToLower(commandArgs[0]) == "force" {
+ if t.xrayService.IsXrayRunning() {
+ err := t.xrayService.RestartXray(true)
+ if err != nil {
+ msg += t.I18nBot("tgbot.commands.restartFailed", "Error=="+err.Error())
+ } else {
+ msg += t.I18nBot("tgbot.commands.restartSuccess")
+ }
+ } else {
+ msg += t.I18nBot("tgbot.commands.xrayNotRunning")
+ }
+ } else {
+ handleUnknownCommand()
+ msg += t.I18nBot("tgbot.commands.restartUsage")
+ }
+ } else {
+ handleUnknownCommand()
}
default:
- msg += t.I18nBot("tgbot.commands.unknown")
+ handleUnknownCommand()
}
if msg != "" {
- if onlyMessage {
- t.SendMsgToTgbot(chatId, msg)
- return
- } else {
- t.SendAnswer(chatId, msg, isAdmin)
- }
+ t.sendResponse(chatId, msg, onlyMessage, isAdmin)
+ }
+}
+
+// Helper function to send the message based on onlyMessage flag.
+func (t *Tgbot) sendResponse(chatId int64, msg string, onlyMessage, isAdmin bool) {
+ if onlyMessage {
+ t.SendMsgToTgbot(chatId, msg)
+ } else {
+ t.SendAnswer(chatId, msg, isAdmin)
}
}
@@ -872,6 +902,7 @@ func (t *Tgbot) SendAnswer(chatId int64, msg string, isAdmin bool) {
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.onlines")).WithCallbackData(t.encodeQuery("onlines")),
tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.allClients")).WithCallbackData(t.encodeQuery("get_inbounds")),
),
+ // TODOOOOOOOOOOOOOO: Add restart button here.
)
numericKeyboardClient := tu.InlineKeyboard(
tu.InlineKeyboardRow(
diff --git a/web/translation/translate.en_US.toml b/web/translation/translate.en_US.toml
index 7e2e5eef..47c02f89 100644
--- a/web/translation/translate.en_US.toml
+++ b/web/translation/translate.en_US.toml
@@ -483,8 +483,12 @@
"status" = "✅ Bot is OK!"
"usage" = "❗ Please provide a text to search!"
"getID" = "🆔 Your ID: {{ .ID }}
"
-"helpAdminCommands" = "To search for a client email:\r\n/usage [Email]
\r\n\r\nTo search for inbounds (with client stats):\r\n/inbound [Remark]
\r\n\r\nTelegram Chat ID:\r\n/id
"
+"helpAdminCommands" = "To restart Xray Core:\r\n/restart force
\r\n\r\nTo search for a client email:\r\n/usage [Email]
\r\n\r\nTo search for inbounds (with client stats):\r\n/inbound [Remark]
\r\n\r\nTelegram Chat ID:\r\n/id
"
"helpClientCommands" = "To search for statistics, use the following command:\r\n\r\n/usage [Email]
\r\n\r\nTelegram Chat ID:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Operation successful!"
+"restartFailed" = "❗ Error in operation.\r\n\r\nError: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core is not running."
[tgbot.messages]
"cpuThreshold" = "🔴 CPU Load {{ .Percent }}% exceeds the threshold of {{ .Threshold }}%"
diff --git a/web/translation/translate.es_ES.toml b/web/translation/translate.es_ES.toml
index 1ca7a505..ef9cca1e 100644
--- a/web/translation/translate.es_ES.toml
+++ b/web/translation/translate.es_ES.toml
@@ -483,8 +483,12 @@
"status" = "✅ ¡El bot está bien!"
"usage" = "❗ ¡Por favor proporciona un texto para buscar!"
"getID" = "🆔 Tu ID: {{ .ID }}
"
-"helpAdminCommands" = "Para buscar un correo electrónico de cliente:\r\n/usage [Correo electrónico]
\r\n\r\nPara buscar entradas (con estadísticas de cliente):\r\n/inbound [Observación]
\r\n\r\nID de Chat de Telegram:\r\n/id
"
+"helpAdminCommands" = "Para reiniciar Xray Core:\r\n/restart force
\r\n\r\nPara buscar un correo electrónico de cliente:\r\n/usage [Correo electrónico]
\r\n\r\nPara buscar entradas (con estadísticas de cliente):\r\n/inbound [Observación]
\r\n\r\nID de Chat de Telegram:\r\n/id
"
"helpClientCommands" = "Para buscar estadísticas, utiliza el siguiente comando:\r\n/usage [Correo electrónico]
\r\n\r\nID de Chat de Telegram:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ ¡Operación exitosa!"
+"restartFailed" = "❗ Error en la operación.\r\n\r\nError: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core no está en ejecución."
[tgbot.messages]
"cpuThreshold" = "🔴 El uso de CPU {{ .Percent }}% es mayor que el umbral {{ .Threshold }}%"
diff --git a/web/translation/translate.fa_IR.toml b/web/translation/translate.fa_IR.toml
index a7ba4a6f..2ff9badd 100644
--- a/web/translation/translate.fa_IR.toml
+++ b/web/translation/translate.fa_IR.toml
@@ -483,8 +483,12 @@
"status" = "✅ ربات در حالت عادی است!"
"usage" = "❗ لطفاً یک متن برای جستجو وارد کنید!"
"getID" = "🆔 شناسه شما: {{ .ID }}
"
-"helpAdminCommands" = "برای جستجوی ایمیل مشتری:\r\n/usage [ایمیل]
\r\n\r\nبرای جستجوی ورودیها (با آمار مشتری):\r\n/inbound [توضیحات]
\r\n\r\nشناسه گفتگوی تلگرام:\r\n/id
"
+"helpAdminCommands" = "برای راهاندازی مجدد Xray Core:\r\n/restart force
\r\n\r\nبرای جستجوی ایمیل مشتری:\r\n/usage [ایمیل]
\r\n\r\nبرای جستجوی ورودیها (با آمار مشتری):\r\n/inbound [توضیحات]
\r\n\r\nشناسه گفتگوی تلگرام:\r\n/id
"
"helpClientCommands" = "برای جستجوی آمار، از دستور زیر استفاده کنید:\r\n/usage [ایمیل]
\r\n\r\nشناسه گفتگوی تلگرام:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ عملیات با موفقیت انجام شد!"
+"restartFailed" = "❗ خطا در عملیات.\r\n\r\nخطا: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core در حال اجرا نیست."
[tgbot.messages]
"cpuThreshold" = "🔴 بار پردازنده {{ .Percent }}% بیشتر از آستانه است {{ .Threshold }}%"
diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml
index f543971b..00862888 100644
--- a/web/translation/translate.id_ID.toml
+++ b/web/translation/translate.id_ID.toml
@@ -482,9 +482,13 @@
"welcome" = "🤖 Selamat datang di {{.Hostname }} bot managemen.\r\n"
"status" = "✅ Bot dalam keadaan baik!"
"usage" = "❗ Harap berikan teks untuk mencari!"
-"getID" = "🆔 ID Anda:{{.ID }}
"
-"helpAdminCommands" = "Untuk mencari email klien:\r\n/usage [Email]
\r\n\r\nUntuk mencari inbound (dengan statistik klien):\r\n/inbound [Catatan]
\r\n\r\nID Obrolan Telegram:\r\n/id
"
+"getID" = "🆔 ID Anda: {{ .ID }}
"
+"helpAdminCommands" = "Untuk memulai ulang Xray Core:\r\n/restart force
\r\n\r\nUntuk mencari email klien:\r\n/usage [Email]
\r\n\r\nUntuk mencari inbound (dengan statistik klien):\r\n/inbound [Catatan]
\r\n\r\nID Obrolan Telegram:\r\n/id
"
"helpClientCommands" = "Untuk mencari statistik, gunakan perintah berikut:\r\n/usage [Email]
\r\n\r\nID Obrolan Telegram:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Operasi berhasil!"
+"restartFailed" = "❗ Kesalahan dalam operasi.\r\n\r\nError: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core tidak berjalan."
[tgbot.messages]
"cpuThreshold" = "🔴 Beban CPU {{ .Percent }}% melebihi batas {{ .Threshold }}%"
diff --git a/web/translation/translate.pt_BR.toml b/web/translation/translate.pt_BR.toml
index f201df66..7e64369a 100644
--- a/web/translation/translate.pt_BR.toml
+++ b/web/translation/translate.pt_BR.toml
@@ -483,8 +483,12 @@
"status" = "✅ Bot está OK!"
"usage" = "❗ Por favor, forneça um texto para pesquisar!"
"getID" = "🆔 Seu ID: {{ .ID }}
"
-"helpAdminCommands" = "Para pesquisar por um email de cliente:\r\n/usage [Email]
\r\n\r\nPara pesquisar por inbounds (com estatísticas do cliente):\r\n/inbound [Remark]
\r\n\r\nTelegram Chat ID:\r\n/id
"
+"helpAdminCommands" = "Para reiniciar o Xray Core:\r\n/restart force
\r\n\r\nPara pesquisar por um email de cliente:\r\n/usage [Email]
\r\n\r\nPara pesquisar por inbounds (com estatísticas do cliente):\r\n/inbound [Remark]
\r\n\r\nTelegram Chat ID:\r\n/id
"
"helpClientCommands" = "Para pesquisar por estatísticas, use o seguinte comando:\r\n\r\n/usage [Email]
\r\n\r\nTelegram Chat ID:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Operação bem-sucedida!"
+"restartFailed" = "❗ Erro na operação.\r\n\r\nErro: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core não está em execução."
[tgbot.messages]
"cpuThreshold" = "🔴 A carga da CPU {{ .Percent }}% excede o limite de {{ .Threshold }}%"
diff --git a/web/translation/translate.ru_RU.toml b/web/translation/translate.ru_RU.toml
index a5eae4b8..f9905bdb 100644
--- a/web/translation/translate.ru_RU.toml
+++ b/web/translation/translate.ru_RU.toml
@@ -483,8 +483,12 @@
"status" = "✅ Бот работает нормально!"
"usage" = "❗ Пожалуйста, укажите текст для поиска!"
"getID" = "🆔 Ваш ID: {{ .ID }}
"
-"helpAdminCommands" = "Для поиска электронной почты клиента:\r\n/usage [Email]
\r\n\r\nДля поиска входящих (со статистикой клиента):\r\n/inbound [Примечание]
\r\n\r\nID чата Telegram:\r\n/id
"
+"helpAdminCommands" = "Для перезапуска Xray Core:\r\n/restart force
\r\n\r\nДля поиска электронной почты клиента:\r\n/usage [Email]
\r\n\r\nДля поиска входящих (со статистикой клиента):\r\n/inbound [Примечание]
\r\n\r\nID чата Telegram:\r\n/id
"
"helpClientCommands" = "Для поиска статистики используйте следующую команду:\r\n/usage [Email]
\r\n\r\nID чата Telegram:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Операция успешно завершена!"
+"restartFailed" = "❗ Ошибка в операции.\r\n\r\nОшибка: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core не запущен."
[tgbot.messages]
"cpuThreshold" = "🔴 Загрузка процессора составляет {{ .Percent }}%, что превышает пороговое значение {{ .Threshold }}%"
diff --git a/web/translation/translate.tr_TR.toml b/web/translation/translate.tr_TR.toml
index 9816111f..f917d176 100644
--- a/web/translation/translate.tr_TR.toml
+++ b/web/translation/translate.tr_TR.toml
@@ -483,8 +483,12 @@
"status" = "✅ Bot çalışıyor!"
"usage" = "❗ Lütfen aramak için bir metin sağlayın!"
"getID" = "🆔 Kimliğiniz: {{ .ID }}
"
-"helpAdminCommands" = "Bir müşteri e-postasını aramak için:\r\n/usage [E-posta]
\r\n\r\nGelenleri aramak için (müşteri istatistikleri ile):\r\n/inbound [Açıklama]
\r\n\r\nTelegram Sohbet Kimliği:\r\n/id
"
+"helpAdminCommands" = "Xray Core'u yeniden başlatmak için:\r\n/restart force
\r\n\r\nBir müşteri e-postasını aramak için:\r\n/usage [E-posta]
\r\n\r\nGelenleri aramak için (müşteri istatistikleri ile):\r\n/inbound [Açıklama]
\r\n\r\nTelegram Sohbet Kimliği:\r\n/id
"
"helpClientCommands" = "İstatistikleri aramak için şu komutu kullanın:\r\n\r\n/usage [E-posta]
\r\n\r\nTelegram Sohbet Kimliği:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ İşlem başarılı!"
+"restartFailed" = "❗ İşlem hatası.\r\n\r\nHata: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core çalışmıyor."
[tgbot.messages]
"cpuThreshold" = "🔴 CPU Yükü {{ .Percent }}% eşiği {{ .Threshold }}%'yi aşıyor"
diff --git a/web/translation/translate.uk_UA.toml b/web/translation/translate.uk_UA.toml
index d99b6908..eefb4448 100644
--- a/web/translation/translate.uk_UA.toml
+++ b/web/translation/translate.uk_UA.toml
@@ -483,8 +483,12 @@
"status" = "✅ Бот в порядку!"
"usage" = "❗ Введіть текст для пошуку!"
"getID" = "🆔 Ваш ідентифікатор: {{ .ID }}
"
-"helpAdminCommands" = "Для пошуку електронної пошти клієнта:\r\n/usage [Електронна пошта]
\r\n\r\nДля пошуку вхідних (зі статистикою клієнта):\r\n/inbound [Примітка]
\r\n\r\nID чату Telegram:\r\n/id
"
+"helpAdminCommands" = "Для перезапуску Xray Core:\r\n/restart force
\r\n\r\nДля пошуку електронної пошти клієнта:\r\n/usage [Електронна пошта]
\r\n\r\nДля пошуку вхідних (зі статистикою клієнта):\r\n/inbound [Примітка]
\r\n\r\nID чату Telegram:\r\n/id
"
"helpClientCommands" = "Для пошуку статистики використовуйте наступну команду:\r\n/usage [Електронна пошта]
\r\n\r\nID чату Telegram:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Операція успішна!"
+"restartFailed" = "❗ Помилка в операції.\r\n\r\nПомилка: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core не запущений."
[tgbot.messages]
"cpuThreshold" = "🔴 Навантаження ЦП {{ .Percent }}% перевищує порогове значення {{ .Threshold }}%"
diff --git a/web/translation/translate.vi_VN.toml b/web/translation/translate.vi_VN.toml
index 2e082ead..ce68064a 100644
--- a/web/translation/translate.vi_VN.toml
+++ b/web/translation/translate.vi_VN.toml
@@ -483,8 +483,12 @@
"status" = "✅ Bot hoạt động bình thường!"
"usage" = "❗ Vui lòng cung cấp văn bản để tìm kiếm!"
"getID" = "🆔 ID của bạn: {{ .ID }}
"
-"helpAdminCommands" = "Để tìm kiếm email của khách hàng:\r\n/usage [Email]
\r\n\r\nĐể tìm kiếm các nhập (với số liệu thống kê của khách hàng):\r\n/inbound [Ghi chú]
\r\n\r\nID Trò chuyện Telegram:\r\n/id
"
+"helpAdminCommands" = "Để khởi động lại Xray Core:\r\n/restart force
\r\n\r\nĐể tìm kiếm email của khách hàng:\r\n/usage [Email]
\r\n\r\nĐể tìm kiếm các nhập (với số liệu thống kê của khách hàng):\r\n/inbound [Ghi chú]
\r\n\r\nID Trò chuyện Telegram:\r\n/id
"
"helpClientCommands" = "Để tìm kiếm thống kê, sử dụng lệnh sau:\r\n/usage [Email]
\r\n\r\nID Trò chuyện Telegram:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ Hoạt động thành công!"
+"restartFailed" = "❗ Lỗi trong quá trình hoạt động.\r\n\r\nLỗi: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core không chạy."
[tgbot.messages]
"cpuThreshold" = "🔴 Sử dụng CPU {{ .Percent }}% vượt quá ngưỡng {{ .Threshold }}%"
diff --git a/web/translation/translate.zh_CN.toml b/web/translation/translate.zh_CN.toml
index d271b6b4..6d4b5978 100644
--- a/web/translation/translate.zh_CN.toml
+++ b/web/translation/translate.zh_CN.toml
@@ -483,8 +483,12 @@
"status" = "✅ 机器人正常运行!"
"usage" = "❗ 请输入要搜索的文本!"
"getID" = "🆔 您的 ID 为:{{ .ID }}
"
-"helpAdminCommands" = "要搜索客户电子邮件:\r\n/usage [电子邮件]
\r\n\r\n要搜索入站(带有客户统计数据):\r\n/inbound [备注]
\r\n\r\nTelegram聊天ID:\r\n/id
"
+"helpAdminCommands" = "要重新启动 Xray Core:\r\n/restart force
\r\n\r\n要搜索客户电子邮件:\r\n/usage [电子邮件]
\r\n\r\n要搜索入站(带有客户统计数据):\r\n/inbound [备注]
\r\n\r\nTelegram聊天ID:\r\n/id
"
"helpClientCommands" = "要搜索统计数据,请使用以下命令:\r\n/usage [电子邮件]
\r\n\r\nTelegram聊天ID:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ 操作成功!"
+"restartFailed" = "❗ 操作错误。\r\n\r\n错误: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core 未运行。"
[tgbot.messages]
"cpuThreshold" = "🔴 CPU 使用率为 {{ .Percent }}%,超过阈值 {{ .Threshold }}%"
diff --git a/web/translation/translate.zh_TW.toml b/web/translation/translate.zh_TW.toml
index 93478845..ad960931 100644
--- a/web/translation/translate.zh_TW.toml
+++ b/web/translation/translate.zh_TW.toml
@@ -483,8 +483,12 @@
"status" = "✅ 機器人正常執行!"
"usage" = "❗ 請輸入要搜尋的文字!"
"getID" = "🆔 您的 ID 為:{{ .ID }}
"
-"helpAdminCommands" = "要搜尋客戶電子郵件:\r\n/usage [電子郵件]
\r\n\r\n要搜尋入站(帶有客戶統計資料):\r\n/inbound [備註]
\r\n\r\nTelegram聊天ID:\r\n/id
"
+"helpAdminCommands" = "要重新啟動 Xray Core:\r\n/restart force
\r\n\r\n要搜尋客戶電子郵件:\r\n/usage [電子郵件]
\r\n\r\n要搜尋入站(帶有客戶統計資料):\r\n/inbound [備註]
\r\n\r\nTelegram聊天ID:\r\n/id
"
"helpClientCommands" = "要搜尋統計資料,請使用以下命令:\r\n/usage [電子郵件]
\r\n\r\nTelegram聊天ID:\r\n/id
"
+"restartUsage" = "\r\n\r\n/restart force
"
+"restartSuccess" = "✅ 操作成功!"
+"restartFailed" = "❗ 操作錯誤。\r\n\r\n錯誤: {{ .Error }}
."
+"xrayNotRunning" = "❗ Xray Core 未運行。"
[tgbot.messages]
"cpuThreshold" = "🔴 CPU 使用率為 {{ .Percent }}%,超過閾值 {{ .Threshold }}%"