diff --git a/.gitignore b/.gitignore index 774c5c6..1da6425 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ develop/jd_cookie *.cache jd_wskey logs/* -jd_* \ No newline at end of file +jd_* +data \ No newline at end of file diff --git a/go.mod b/go.mod index 189fc11..5be68ee 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible github.com/mattn/go-isatty v0.0.13 // indirect github.com/pkg/errors v0.9.1 - github.com/robfig/cron v1.2.0 github.com/robfig/cron/v3 v3.0.1 github.com/sirupsen/logrus v1.8.1 github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 @@ -27,4 +26,5 @@ require ( golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect gopkg.in/tucnak/telebot.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0 + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) diff --git a/go.sum b/go.sum index 241d33c..ca316e9 100644 --- a/go.sum +++ b/go.sum @@ -201,8 +201,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= -github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= diff --git a/im/qq/main.go b/im/qq/main.go index 8d32e61..73cd48a 100644 --- a/im/qq/main.go +++ b/im/qq/main.go @@ -11,6 +11,7 @@ import ( "github.com/Mrs4s/go-cqhttp/global" "github.com/Mrs4s/go-cqhttp/global/config" "github.com/cdle/sillyGirl/core" + yaml "gopkg.in/yaml.v3" "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client" @@ -41,6 +42,24 @@ func init() { conf.Account.Uin = int64(qq.GetInt("uin", 0)) conf.Account.Password = qq.Get("password") conf.Message.ReportSelfMessage = true + conf.Database = map[string]yaml.Node{ + "leveldb": { + Kind: 4, + Tag: "!!map", + Content: []*yaml.Node{ + { + Kind: 8, + Tag: "!!str", + Value: "enable", + }, + { + Kind: 8, + Tag: "!!bool", + Value: "true", + }, + }, + }, + } if conf.Output.Debug { log.SetReportCaller(true) } @@ -197,16 +216,11 @@ func init() { core.Senders <- &Sender{ Message: m, } - - // cqm := coolq.ToStringMessage(m.Elements, 0, true) - // fmt.Println(cqm, m.Self, m.Target, m.Sender.Uin) if m.Sender.Uin != c.Uin { c.MarkPrivateMessageReaded(m.Sender.Uin, int64(m.Time)) } } - OnGroupMessage := func(c *client.QQClient, m *message.GroupMessage) { - // cqm := coolq.ToStringMessage(m.Elements, m.GroupCode, true) - // fmt.Println(cqm, m.GroupCode, m.Sender.Uin) + OnGroupMessage := func(_ *client.QQClient, m *message.GroupMessage) { core.Senders <- &Sender{ Message: m, } diff --git a/im/qq/sender.go b/im/qq/sender.go index d889f5b..d62fccd 100644 --- a/im/qq/sender.go +++ b/im/qq/sender.go @@ -14,9 +14,10 @@ import ( ) type Sender struct { - Message interface{} - matches [][]string - chat *core.Chat + Message interface{} + matches [][]string + Duration *time.Duration + deleted bool } func (sender *Sender) GetContent() string { @@ -141,10 +142,6 @@ func (sender *Sender) IsMedia() bool { func (sender *Sender) Reply(msgs ...interface{}) error { msg := msgs[0] - if sender.chat != nil { - sender.chat.Push(msg) - return nil - } switch sender.Message.(type) { case *message.PrivateMessage: m := sender.Message.(*message.PrivateMessage) @@ -162,6 +159,7 @@ func (sender *Sender) Reply(msgs ...interface{}) error { bot.SendPrivateMessage(m.Sender.Uin, int64(qq.GetInt("groupCode")), &message.SendingMessage{Elements: []message.IMessageElement{&message.TextElement{Content: content}}}) } case *message.GroupMessage: + var id int32 m := sender.Message.(*message.GroupMessage) content := "" switch msg.(type) { @@ -172,34 +170,47 @@ func (sender *Sender) Reply(msgs ...interface{}) error { content = string(msg.([]byte)) case *http.Response: data, _ := ioutil.ReadAll(msg.(*http.Response).Body) - bot.SendGroupMessage(m.GroupCode, &message.SendingMessage{Elements: []message.IMessageElement{&message.AtElement{Target: m.Sender.Uin}, &message.TextElement{Content: "\n"}, &coolq.LocalImageElement{Stream: bytes.NewReader(data)}}}) + id = bot.SendGroupMessage(m.GroupCode, &message.SendingMessage{Elements: []message.IMessageElement{&message.AtElement{Target: m.Sender.Uin}, &message.TextElement{Content: "\n"}, &coolq.LocalImageElement{Stream: bytes.NewReader(data)}}}) } if content != "" { if strings.Contains(content, "\n") { content = "\n" + content } - bot.SendGroupMessage(m.GroupCode, &message.SendingMessage{Elements: []message.IMessageElement{&message.AtElement{Target: m.Sender.Uin}, &message.TextElement{Content: content}}}) + id = bot.SendGroupMessage(m.GroupCode, &message.SendingMessage{Elements: []message.IMessageElement{&message.AtElement{Target: m.Sender.Uin}, &message.TextElement{Content: content}}}) } + if id > 0 && sender.Duration != nil { + go func() { + time.Sleep(*sender.Duration) + sender.Delete() + MSG := bot.GetMessage(id) + bot.Client.RecallGroupMessage(m.GroupCode, MSG["message-id"].(int32), MSG["internal-id"].(int32)) + }() + + } + } return nil } func (sender *Sender) Delete() error { + if sender.deleted { + return nil + } switch sender.Message.(type) { case *message.GroupMessage: - sender.chat = &core.Chat{ - Class: sender.GetImType(), - ID: sender.GetChatID(), - UserID: sender.GetUserID(), - } m := sender.Message.(*message.GroupMessage) if err := bot.Client.RecallGroupMessage(m.GroupCode, m.Id, m.InternalId); err != nil { return err } } + sender.deleted = true return nil } func (sender *Sender) Disappear(lifetime ...time.Duration) { - + if len(lifetime) == 0 { + sender.Duration = &core.Duration + } else { + sender.Duration = &lifetime[0] + } }