|
|
@@ -1926,6 +1926,8 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool
|
|
|
} else {
|
|
|
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
|
|
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.successfulOperation"), tu.ReplyKeyboardRemove())
|
|
|
+ t.sendClientIndividualLinks(chatId, client_Email)
|
|
|
+ t.sendClientQRLinks(chatId, client_Email)
|
|
|
}
|
|
|
case "add_client_submit_enable":
|
|
|
client_Enable = true
|
|
|
@@ -1936,6 +1938,8 @@ func (t *Tgbot) answerCallback(callbackQuery *telego.CallbackQuery, isAdmin bool
|
|
|
} else {
|
|
|
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
|
|
t.SendMsgToTgbot(chatId, t.I18nBot("tgbot.answers.successfulOperation"), tu.ReplyKeyboardRemove())
|
|
|
+ t.sendClientIndividualLinks(chatId, client_Email)
|
|
|
+ t.sendClientQRLinks(chatId, client_Email)
|
|
|
}
|
|
|
case "reset_all_traffics_cancel":
|
|
|
t.deleteMessageTgBot(chatId, callbackQuery.Message.GetMessageID())
|
|
|
@@ -3302,6 +3306,27 @@ func (t *Tgbot) searchClient(chatId int64, email string, messageID ...int) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+// getCommonClientButtons returns the shared inline keyboard rows for client configuration
|
|
|
+func (t *Tgbot) getCommonClientButtons() [][]telego.InlineKeyboardButton {
|
|
|
+ return [][]telego.InlineKeyboardButton{
|
|
|
+ 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.InlineKeyboardButton(t.I18nBot("tgbot.buttons.ipLimit")).WithCallbackData("add_client_ch_default_ip_limit"),
|
|
|
+ ),
|
|
|
+ tu.InlineKeyboardRow(
|
|
|
+ tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
|
|
+ tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"),
|
|
|
+ ),
|
|
|
+ tu.InlineKeyboardRow(
|
|
|
+ tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
|
|
+ ),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// addClient handles the process of adding a new client to an inbound.
|
|
|
func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|
|
inbound, err := t.inboundService.GetInbound(receiver_inbound_ID)
|
|
|
@@ -3312,91 +3337,40 @@ func (t *Tgbot) addClient(chatId int64, msg string, messageID ...int) {
|
|
|
|
|
|
protocol := inbound.Protocol
|
|
|
|
|
|
+ var protocolRows [][]telego.InlineKeyboardButton
|
|
|
switch protocol {
|
|
|
case model.VMESS, model.VLESS:
|
|
|
- inlineKeyboard := tu.InlineKeyboard(
|
|
|
+ protocolRows = [][]telego.InlineKeyboardButton{
|
|
|
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.InlineKeyboardButton(t.I18nBot("tgbot.buttons.ipLimit")).WithCallbackData("add_client_ch_default_ip_limit"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
|
|
- ),
|
|
|
- )
|
|
|
- if len(messageID) > 0 {
|
|
|
- t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
|
|
- } else {
|
|
|
- t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
|
|
}
|
|
|
case model.Trojan:
|
|
|
- inlineKeyboard := tu.InlineKeyboard(
|
|
|
+ protocolRows = [][]telego.InlineKeyboardButton{
|
|
|
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.InlineKeyboardButton("ip limit").WithCallbackData("add_client_ch_default_ip_limit"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
|
|
- ),
|
|
|
- )
|
|
|
- if len(messageID) > 0 {
|
|
|
- t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
|
|
- } else {
|
|
|
- t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
|
|
}
|
|
|
case model.Shadowsocks:
|
|
|
- inlineKeyboard := tu.InlineKeyboard(
|
|
|
+ protocolRows = [][]telego.InlineKeyboardButton{
|
|
|
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.InlineKeyboardButton("ip limit").WithCallbackData("add_client_ch_default_ip_limit"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitDisable")).WithCallbackData("add_client_submit_disable"),
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.submitEnable")).WithCallbackData("add_client_submit_enable"),
|
|
|
- ),
|
|
|
- tu.InlineKeyboardRow(
|
|
|
- tu.InlineKeyboardButton(t.I18nBot("tgbot.buttons.cancel")).WithCallbackData("add_client_cancel"),
|
|
|
- ),
|
|
|
- )
|
|
|
-
|
|
|
- if len(messageID) > 0 {
|
|
|
- t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
|
|
- } else {
|
|
|
- t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ commonRows := t.getCommonClientButtons()
|
|
|
+ inlineKeyboard := tu.InlineKeyboard(append(protocolRows, commonRows...)...)
|
|
|
+
|
|
|
+ if len(messageID) > 0 {
|
|
|
+ t.editMessageTgBot(chatId, messageID[0], msg, inlineKeyboard)
|
|
|
+ } else {
|
|
|
+ t.SendMsgToTgbot(chatId, msg, inlineKeyboard)
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// searchInbound searches for inbounds by remark and sends the results.
|