Skip to content

Commit

Permalink
beta42
Browse files Browse the repository at this point in the history
  • Loading branch information
Hoshinonyaruko committed Nov 19, 2023
1 parent 365a14b commit f4bb81e
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 14 deletions.
13 changes: 13 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 从文件中加载配置并初始化单例配置
Expand Down Expand Up @@ -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
}
4 changes: 2 additions & 2 deletions handlers/message_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,9 +322,9 @@ func RevertTransformedText(data interface{}) string {
}
}

// 如果没有匹配项,则将 messageText 置为空
// 如果没有匹配项,则将 messageText 置为兜底回复 兜底回复可空
if !matched {
messageText = ""
messageText = config.GetNoWhiteResponse()
}
}
//检查是否启用黑名单模式
Expand Down
24 changes: 19 additions & 5 deletions handlers/send_private_msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
57 changes: 51 additions & 6 deletions mylog/mylog.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
}
}

Expand All @@ -109,6 +145,7 @@ func (adapter *MyLogAdapter) Info(v ...interface{}) {
message := fmt.Sprint(v...)
Println(v...)
adapter.logToFile("INFO", message)
emitLog("INFO", message)
}
}

Expand All @@ -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)
}
}

Expand All @@ -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)
}
}

Expand All @@ -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)
}
}

Expand All @@ -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)
}
}

Expand All @@ -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)
}
}

Expand All @@ -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)
}
}

Expand All @@ -184,33 +227,35 @@ type EnhancedLogEntry struct {
Message string `json:"message"`
}

//todo 下面的不会存入文件,上头的,不会进入ws,改一改

// 日志频道,所有的 WebSocket 客户端都会在此监听日志事件
var logChannel = make(chan EnhancedLogEntry, 1000)

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) {
Expand Down
1 change: 1 addition & 0 deletions template/config_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 : [""] #可设置多个 比如设置 查询 则查询开头的信息均被拦截 防止审核失败
Expand Down
3 changes: 2 additions & 1 deletion template/config_template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 最高无限 请根据带宽 您发送的实际码率调整
record_bitRate : 24000 #语音文件的比特率 默认24000 代表 24 kbps 最高无限 请根据带宽 您发送的实际码率调整
No_White_Response : "" #默认不兜底,强烈建议设置一个友善的兜底回复,告知审核机器人已无隐藏指令,如:你输入的指令不对哦,@机器人来获取可用指令

0 comments on commit f4bb81e

Please sign in to comment.