Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Beta79 #219

Merged
merged 7 commits into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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],白名单不生效的群,用于设置自己的灰度沙箱,避免测试时候反复开关白名单的不便.
Loading