mirror of
https://github.com/fumiama/NanoBot.git
synced 2026-06-23 12:40:38 +08:00
feat: implement imoto
This commit is contained in:
47
context.go
47
context.go
@@ -1,12 +1,17 @@
|
|||||||
package nano
|
package nano
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
base14 "github.com/fumiama/go-base16384"
|
||||||
|
"github.com/fumiama/imoto"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate go run codegen/context/main.go
|
//go:generate go run codegen/context/main.go
|
||||||
@@ -79,6 +84,8 @@ func (ctx *Ctx) CheckSession() Rule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var imotoken = "f7f06a63b8c111df0d4faa256cd5ba35cb98678ee8274923576d0416b52fe768"
|
||||||
|
|
||||||
// Send 发送一批消息
|
// Send 发送一批消息
|
||||||
func (ctx *Ctx) Send(messages Messages) (m []*Message, err error) {
|
func (ctx *Ctx) Send(messages Messages) (m []*Message, err error) {
|
||||||
isnextreply := false
|
isnextreply := false
|
||||||
@@ -99,9 +106,6 @@ func (ctx *Ctx) Send(messages Messages) (m []*Message, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
case MessageSegmentTypeImageBytes:
|
case MessageSegmentTypeImageBytes:
|
||||||
if ctx.IsQQ {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
reply, err = ctx.SendImageBytes(StringToBytes(msg.Data), isnextreply, textlist...)
|
reply, err = ctx.SendImageBytes(StringToBytes(msg.Data), isnextreply, textlist...)
|
||||||
if isnextreply {
|
if isnextreply {
|
||||||
isnextreply = false
|
isnextreply = false
|
||||||
@@ -200,6 +204,27 @@ func (ctx *Ctx) SendPlainMessage(replytosender bool, printable ...any) (*Message
|
|||||||
// SendImage 发送带图片消息到对方
|
// SendImage 发送带图片消息到对方
|
||||||
func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (reply *Message, err error) {
|
func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (reply *Message, err error) {
|
||||||
if OnlyQQ(ctx) {
|
if OnlyQQ(ctx) {
|
||||||
|
if strings.HasPrefix(file, "file:///") {
|
||||||
|
data, err := os.ReadFile(file[8:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ctx.SendImageBytes(data, replytosender, caption...)
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(file, "base64://") {
|
||||||
|
data, err := base64.StdEncoding.DecodeString(file[9:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ctx.SendImageBytes(data, replytosender, caption...)
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(file, "base16384://") {
|
||||||
|
data := base14.DecodeFromString(file[12:])
|
||||||
|
if len(data) == 0 {
|
||||||
|
return nil, errors.New("invalid base16384 image")
|
||||||
|
}
|
||||||
|
return ctx.SendImageBytes(data, replytosender, caption...)
|
||||||
|
}
|
||||||
fp := &FilePost{
|
fp := &FilePost{
|
||||||
Type: FileTypeImage,
|
Type: FileTypeImage,
|
||||||
URL: file,
|
URL: file,
|
||||||
@@ -231,7 +256,21 @@ func (ctx *Ctx) SendImage(file string, replytosender bool, caption ...any) (repl
|
|||||||
// SendImageBytes 发送带图片消息到对方
|
// SendImageBytes 发送带图片消息到对方
|
||||||
func (ctx *Ctx) SendImageBytes(data []byte, replytosender bool, caption ...any) (*Message, error) {
|
func (ctx *Ctx) SendImageBytes(data []byte, replytosender bool, caption ...any) (*Message, error) {
|
||||||
if OnlyQQ(ctx) {
|
if OnlyQQ(ctx) {
|
||||||
return nil, errors.New("QQ暂不支持直接发送图片数据")
|
file, _, _, err := imoto.Bed(imotoken, data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fp := &FilePost{
|
||||||
|
Type: FileTypeImage,
|
||||||
|
URL: file,
|
||||||
|
}
|
||||||
|
if len(caption) > 0 {
|
||||||
|
_, _ = ctx.SendPlainMessage(replytosender, caption...)
|
||||||
|
}
|
||||||
|
if OnlyQQGroup(ctx) {
|
||||||
|
return ctx.PostFileToQQGroup(ctx.Message.ChannelID, fp)
|
||||||
|
}
|
||||||
|
return ctx.PostFileToQQUser(ctx.Message.Author.ID, fp)
|
||||||
}
|
}
|
||||||
|
|
||||||
post := &MessagePost{
|
post := &MessagePost{
|
||||||
|
|||||||
1
go.mod
1
go.mod
@@ -9,6 +9,7 @@ require (
|
|||||||
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
|
github.com/RomiChan/syncx v0.0.0-20221202055724-5f842c53020e
|
||||||
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
|
github.com/RomiChan/websocket v1.4.3-0.20220227141055-9b2c6168c9c5
|
||||||
github.com/fumiama/go-base16384 v1.7.0
|
github.com/fumiama/go-base16384 v1.7.0
|
||||||
|
github.com/fumiama/imoto v0.1.1
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/sirupsen/logrus v1.9.3
|
github.com/sirupsen/logrus v1.9.3
|
||||||
github.com/stretchr/testify v1.8.1
|
github.com/stretchr/testify v1.8.1
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -25,6 +25,8 @@ github.com/fumiama/go-simple-protobuf v0.1.0 h1:rLzJgNqB6LHNDVMl81yyNt6ZKziWtVfu
|
|||||||
github.com/fumiama/go-simple-protobuf v0.1.0/go.mod h1:5yYNapXq1tQMOZg9bOIVhQlZk9pQqpuFIO4DZLbsdy4=
|
github.com/fumiama/go-simple-protobuf v0.1.0/go.mod h1:5yYNapXq1tQMOZg9bOIVhQlZk9pQqpuFIO4DZLbsdy4=
|
||||||
github.com/fumiama/gofastTEA v0.0.10 h1:JJJ+brWD4kie+mmK2TkspDXKzqq0IjXm89aGYfoGhhQ=
|
github.com/fumiama/gofastTEA v0.0.10 h1:JJJ+brWD4kie+mmK2TkspDXKzqq0IjXm89aGYfoGhhQ=
|
||||||
github.com/fumiama/gofastTEA v0.0.10/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk=
|
github.com/fumiama/gofastTEA v0.0.10/go.mod h1:RIdbYZyB4MbH6ZBlPymRaXn3cD6SedlCu5W/HHfMPBk=
|
||||||
|
github.com/fumiama/imoto v0.1.1 h1:UtWslFtRSNKGNB7O9ThhY66Rz4foJ5gfdEgvIH0W01A=
|
||||||
|
github.com/fumiama/imoto v0.1.1/go.mod h1:1MLP+qfEbhZOn+ETXd6k0xkjMyNGuqnaiblcQuWu9NQ=
|
||||||
github.com/fumiama/sqlite3 v1.20.0-with-win386 h1:ZR1AXGBEtkfq9GAXehOVcwn+aaCG8itrkgEsz4ggx5k=
|
github.com/fumiama/sqlite3 v1.20.0-with-win386 h1:ZR1AXGBEtkfq9GAXehOVcwn+aaCG8itrkgEsz4ggx5k=
|
||||||
github.com/fumiama/sqlite3 v1.20.0-with-win386/go.mod h1:Os58MHwYCcYZCy2PGChBrQtBAw5/LS1ZZOkfc+C/I7s=
|
github.com/fumiama/sqlite3 v1.20.0-with-win386/go.mod h1:Os58MHwYCcYZCy2PGChBrQtBAw5/LS1ZZOkfc+C/I7s=
|
||||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
|||||||
Reference in New Issue
Block a user