From b616a5b1388973bc8037776c3f7e32a250960b12 Mon Sep 17 00:00:00 2001 From: FranzKafkayu Date: Fri, 22 Apr 2022 23:55:25 +0800 Subject: [PATCH] 1.optimize Tg bot notify info 2.fixed a bug when ParseIn twith Tg bot chat id --- web/controller/index.go | 5 +++-- web/job/stats_notify_job.go | 25 ++++++++++++++++++++++--- web/service/setting.go | 2 +- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web/controller/index.go b/web/controller/index.go index fd21f6b..c915cff 100644 --- a/web/controller/index.go +++ b/web/controller/index.go @@ -58,14 +58,15 @@ func (a *IndexController) login(c *gin.Context) { return } user := a.userService.CheckUser(form.Username, form.Password) + timeStr := time.Now().Format("2006-01-02 15:04:05") if user == nil { + job.NewStatsNotifyJob().UserLoginNotify(form.Username, getRemoteIp(c), timeStr, 0) logger.Infof("wrong username or password: \"%s\" \"%s\"", form.Username, form.Password) pureJsonMsg(c, false, "用户名或密码错误") return } else { - timeStr := time.Now().Format("2006-01-02 15:04:05") logger.Infof("%s login success,Ip Address:%s\n", form.Username, getRemoteIp(c)) - job.NewStatsNotifyJob().UserLoginNotify(form.Username, getRemoteIp(c), timeStr) + job.NewStatsNotifyJob().UserLoginNotify(form.Username, getRemoteIp(c), timeStr, 1) } err = session.SetLoginUser(c, user) diff --git a/web/job/stats_notify_job.go b/web/job/stats_notify_job.go index c245211..1090d61 100644 --- a/web/job/stats_notify_job.go +++ b/web/job/stats_notify_job.go @@ -4,6 +4,9 @@ import ( "fmt" "net" "os" + + "time" + "x-ui/logger" "x-ui/util/common" "x-ui/web/service" @@ -11,6 +14,13 @@ import ( tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" ) +type LoginStatus byte + +const ( + LoginSuccess LoginStatus = 1 + LoginFail LoginStatus = 0 +) + type StatsNotifyJob struct { enable bool xrayService service.XrayService @@ -96,12 +106,17 @@ 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 \r\n", inbound.Remark, inbound.Port, common.FormatTraffic(inbound.Up), common.FormatTraffic(inbound.Down), common.FormatTraffic((inbound.Up + inbound.Down))) + 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))) + if inbound.ExpiryTime == 0 { + info += fmt.Sprintf("到期时间:无限期\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")) + } } j.SendMsgToTgbot(info) } -func (j *StatsNotifyJob) UserLoginNotify(username string, ip string, time string) { +func (j *StatsNotifyJob) UserLoginNotify(username string, ip string, time string, status LoginStatus) { if username == "" || ip == "" || time == "" { logger.Warning("UserLoginNotify failed,invalid info") return @@ -113,7 +128,11 @@ func (j *StatsNotifyJob) UserLoginNotify(username string, ip string, time string fmt.Println("get hostname error:", err) return } - msg = fmt.Sprintf("面板登录提醒\r\n主机名称:%s\r\n", name) + if status == LoginSuccess { + msg = fmt.Sprintf("面板登录成功提醒\r\n主机名称:%s\r\n", name) + } else if status == LoginFail { + msg = fmt.Sprintf("面板登录失败提醒\r\n主机名称:%s\r\n", name) + } msg += fmt.Sprintf("时间:%s\r\n", time) msg += fmt.Sprintf("用户:%s\r\n", username) msg += fmt.Sprintf("IP:%s\r\n", ip) diff --git a/web/service/setting.go b/web/service/setting.go index 2f9020d..bedc833 100644 --- a/web/service/setting.go +++ b/web/service/setting.go @@ -76,7 +76,7 @@ func (s *SettingService) GetAllSetting() (*entity.AllSetting, error) { fieldV := v.FieldByName(field.Name) switch t := fieldV.Interface().(type) { case int: - n, err := strconv.ParseInt(value, 10, 32) + n, err := strconv.ParseInt(value, 10, 64) if err != nil { return err }