Skip to content

Commit

Permalink
Beta79 (#219)
Browse files Browse the repository at this point in the history
* beta77

* beta77

* beta77

* beta77

* beta79

* beta79
  • Loading branch information
Hoshinonyaruko authored Dec 5, 2023
1 parent 9c0078e commit 78828cc
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 52 deletions.
14 changes: 7 additions & 7 deletions Processor/ProcessC2CMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
}
}
//转换at
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2, userid64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -125,12 +125,6 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
} else {
//将私聊信息转化为群信息(特殊需求情况下)

//转换at
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
}
//转换appid
AppIDString := strconv.FormatUint(p.Settings.AppID, 10)
//构造echo
Expand All @@ -156,6 +150,12 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
mylog.Fatalf("Error storing ID: %v", err)
}
}
//转换at
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2, userid64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
}
//框架内指令
p.HandleFrameworkCommand(messageText, data, "group_private")
//映射str的messageID到int
Expand Down
6 changes: 3 additions & 3 deletions Processor/ProcessChannelDirectMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
}
messageID := int(messageID64)
//转换at
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2, userid64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -150,7 +150,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
//获取s
s := client.GetGlobalS()
//转换at
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2, 10000) //todo 这里未转换
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -278,7 +278,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
//直接储存 适用于私信场景私聊
idmap.WriteConfigv2(data.ChannelID, "guild_id", data.GuildID)
//转换at
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2, userid64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
21 changes: 10 additions & 11 deletions Processor/ProcessGroupMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,6 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error {
// 获取s
s := client.GetGlobalS()

// 转换at
messageText := handlers.RevertTransformedText(data, "group", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
}
//群没有at,但用户可以选择加一个
if config.GetAddAtGroup() {
messageText = "[CQ:at,qq=" + config.GetAppIDStr() + "] " + messageText
}

// 转换appid
AppIDString := strconv.FormatUint(p.Settings.AppID, 10)

Expand Down Expand Up @@ -66,6 +55,16 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error {
return nil
}
}
// 转换at
messageText := handlers.RevertTransformedText(data, "group", p.Api, p.Apiv2, GroupID64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
}
//群没有at,但用户可以选择加一个
if config.GetAddAtGroup() {
messageText = "[CQ:at,qq=" + config.GetAppIDStr() + "] " + messageText
}
//框架内指令
p.HandleFrameworkCommand(messageText, data, "group")
//映射str的messageID到int
Expand Down
4 changes: 2 additions & 2 deletions Processor/ProcessGuildATMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (p *Processors) ProcessGuildATMessage(data *dto.WSATMessageData) error {
//获取s
s := client.GetGlobalS()
//转换at
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2, 10000) //todo 这里未转换
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -151,7 +151,7 @@ func (p *Processors) ProcessGuildATMessage(data *dto.WSATMessageData) error {
//转成int再互转
idmap.WriteConfigv2(fmt.Sprint(ChannelID64), "guild_id", data.GuildID)
//转换at和图片
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2, ChannelID64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
4 changes: 2 additions & 2 deletions Processor/ProcessGuildNormalMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func (p *Processors) ProcessGuildNormalMessage(data *dto.WSMessageData) error {
//获取s
s := client.GetGlobalS()
//转换at
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2, 10000) //这里未转换
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -155,7 +155,7 @@ func (p *Processors) ProcessGuildNormalMessage(data *dto.WSMessageData) error {
//转成int再互转
idmap.WriteConfigv2(fmt.Sprint(ChannelID64), "guild_id", data.GuildID)
//转换at
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2, ChannelID64)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
11 changes: 11 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ type Settings struct {
HeartBeatInterval int `yaml:"heart_beat_interval"`
LaunchReconectTimes int `yaml:"launch_reconnect_times"`
UnlockPrefix string `yaml:"unlock_prefix"`
WhiteBypass []int64 `yaml:"white_bypass"`
}

// LoadConfig 从文件中加载配置并初始化单例配置
Expand Down Expand Up @@ -1106,3 +1107,13 @@ func GetUnlockPrefix() string {
}
return instance.Settings.UnlockPrefix
}

// 获取白名单例外群数组
func GetWhiteBypass() []int64 {
mu.Lock()
defer mu.Unlock()
if instance != nil {
return instance.Settings.WhiteBypass
}
return nil // 返回nil,如果instance为nil
}
64 changes: 40 additions & 24 deletions handlers/message_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ func transformMessageText(messageText string) string {
}

// 处理at和其他定形文到onebotv11格式(cq码)
func RevertTransformedText(data interface{}, msgtype string, api openapi.OpenAPI, apiv2 openapi.OpenAPI) string {
func RevertTransformedText(data interface{}, msgtype string, api openapi.OpenAPI, apiv2 openapi.OpenAPI, vgid int64) string {
var msg *dto.Message
var menumsg bool
var messageText string
Expand Down Expand Up @@ -330,36 +330,52 @@ func RevertTransformedText(data interface{}, msgtype string, api openapi.OpenAPI
}
}

//检查是否启用白名单模式
// 检查是否启用白名单模式
if config.GetWhitePrefixMode() {
// 获取白名单数组
whitePrefixes := config.GetWhitePrefixs()
// 加锁以安全地读取 TemporaryCommands
idmap.MutexT.Lock()
temporaryCommands := make([]string, len(idmap.TemporaryCommands))
copy(temporaryCommands, idmap.TemporaryCommands)
idmap.MutexT.Unlock()

// 合并白名单和临时指令
allPrefixes := append(whitePrefixes, temporaryCommands...)
// 默认设置为不匹配
matched := false

// 遍历白名单数组,检查是否有匹配项
for _, prefix := range allPrefixes {
if strings.HasPrefix(messageText, prefix) {
// 找到匹配项,保留 messageText 并跳出循环
matched = true
// 获取白名单例外群数组(现在返回 int64 数组)
whiteBypass := config.GetWhiteBypass()
bypass := false

// 检查vgid是否在白名单例外数组中
for _, id := range whiteBypass {
if id == vgid {
bypass = true
break
}
}

// 如果没有匹配项,则将 messageText 置为兜底回复 兜底回复可空
if !matched {
messageText = ""
SendMessage(config.GetNoWhiteResponse(), data, msgtype, api, apiv2)
// 如果vgid不在白名单例外数组中,则应用白名单过滤
if !bypass {
// 获取白名单数组
whitePrefixes := config.GetWhitePrefixs()
// 加锁以安全地读取 TemporaryCommands
idmap.MutexT.Lock()
temporaryCommands := make([]string, len(idmap.TemporaryCommands))
copy(temporaryCommands, idmap.TemporaryCommands)
idmap.MutexT.Unlock()

// 合并白名单和临时指令
allPrefixes := append(whitePrefixes, temporaryCommands...)
// 默认设置为不匹配
matched := false

// 遍历白名单数组,检查是否有匹配项
for _, prefix := range allPrefixes {
if strings.HasPrefix(messageText, prefix) {
// 找到匹配项,保留 messageText 并跳出循环
matched = true
break
}
}

// 如果没有匹配项,则将 messageText 置为兜底回复 兜底回复可空
if !matched {
messageText = ""
SendMessage(config.GetNoWhiteResponse(), data, msgtype, api, apiv2)
}
}
}

//检查是否启用黑名单模式
if config.GetBlackPrefixMode() {
// 获取黑名单数组
Expand Down
4 changes: 2 additions & 2 deletions idmap/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -783,12 +783,12 @@ func RetrieveVirtualValuev2Pro(realValue string, realValueSub string) (string, s
return "", "", fmt.Errorf("error response from server: %s", response["error"])
}

firstValue, ok := response["firstValue"].(string)
firstValue, ok := response["id"].(string)
if !ok {
return "", "", fmt.Errorf("invalid response format for first value")
}

secondValue, ok := response["secondValue"].(string)
secondValue, ok := response["subid"].(string)
if !ok {
return "", "", fmt.Errorf("invalid response format for second value")
}
Expand Down
1 change: 1 addition & 0 deletions template/config_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ settings:
white_prefix_mode : false #公域 过审用 指令白名单模式开关 如果审核严格 请开启并设置白名单指令 以白名单开头的指令会被通过,反之被拦截
white_prefixs : [""] #可设置多个 比如设置 机器人 测试 则只有信息以机器人 测试开头会相应 remove_prefix remove_at 需为true时生效
white_bypass : [] #格式[1,2,3],白名单不生效的群或用户(私聊时),用于设置自己的灰度沙箱群/灰度沙箱私聊,避免开发测试时反复开关白名单的不便,请勿用于生产环境.
No_White_Response : "" #默认不兜底,强烈建议设置一个友善的兜底回复,告知审核机器人已无隐藏指令,如:你输入的指令不对哦,@机器人来获取可用指令
black_prefix_mode : false #公私域 过审用 指令黑名单模式开关 过滤被审核打回的指令不响应 无需改机器人后端
Expand Down
3 changes: 2 additions & 1 deletion template/config_template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,5 @@ settings:
AMsgRetryAsPMsg_Count : 1 #当主动信息发送失败时,自动转为后续的被动信息发送,需要开启Lazy message id,该配置项为每次跟随被动信息发送的信息数量,最大5,建议1-3
reconnect_times : 100 #反向ws连接失败后的重试次数,希望一直重试,可设置9999
heart_beat_interval : 10 #反向ws心跳间隔 单位秒 推荐5-10
launch_reconnect_times : 1 #启动时尝试反向ws连接次数,建议先打开应用端再开启gensokyo,因为启动时连接会阻塞webui启动,默认只连接一次,可自行增大
launch_reconnect_times : 1 #启动时尝试反向ws连接次数,建议先打开应用端再开启gensokyo,因为启动时连接会阻塞webui启动,默认只连接一次,可自行增大
white_bypass : [] #格式[1,2,3],白名单不生效的群,用于设置自己的灰度沙箱,避免测试时候反复开关白名单的不便.

0 comments on commit 78828cc

Please sign in to comment.