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 }}%"