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

Beta82 #223

Merged
merged 9 commits into from
Dec 6, 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
19 changes: 12 additions & 7 deletions Processor/ProcessC2CMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
package Processor

import (
"fmt"
"log"
"strconv"
"time"
Expand Down Expand Up @@ -70,7 +71,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 @@ -112,6 +113,8 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now())
//储存类型
echo.AddMsgType(AppIDString, userid64, "group_private")
//储存当前群或频道号的类型
idmap.WriteConfigv2(fmt.Sprint(userid64), "type", "group_private")
//储存当前群或频道号的类型 私信不需要
//idmap.WriteConfigv2(data.ChannelID, "type", "group_private")

Expand All @@ -125,12 +128,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 +153,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 Expand Up @@ -222,6 +225,8 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
echo.AddMsgID(AppIDString, userid64, data.ID)
//映射类型
echo.AddMsgType(AppIDString, userid64, "group_private")
//储存当前群或频道号的类型
idmap.WriteConfigv2(fmt.Sprint(userid64), "type", "group_private")
//懒message_id池
echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now())

Expand Down
10 changes: 7 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 @@ -128,6 +128,8 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
//其实不需要用AppIDString,因为gensokyo是单机器人框架
echo.AddMsgID(AppIDString, userid64, data.ID)
echo.AddMsgType(AppIDString, userid64, "guild_private")
//储存当前群或频道号的类型
idmap.WriteConfigv2(fmt.Sprint(userid64), "type", "guild_private")
//懒message_id池
echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now())

Expand All @@ -150,7 +152,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 @@ -224,6 +226,8 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
echo.AddMsgType(AppIDString, userid64, "guild_private")
//储存当前群或频道号的类型
idmap.WriteConfigv2(data.ChannelID, "type", "guild_private")
//储存当前群或频道号的类型
idmap.WriteConfigv2(fmt.Sprint(userid64), "type", "guild_private")
//todo 完善频道类型信息转换
//懒message_id池
echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now())
Expand Down Expand Up @@ -278,7 +282,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
26 changes: 26 additions & 0 deletions Processor/Processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,13 +274,18 @@ func (p *Processors) HandleFrameworkCommand(messageText string, data interface{}
var err error
var now, new, newpro1, newpro2 string
var realid, realid2 string
var guildid, guilduserid string
switch v := data.(type) {
case *dto.WSGroupATMessageData:
realid = v.Author.ID
case *dto.WSATMessageData:
realid = v.Author.ID
guildid = v.GuildID
guilduserid = v.Author.ID
case *dto.WSMessageData:
realid = v.Author.ID
guildid = v.GuildID
guilduserid = v.Author.ID
case *dto.WSDirectMessageData:
realid = v.Author.ID
case *dto.WSC2CMessageData:
Expand Down Expand Up @@ -320,6 +325,27 @@ func (p *Processors) HandleFrameworkCommand(messageText string, data interface{}
virtualValueIncluded = contains(masterIDs, new)
}

//unlock指令
if Type == "guild" && strings.HasPrefix(cleanedMessage, config.GetUnlockPrefix()) {
dm := &dto.DirectMessageToCreate{
SourceGuildID: guildid,
RecipientID: guilduserid,
}
cdm, err := p.Api.CreateDirectMessage(context.TODO(), dm)
if err != nil {
mylog.Printf("unlock指令创建dm失败:%v", err)
}
msg := &dto.MessageToCreate{
Content: "欢迎使用Gensokyo框架部署QQ机器人",
MsgType: 0,
MsgID: "",
}
_, err = p.Api.PostDirectMessage(context.TODO(), cdm, msg)
if err != nil {
mylog.Printf("unlock指令发送失败:%v", err)
}
}

// me指令处理逻辑
if strings.HasPrefix(cleanedMessage, config.GetMePrefix()) {
if err != nil {
Expand Down
24 changes: 24 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ type Settings struct {
ReconnecTimes int `yaml:"reconnect_times"`
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 @@ -1093,3 +1095,25 @@ func GetLaunchReconectTimes() int {
}
return instance.Settings.LaunchReconectTimes
}

// 获取GetUnlockPrefix
func GetUnlockPrefix() string {
mu.Lock()
defer mu.Unlock()

if instance == nil {
mylog.Println("Warning: instance is nil when trying to UnlockPrefix value.")
return "/unlock"
}
return instance.Settings.UnlockPrefix
}

// 获取白名单例外群数组
func GetWhiteBypass() []int64 {
mu.Lock()
defer mu.Unlock()
if instance != nil {
return instance.Settings.WhiteBypass
}
return nil // 返回nil,如果instance为nil
}
25 changes: 16 additions & 9 deletions echo/echo.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,23 +195,30 @@ func PushGlobalStack(pair MessageGroupPair) {
globalMessageGroupStack.stack = append(globalMessageGroupStack.stack, pair)
}

// PopGlobalStackMulti 从全局栈中取出指定数量的 MessageGroupPair
// PopGlobalStackMulti 从全局栈中取出指定数量的 MessageGroupPair,但不删除它们
func PopGlobalStackMulti(count int) []MessageGroupPair {
globalMessageGroupStack.mu.Lock()
defer globalMessageGroupStack.mu.Unlock()

// 如果 count 为 0 或栈为空,则不取出元素
if count == 0 || len(globalMessageGroupStack.stack) == 0 {
return nil
}

if count >= len(globalMessageGroupStack.stack) {
result := globalMessageGroupStack.stack
globalMessageGroupStack.stack = nil
return result
if count > len(globalMessageGroupStack.stack) {
count = len(globalMessageGroupStack.stack)
}

result := globalMessageGroupStack.stack[len(globalMessageGroupStack.stack)-count:]
globalMessageGroupStack.stack = globalMessageGroupStack.stack[:len(globalMessageGroupStack.stack)-count]
return result
return globalMessageGroupStack.stack[:count]
}

// RemoveFromGlobalStack 从全局栈中删除指定下标的元素
func RemoveFromGlobalStack(index int) {
globalMessageGroupStack.mu.Lock()
defer globalMessageGroupStack.mu.Unlock()

if index < 0 || index >= len(globalMessageGroupStack.stack) {
return // 下标越界检查
}

globalMessageGroupStack.stack = append(globalMessageGroupStack.stack[:index], globalMessageGroupStack.stack[index+1:]...)
}
Loading
Loading