diff --git a/README.md b/README.md index 5f0d4216..6fbea2a7 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,16 @@ xray panel supporting multi-protocol, **Multi-lang (English,Chinese)**, **IP Res | ------------- |:-------------:| | Multi-lang | :heavy_check_mark: | | IP Restriction | :heavy_check_mark: | -| Inbound Multi User | :clock1: | +| Inbound Multi User | :heavy_check_mark: | **If you think this project is helpful to you, you may wish to give a** :star2: +**Feel Free for Donation :** :heart: + +TRC20: TDam6uh8ctLJuz8Y3rRk4t5pLikQvtpvJE + +ETH: 0x256ddA590c35638fA4B3a25Ec4544Db087ceE826 + # Features - System Status Monitoring @@ -38,7 +44,7 @@ xray panel supporting multi-protocol, **Multi-lang (English,Chinese)**, **IP Res ``` - change access log path as you want -2 - add **IP limit and Email** for inbound(vmess & vless) +2 - add **IP limit and Unique Email** for inbound(vmess & vless) # Install & Upgrade diff --git a/web/html/xui/form/protocol/vless.html b/web/html/xui/form/protocol/vless.html index 72f9262b..ad18bec5 100644 --- a/web/html/xui/form/protocol/vless.html +++ b/web/html/xui/form/protocol/vless.html @@ -21,7 +21,7 @@ - + @@ -154,4 +154,4 @@ -{{end}} \ No newline at end of file +{{end}} diff --git a/web/html/xui/form/protocol/vmess.html b/web/html/xui/form/protocol/vmess.html index 4a03341a..582b7598 100644 --- a/web/html/xui/form/protocol/vmess.html +++ b/web/html/xui/form/protocol/vmess.html @@ -20,7 +20,7 @@ - + @@ -126,4 +126,4 @@ -{{end}} \ No newline at end of file +{{end}} diff --git a/web/job/stats_notify_job.go b/web/job/stats_notify_job.go index ca8d0be7..a3e15a9e 100644 --- a/web/job/stats_notify_job.go +++ b/web/job/stats_notify_job.go @@ -4,13 +4,10 @@ import ( "fmt" "net" "os" - "time" - "x-ui/logger" "x-ui/util/common" "x-ui/web/service" - tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" ) @@ -69,7 +66,7 @@ func (j *StatsNotifyJob) Run() { fmt.Println("get hostname error:", err) return } - info = fmt.Sprintf("主机名称:%s\r\n", name) + info = fmt.Sprintf("Hostname:%s\r\n", name) //get ip address var ip string netInterfaces, err := net.Interfaces() @@ -95,7 +92,7 @@ func (j *StatsNotifyJob) Run() { } } } - info += fmt.Sprintf("IP地址:%s\r\n \r\n", ip) + info += fmt.Sprintf("IP:%s\r\n \r\n", ip) //get traffic inbouds, err := j.inboundService.GetAllInbounds() @@ -106,11 +103,11 @@ func (j *StatsNotifyJob) Run() { //NOTE:If there no any sessions here,need to notify here //TODO:分节点推送,自动转化格式 for _, inbound := range inbouds { - info += fmt.Sprintf("节点名称:%s\r\n端口:%d\r\n上行流量↑:%s\r\n下行流量↓:%s\r\n总流量:%s\r\n", inbound.Remark, inbound.Port, common.FormatTraffic(inbound.Up), common.FormatTraffic(inbound.Down), common.FormatTraffic((inbound.Up + inbound.Down))) + info += fmt.Sprintf("Node name:%s\r\nPort:%d\r\nUpload↑:%s\r\nDownload↓:%s\r\nTotal:%s\r\n", inbound.Remark, inbound.Port, common.FormatTraffic(inbound.Up), common.FormatTraffic(inbound.Down), common.FormatTraffic((inbound.Up + inbound.Down))) if inbound.ExpiryTime == 0 { - info += fmt.Sprintf("到期时间:无限期\r\n \r\n") + info += fmt.Sprintf("Expire date:unlimited\r\n \r\n") } else { - info += fmt.Sprintf("到期时间:%s\r\n \r\n", time.Unix((inbound.ExpiryTime/1000), 0).Format("2006-01-02 15:04:05")) + info += fmt.Sprintf("Expire date:%s\r\n \r\n", time.Unix((inbound.ExpiryTime/1000), 0).Format("2006-01-02 15:04:05")) } } j.SendMsgToTgbot(info) @@ -129,12 +126,12 @@ func (j *StatsNotifyJob) UserLoginNotify(username string, ip string, time string return } if status == LoginSuccess { - msg = fmt.Sprintf("面板登录成功提醒\r\n主机名称:%s\r\n", name) + msg = fmt.Sprintf("Successfully logged-in to the panel\r\nHostname:%s\r\n", name) } else if status == LoginFail { - msg = fmt.Sprintf("面板登录失败提醒\r\n主机名称:%s\r\n", name) + msg = fmt.Sprintf("Login to the panel was unsuccessful\r\nHostname:%s\r\n", name) } - msg += fmt.Sprintf("时间:%s\r\n", time) - msg += fmt.Sprintf("用户:%s\r\n", username) + msg += fmt.Sprintf("Time:%s\r\n", time) + msg += fmt.Sprintf("Username:%s\r\n", username) msg += fmt.Sprintf("IP:%s\r\n", ip) j.SendMsgToTgbot(msg) }