Skip to content

Commit

Permalink
beta43
Browse files Browse the repository at this point in the history
  • Loading branch information
Hoshinonyaruko committed Nov 19, 2023
1 parent f4bb81e commit 533292f
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 12 deletions.
4 changes: 2 additions & 2 deletions Processor/ProcessC2CMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
}
messageID := int(messageID64)
//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -107,7 +107,7 @@ func (p *Processors) ProcessC2CMessage(data *dto.WSC2CMessageData) error {
//将私聊信息转化为群信息(特殊需求情况下)

//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "group_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
6 changes: 3 additions & 3 deletions Processor/ProcessChannelDirectMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
}
messageID := int(messageID64)
//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -127,7 +127,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
//获取s
s := client.GetGlobalS()
//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -220,7 +220,7 @@ func (p *Processors) ProcessChannelDirectMessage(data *dto.WSDirectMessageData)
//直接储存 适用于私信场景私聊
idmap.WriteConfigv2(data.ChannelID, "guild_id", data.GuildID)
//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "guild_private", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
2 changes: 1 addition & 1 deletion Processor/ProcessGroupMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error {
s := client.GetGlobalS()

// 转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "group", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
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)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -123,7 +123,7 @@ func (p *Processors) ProcessGuildATMessage(data *dto.WSATMessageData) error {
//转成int再互转
idmap.WriteConfigv2(fmt.Sprint(ChannelID64), "guild_id", data.GuildID)
//转换at和图片
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
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)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down Expand Up @@ -125,7 +125,7 @@ func (p *Processors) ProcessGuildNormalMessage(data *dto.WSMessageData) error {
//转成int再互转
idmap.WriteConfigv2(fmt.Sprint(ChannelID64), "guild_id", data.GuildID)
//转换at
messageText := handlers.RevertTransformedText(data)
messageText := handlers.RevertTransformedText(data, "guild", p.Api, p.Apiv2)
if messageText == "" {
mylog.Printf("信息被自定义黑白名单拦截")
return nil
Expand Down
85 changes: 83 additions & 2 deletions handlers/message_parser.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
package handlers

import (
"context"
"errors"
"fmt"
"net"
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
"time"

"github.com/hoshinonyaruko/gensokyo/callapi"
"github.com/hoshinonyaruko/gensokyo/config"
"github.com/hoshinonyaruko/gensokyo/echo"
"github.com/hoshinonyaruko/gensokyo/idmap"
"github.com/hoshinonyaruko/gensokyo/mylog"
"github.com/hoshinonyaruko/gensokyo/url"
"github.com/tencent-connect/botgo/dto"
"github.com/tencent-connect/botgo/openapi"
"mvdan.cc/xurls" //xurls是一个从文本提取url的库 适用于多种场景
)

Expand Down Expand Up @@ -239,7 +244,7 @@ func transformMessageText(messageText string) string {
}

// 处理at和其他定形文到onebotv11格式(cq码)
func RevertTransformedText(data interface{}) string {
func RevertTransformedText(data interface{}, msgtype string, api openapi.OpenAPI, apiv2 openapi.OpenAPI) string {
var msg *dto.Message
switch v := data.(type) {
case *dto.WSGroupATMessageData:
Expand Down Expand Up @@ -324,7 +329,8 @@ func RevertTransformedText(data interface{}) string {

// 如果没有匹配项,则将 messageText 置为兜底回复 兜底回复可空
if !matched {
messageText = config.GetNoWhiteResponse()
messageText = ""
SendMessage(config.GetNoWhiteResponse(), data, msgtype, api, apiv2)
}
}
//检查是否启用黑名单模式
Expand Down Expand Up @@ -529,3 +535,78 @@ func sortMessageSegments(segments []map[string]interface{}) []map[string]interfa
// 按照指定的顺序合并这些切片
return append(append(atSegments, textSegments...), imageSegments...)
}

// SendMessage 发送消息根据不同的类型
func SendMessage(messageText string, data interface{}, messageType string, api openapi.OpenAPI, apiv2 openapi.OpenAPI) error {
// 强制类型转换,获取Message结构
var msg *dto.Message
switch v := data.(type) {
case *dto.WSGroupATMessageData:
msg = (*dto.Message)(v)
case *dto.WSATMessageData:
msg = (*dto.Message)(v)
case *dto.WSMessageData:
msg = (*dto.Message)(v)
case *dto.WSDirectMessageData:
msg = (*dto.Message)(v)
case *dto.WSC2CMessageData:
msg = (*dto.Message)(v)
default:
return nil
}
switch messageType {
case "guild":
// 处理公会消息
msgseq := echo.GetMappingSeq(msg.ID)
echo.AddMappingSeq(msg.ID, msgseq+1)
textMsg, _ := GenerateReplyMessage(msg.ID, nil, messageText, msgseq+1)
if _, err := api.PostMessage(context.TODO(), msg.ChannelID, textMsg); err != nil {
mylog.Printf("发送文本信息失败: %v", err)
return err
}

case "group":
// 处理群组消息
msgseq := echo.GetMappingSeq(msg.ID)
echo.AddMappingSeq(msg.ID, msgseq+1)
textMsg, _ := GenerateReplyMessage(msg.ID, nil, messageText, msgseq+1)
_, err := apiv2.PostGroupMessage(context.TODO(), msg.GroupID, textMsg)
if err != nil {
mylog.Printf("发送文本群组信息失败: %v", err)
return err
}

case "guild_private":
// 处理私信
timestamp := time.Now().Unix()
timestampStr := fmt.Sprintf("%d", timestamp)
dm := &dto.DirectMessage{
GuildID: msg.GuildID,
ChannelID: msg.ChannelID,
CreateTime: timestampStr,
}
msgseq := echo.GetMappingSeq(msg.ID)
echo.AddMappingSeq(msg.ID, msgseq+1)
textMsg, _ := GenerateReplyMessage(msg.ID, nil, messageText, msgseq+1)
if _, err := apiv2.PostDirectMessage(context.TODO(), dm, textMsg); err != nil {
mylog.Printf("发送文本信息失败: %v", err)
return err
}

case "group_private":
// 处理群组私聊消息
msgseq := echo.GetMappingSeq(msg.ID)
echo.AddMappingSeq(msg.ID, msgseq+1)
textMsg, _ := GenerateReplyMessage(msg.ID, nil, messageText, msgseq+1)
_, err := apiv2.PostC2CMessage(context.TODO(), msg.Author.ID, textMsg)
if err != nil {
mylog.Printf("发送文本私聊信息失败: %v", err)
return err
}

default:
return errors.New("未知的消息类型")
}

return nil
}

0 comments on commit 533292f

Please sign in to comment.