From f4bb81e56897a3105c8146d20efdfba420b156f7 Mon Sep 17 00:00:00 2001 From: cosmo Date: Mon, 20 Nov 2023 00:46:58 +0800 Subject: [PATCH] beta42 --- config/config.go | 13 ++++++++ handlers/message_parser.go | 4 +-- handlers/send_private_msg.go | 24 +++++++++++---- mylog/mylog.go | 57 ++++++++++++++++++++++++++++++++---- template/config_template.go | 1 + template/config_template.yml | 3 +- 6 files changed, 88 insertions(+), 14 deletions(-) diff --git a/config/config.go b/config/config.go index aa4751a3..84c44908 100644 --- a/config/config.go +++ b/config/config.go @@ -76,6 +76,7 @@ type Settings struct { ImageLimitB int `yaml:"image_limit"` RecordSampleRate int `yaml:"record_sampleRate"` RecordBitRate int `yaml:"record_bitRate"` + NoWhiteResponse string `yaml:"No_White_Response"` } // LoadConfig 从文件中加载配置并初始化单例配置 @@ -898,3 +899,15 @@ func GetRecordBitRate() int { return instance.Settings.RecordBitRate } + +// 获取NoWhiteResponse的值 +func GetNoWhiteResponse() string { + mu.Lock() + defer mu.Unlock() + + if instance == nil { + mylog.Println("Warning: instance is nil when trying to NoWhiteResponse value.") + return "" + } + return instance.Settings.NoWhiteResponse +} diff --git a/handlers/message_parser.go b/handlers/message_parser.go index e3c300f7..59ca8ecd 100644 --- a/handlers/message_parser.go +++ b/handlers/message_parser.go @@ -322,9 +322,9 @@ func RevertTransformedText(data interface{}) string { } } - // 如果没有匹配项,则将 messageText 置为空 + // 如果没有匹配项,则将 messageText 置为兜底回复 兜底回复可空 if !matched { - messageText = "" + messageText = config.GetNoWhiteResponse() } } //检查是否启用黑名单模式 diff --git a/handlers/send_private_msg.go b/handlers/send_private_msg.go index 47807b7c..5f83eba2 100644 --- a/handlers/send_private_msg.go +++ b/handlers/send_private_msg.go @@ -184,16 +184,30 @@ func handleSendGuildChannelPrivateMsg(client callapi.Client, api openapi.OpenAPI var guildID, channelID string var err error + GroupID := message.Params.GroupID.(string) if optionalGuildID != nil && optionalChannelID != nil { guildID = *optionalGuildID channelID = *optionalChannelID } else { - //默认私信场景 通过仅有的userid来还原频道私信需要的guildid - guildID, channelID, err = getGuildIDFromMessage(message) - if err != nil { - mylog.Printf("获取 guild_id 和 channel_id 出错: %v", err) - return + //频道私信,虚拟成群 通过仅有的group来还原频道私信需要的guildid channelID + if GroupID != "" { + guildID, err = idmap.ReadConfigv2(GroupID, "guild_id") + if err != nil { + mylog.Printf("根据GroupID获取guild_id失败: %v", err) + return + } + channelID, err = idmap.RetrieveRowByIDv2(GroupID) + if err != nil { + mylog.Printf("根据GroupID获取channelID失败: %v", err) + return + } + } else { //默认私信场景 通过仅有的userid来还原频道私信需要的guildid channelID + guildID, channelID, err = getGuildIDFromMessage(message) + if err != nil { + mylog.Printf("获取 guild_id 和 channel_id 出错: %v", err) + return + } } } RawUserID := message.Params.UserID.(string) diff --git a/mylog/mylog.go b/mylog/mylog.go index d3abdb85..748c8120 100644 --- a/mylog/mylog.go +++ b/mylog/mylog.go @@ -48,16 +48,30 @@ func GetLogLevelFromConfig(logLevel int) LogLevel { } } -// 接收新参数,并设置文件日志路径 -func NewMyLogAdapter(level LogLevel, enableFileLog bool) *MyLogAdapter { +var logPath string + +func init() { exePath, err := os.Executable() if err != nil { - panic(err) // 或者处理错误 + panic(err) } + exeDir := filepath.Dir(exePath) - logPath := filepath.Join(exeDir, "log") + logPath = filepath.Join(exeDir, "log") +} + +// 全局变量,用于存储日志启用状态 +var enableFileLogGlobal bool + +// SetEnableFileLog 设置 enableFileLogGlobal 的值 +func SetEnableFileLog(value bool) { + enableFileLogGlobal = value +} +// 接收新参数,并设置文件日志路径 +func NewMyLogAdapter(level LogLevel, enableFileLog bool) *MyLogAdapter { if enableFileLog { + SetEnableFileLog(true) if _, err := os.Stat(logPath); os.IsNotExist(err) { err := os.Mkdir(logPath, 0755) if err != nil { @@ -94,12 +108,34 @@ func (adapter *MyLogAdapter) logToFile(level, message string) { } } +// 独立的文件日志记录函数 +func LogToFile(level, message string) { + if !enableFileLogGlobal { + return + } + filename := time.Now().Format("2006-01-02") + ".log" + filepath := logPath + "/" + filename + + file, err := os.OpenFile(filepath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + fmt.Println("Error opening log file:", err) + return + } + defer file.Close() + + logEntry := fmt.Sprintf("[%s] %s: %s\n", time.Now().Format("2006-01-02T15:04:05"), level, message) + if _, err := file.WriteString(logEntry); err != nil { + fmt.Println("Error writing to log file:", err) + } +} + // Debug logs a message at the debug level. func (adapter *MyLogAdapter) Debug(v ...interface{}) { if adapter.Level <= LogLevelDebug { message := fmt.Sprint(v...) Println(v...) adapter.logToFile("DEBUG", message) + emitLog("DEBUG", message) } } @@ -109,6 +145,7 @@ func (adapter *MyLogAdapter) Info(v ...interface{}) { message := fmt.Sprint(v...) Println(v...) adapter.logToFile("INFO", message) + emitLog("INFO", message) } } @@ -118,6 +155,7 @@ func (adapter *MyLogAdapter) Warn(v ...interface{}) { message := fmt.Sprint(v...) Printf("WARN: %v\n", v...) adapter.logToFile("WARN", message) + emitLog("WARN", message) } } @@ -127,6 +165,7 @@ func (adapter *MyLogAdapter) Error(v ...interface{}) { message := fmt.Sprint(v...) Printf("ERROR: %v\n", v...) adapter.logToFile("ERROR", message) + emitLog("ERROR", message) } } @@ -136,6 +175,7 @@ func (adapter *MyLogAdapter) Debugf(format string, v ...interface{}) { message := fmt.Sprintf(format, v...) Printf("DEBUG: "+format, v...) adapter.logToFile("DEBUG", message) + emitLog("DEBUG", message) } } @@ -145,6 +185,7 @@ func (adapter *MyLogAdapter) Infof(format string, v ...interface{}) { message := fmt.Sprintf(format, v...) Printf("INFO: "+format, v...) adapter.logToFile("INFO", message) + emitLog("INFO", message) } } @@ -154,6 +195,7 @@ func (adapter *MyLogAdapter) Warnf(format string, v ...interface{}) { message := fmt.Sprintf(format, v...) Printf("WARN: "+format, v...) adapter.logToFile("WARN", message) + emitLog("WARN", message) } } @@ -163,6 +205,7 @@ func (adapter *MyLogAdapter) Errorf(format string, v ...interface{}) { message := fmt.Sprintf(format, v...) Printf("ERROR: "+format, v...) adapter.logToFile("ERROR", message) + emitLog("ERROR", message) } } @@ -184,8 +227,6 @@ type EnhancedLogEntry struct { Message string `json:"message"` } -//todo 下面的不会存入文件,上头的,不会进入ws,改一改 - // 日志频道,所有的 WebSocket 客户端都会在此监听日志事件 var logChannel = make(chan EnhancedLogEntry, 1000) @@ -193,24 +234,28 @@ func Println(v ...interface{}) { log.Println(v...) message := fmt.Sprint(v...) emitLog("INFO", message) + LogToFile("INFO", message) } func Printf(format string, v ...interface{}) { log.Printf(format, v...) message := fmt.Sprintf(format, v...) emitLog("INFO", message) + LogToFile("INFO", message) } func Errorf(format string, v ...interface{}) { log.Printf(format, v...) message := fmt.Sprintf(format, v...) emitLog("ERROR", message) + LogToFile("ERROR", message) } func Fatalf(format string, v ...interface{}) { log.Printf(format, v...) message := fmt.Sprintf(format, v...) emitLog("Fatal", message) + LogToFile("Fatal", message) } func emitLog(level, message string) { diff --git a/template/config_template.go b/template/config_template.go index 05b8ff09..4879eddc 100644 --- a/template/config_template.go +++ b/template/config_template.go @@ -76,6 +76,7 @@ settings: white_prefix_mode : false #公域 过审用 指令白名单模式开关 如果审核严格 请开启并设置白名单指令 以白名单开头的指令会被通过,反之被拦截 white_prefixs : [""] #可设置多个 比如设置 机器人 测试 则只有信息以机器人 测试开头会相应 remove_prefix remove_at 需为true时生效 + No_White_Response : "" #默认不兜底,强烈建议设置一个友善的兜底回复,告知审核机器人已无隐藏指令,如:你输入的指令不对哦,@机器人来获取可用指令 black_prefix_mode : false #公私域 过审用 指令黑名单模式开关 过滤被审核打回的指令不响应 无需改机器人后端 black_prefixs : [""] #可设置多个 比如设置 查询 则查询开头的信息均被拦截 防止审核失败 diff --git a/template/config_template.yml b/template/config_template.yml index d957f98f..7561155e 100644 --- a/template/config_template.yml +++ b/template/config_template.yml @@ -67,4 +67,5 @@ settings: remove_bot_at_group : true #因为群聊机器人不支持发at,开启本开关会自动隐藏群机器人发出的at(不影响频道场景) image_limit : 100 #每分钟上传的最大图片数量,可自行增加 record_sampleRate : 24000 #语音文件的采样率 最高48000 默认24000 单位Khz - record_bitRate : 24000 #语音文件的比特率 默认24000 代表 24 kbps 最高无限 请根据带宽 您发送的实际码率调整 \ No newline at end of file + record_bitRate : 24000 #语音文件的比特率 默认24000 代表 24 kbps 最高无限 请根据带宽 您发送的实际码率调整 + No_White_Response : "" #默认不兜底,强烈建议设置一个友善的兜底回复,告知审核机器人已无隐藏指令,如:你输入的指令不对哦,@机器人来获取可用指令 \ No newline at end of file