1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

feature anonymous mute. close #84

This commit is contained in:
Mrs4s 2020-12-24 20:36:42 +08:00
parent b79826706e
commit d360670837
4 changed files with 47 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package client
import ( import (
"crypto/md5" "crypto/md5"
"encoding/base64"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
@ -447,6 +448,10 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
sender = &message.Sender{ sender = &message.Sender{
Uin: 80000000, Uin: 80000000,
Nickname: string(anonInfo.AnonNick), Nickname: string(anonInfo.AnonNick),
AnonymousInfo: &message.AnonymousInfo{
AnonymousId: base64.StdEncoding.EncodeToString(anonInfo.AnonId),
AnonymousNick: string(anonInfo.AnonNick),
},
IsFriend: false, IsFriend: false,
} }
} else { } else {

View File

@ -1,12 +1,16 @@
package client package client
import ( import (
"fmt"
"github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/binary/jce" "github.com/Mrs4s/MiraiGo/binary/jce"
"github.com/Mrs4s/MiraiGo/client/pb/oidb" "github.com/Mrs4s/MiraiGo/client/pb/oidb"
"github.com/Mrs4s/MiraiGo/protocol/packets" "github.com/Mrs4s/MiraiGo/protocol/packets"
"github.com/Mrs4s/MiraiGo/utils"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tidwall/gjson"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"net/url"
"strings" "strings"
"sync" "sync"
) )
@ -211,6 +215,28 @@ func (g *GroupInfo) MuteAll(mute bool) {
} }
} }
func (g *GroupInfo) MuteAnonymous(id, nick string, seconds int32) error {
payload := fmt.Sprintf("anony_id=%v&group_code=%v&seconds=%v&anony_nick=%v&bkn=%v", url.QueryEscape(id), g.Code, seconds, nick, g.client.getCSRFToken())
rsp, err := utils.HttpPostBytesWithCookie("https://qqweb.qq.com/c/anonymoustalk/blacklist", []byte(payload), g.client.getCookies(), "application/x-www-form-urlencoded")
if err != nil {
return errors.Wrap(err, "failed to request blacklist")
}
j := gjson.ParseBytes(rsp)
if r := j.Get("retcode"); r.Exists() {
if r.Int() != 0 {
return errors.Errorf("retcode %v", r.Int())
}
return nil
}
if r := j.Get("cgicode"); r.Exists() {
if r.Int() != 0 {
return errors.Errorf("retcode %v", r.Int())
}
return nil
}
return nil
}
func (g *GroupInfo) Quit() { func (g *GroupInfo) Quit() {
if g.SelfPermission() != Owner { if g.SelfPermission() != Owner {
g.client.quitGroup(g.Code) g.client.quitGroup(g.Code)

View File

@ -70,10 +70,16 @@ type (
} }
Sender struct { Sender struct {
Uin int64 Uin int64
Nickname string Nickname string
CardName string CardName string
IsFriend bool AnonymousInfo *AnonymousInfo
IsFriend bool
}
AnonymousInfo struct {
AnonymousId string
AnonymousNick string
} }
IMessageElement interface { IMessageElement interface {

View File

@ -63,13 +63,17 @@ func HttpPostBytes(url string, data []byte) ([]byte, error) {
return body, nil return body, nil
} }
func HttpPostBytesWithCookie(url string, data []byte, cookie string) ([]byte, error) { func HttpPostBytesWithCookie(url string, data []byte, cookie string, contentType ...string) ([]byte, error) {
t := "application/json"
if len(contentType) > 0 {
t = contentType[0]
}
req, err := http.NewRequest("POST", url, bytes.NewReader(data)) req, err := http.NewRequest("POST", url, bytes.NewReader(data))
if err != nil { if err != nil {
return nil, err return nil, err
} }
req.Header["User-Agent"] = []string{"Dalvik/2.1.0 (Linux; U; Android 7.1.2; PCRT00 Build/N2G48H)"} req.Header["User-Agent"] = []string{"Dalvik/2.1.0 (Linux; U; Android 7.1.2; PCRT00 Build/N2G48H)"}
req.Header["Content-Type"] = []string{"application/json"} req.Header["Content-Type"] = []string{t}
if cookie != "" { if cookie != "" {
req.Header["Cookie"] = []string{cookie} req.Header["Cookie"] = []string{cookie}
} }