Skip to content
This repository has been archived by the owner on Jul 27, 2024. It is now read-only.

Commit

Permalink
新增功能 (#40)
Browse files Browse the repository at this point in the history
* fix lack of GetSenderUid function

* add 拍一拍

* add 回复功能 语音功能

* add 组合消息 markdown消息

---------

Co-authored-by: wangxiaowen <[email protected]>
  • Loading branch information
mcoo and wangxiaowen authored Apr 17, 2024
2 parents 8dd9a3e + 67f1f79 commit 0c94b36
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 20 deletions.
Binary file added example/test.amr
Binary file not shown.
62 changes: 42 additions & 20 deletions v2/apiBuilder/opqapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,29 +24,51 @@ type Builder struct {
CgiRequest *CgiRequest `json:"CgiRequest,omitempty"`
}
type CgiRequest struct {
LastUin *int64 `json:"LastUin,omitempty"`
OpCode *int `json:"OpCode,omitempty"`
MsgSeq *int64 `json:"MsgSeq,omitempty"`
MsgType *int `json:"MsgType,omitempty"`
GroupCode *int64 `json:"GroupCode,omitempty"`
Uin *int64 `json:"Uin,omitempty"`
LastBuffer *string `json:"LastBuffer,omitempty"`
CommandId *int `json:"CommandId,omitempty"`
FilePath *string `json:"FilePath,omitempty"`
Base64Buf *string `json:"Base64Buf,omitempty"`
FileUrl *string `json:"FileUrl,omitempty"`
ToUin *int64 `json:"ToUin,omitempty"`
ToType *int `json:"ToType,omitempty"`
Content *string `json:"Content,omitempty"`
SubMsgType *int `json:"SubMsgType,omitempty"`
Images []*File `json:"Images,omitempty"`
Uid *string `json:"Uid,omitempty"`
MsgRandom *int64 `json:"MsgRandom,omitempty"`
BanTime *int `json:"BanTime,omitempty"`
Nick *string `json:"Nick,omitempty"`
LastUin *int64 `json:"LastUin,omitempty"`
OpCode *int `json:"OpCode,omitempty"`
MsgSeq *int64 `json:"MsgSeq,omitempty"`
MsgType *int `json:"MsgType,omitempty"`
GroupCode *int64 `json:"GroupCode,omitempty"`
Uin *int64 `json:"Uin,omitempty"`
LastBuffer *string `json:"LastBuffer,omitempty"`
CommandId *int `json:"CommandId,omitempty"`
FilePath *string `json:"FilePath,omitempty"`
Base64Buf *string `json:"Base64Buf,omitempty"`
FileUrl *string `json:"FileUrl,omitempty"`
ToUin *int64 `json:"ToUin,omitempty"`
ToType *int `json:"ToType,omitempty"`
Content *string `json:"Content,omitempty"`
SubMsgType *int `json:"SubMsgType,omitempty"`
MsgBodys []*MsgBody `json:"MsgBodys,omitempty"`
Images []*File `json:"Images,omitempty"`
Voice *File `json:"Voice,omitempty"`
Markdown *string `json:"Markdown,omitempty"`
Keyboard []*map[string][]*Button `json:"Keyboard,omitempty"`
Uid *string `json:"Uid,omitempty"`
MsgRandom *int64 `json:"MsgRandom,omitempty"`
BanTime *int `json:"BanTime,omitempty"`
Nick *string `json:"Nick,omitempty"`
AtUinLists []struct {
Uin *int64 `json:"Uin,omitempty"`
} `json:"AtUinLists,omitempty"`
ReplyTo *struct {
MsgSeq *int64 `json:"MsgSeq,omitempty"`
MsgUid *int64 `json:"MsgUid,omitempty"`
} `json:"ReplyTo,omitempty"`
}
type MsgBody struct {
Content *string `json:"Content,omitempty"`
Image *File `json:"Image,omitempty"`
}
type Button struct {
ID string `json:"Id"`
RenderDataLabel string `json:"RenderDataLabel"`
RenderDataVisitedLabel string `json:"RenderDataVisitedLabel"`
RenderDataStyle int `json:"RenderDataStyle"`
ActionType int `json:"ActionType"`
ActionPermissonType int `json:"ActionPermissonType"`
ActionData string `json:"ActionData"`
ActionUnsupportTips string `json:"ActionUnsupportTips"`
}

func (b *Builder) BuildStringBody() (string, error) {
Expand Down
51 changes: 51 additions & 0 deletions v2/apiBuilder/sendMsg.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ type ISendMsg interface {
type IMsg interface {
ToUin(uin int64) IMsg
TextMsg(text string) IMsg
ReplyMsg(MsgSeq, MsgUid int64) IMsg
PicMsg(...*File) IMsg
VoiceMsg(voice *File) IMsg
XmlMsg(xml string) IMsg
JsonMsg(json string) IMsg
MultiMsg(msgBody ...*MsgBody) IMsg
MarkDownMsg(text string) IMsg
At(uint ...int64) IMsg
Buttons(keys ...*Button) IMsg
DoApi
}

Expand Down Expand Up @@ -57,13 +62,35 @@ func (b *Builder) TextMsg(text string) IMsg {
b.CgiRequest.Content = &text
return b
}

func (b *Builder) ReplyMsg(MsgSeq, MsgUid int64) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
replyTo := struct {
MsgSeq *int64 `json:"MsgSeq,omitempty"`
MsgUid *int64 `json:"MsgUid,omitempty"`
}{
MsgSeq: &MsgSeq,
MsgUid: &MsgUid,
}
b.CgiRequest.ReplyTo = &replyTo
return b
}
func (b *Builder) PicMsg(pics ...*File) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
b.CgiRequest.Images = append(b.CgiRequest.Images, pics...)
return b
}
func (b *Builder) VoiceMsg(voice *File) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
b.CgiRequest.Voice = voice
return b
}
func (b *Builder) XmlMsg(xml string) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
Expand All @@ -82,6 +109,22 @@ func (b *Builder) JsonMsg(json string) IMsg {
b.CgiRequest.Content = &json
return b
}
func (b *Builder) MultiMsg(msgBodys ...*MsgBody) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
cmd := "SsoUploadMultiMsg"
b.CgiCmd = &cmd
b.CgiRequest.MsgBodys = msgBodys
return b
}
func (b *Builder) MarkDownMsg(md string) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
b.CgiRequest.Markdown = &md
return b
}
func (b *Builder) At(uin ...int64) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
Expand All @@ -94,3 +137,11 @@ func (b *Builder) At(uin ...int64) IMsg {
}
return b
}
func (b *Builder) Buttons(keys ...*Button) IMsg {
if b.CgiRequest == nil {
b.CgiRequest = &CgiRequest{}
}
bc := map[string][]*Button{"Buttons": keys}
b.CgiRequest.Keyboard = append(b.CgiRequest.Keyboard, &bc)
return b
}
1 change: 1 addition & 0 deletions v2/apiBuilder/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ type File struct {
FileId int64 `json:"FileId"`
Height int `json:"Height"`
Width int `json:"Width"`
Url string `json:"Url"`
}

func (b *Builder) DoUpload(ctx context.Context) (*File, error) {
Expand Down
29 changes: 29 additions & 0 deletions v2/example/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,22 @@ func main() {
apiBuilder.New(apiUrl, event.GetCurrentQQ()).GroupManager().RevokeMsg().ToGUin(groupMsg.GetGroupUin()).MsgSeq(response.MsgSeq).MsgRandom(response.MsgTime).Do(ctx)
})
}
if text == "reply" {
apiBuilder.New(apiUrl, event.GetCurrentQQ()).SendMsg().GroupMsg().ToUin(groupMsg.GetGroupUin()).TextMsg("回复").ReplyMsg(groupMsg.GetMsgSeq(), groupMsg.GetMsgUid()).Do(ctx)
}
if text == "md" {
btn1 := &apiBuilder.Button{
ID: "1",
RenderDataLabel: "⬅️客户端内访问",
RenderDataVisitedLabel: "⬅️客户端内访问",
RenderDataStyle: 0,
ActionType: 0,
ActionPermissonType: 2,
ActionData: "https://q.qq.com/",
ActionUnsupportTips: "兼容文本",
}
apiBuilder.New(apiUrl, event.GetCurrentQQ()).SendMsg().GroupMsg().ToUin(groupMsg.GetGroupUin()).MarkDownMsg("# #一号标题 \n").Buttons(btn1).Do(ctx)
}
if text == "pic" {
p, err := os.ReadFile("example/test.jpg")
if err != nil {
Expand All @@ -50,6 +66,19 @@ func main() {
log.Debug(pic)
apiBuilder.New(apiUrl, event.GetCurrentQQ()).SendMsg().GroupMsg().ToUin(groupMsg.GetGroupUin()).PicMsg(pic).Do(ctx)
}
if text == "voice" {
v, err := os.ReadFile("example/test.amr")
if err != nil {
panic(err)
}

voice, err := apiBuilder.New(apiUrl, event.GetCurrentQQ()).Upload().GroupVoice().SetBase64Buf(base64.StdEncoding.EncodeToString(v)).DoUpload(ctx)
if err != nil {
panic(err)
}
log.Debug(voice)
apiBuilder.New(apiUrl, event.GetCurrentQQ()).SendMsg().GroupMsg().ToUin(groupMsg.GetGroupUin()).VoiceMsg(voice).Do(ctx)
}
}
}

Expand Down

0 comments on commit 0c94b36

Please sign in to comment.