support offline-mode chat message sending

This commit is contained in:
Tnze
2022-12-07 23:43:54 +08:00
parent 9e33febe3f
commit e95259e2e6
2 changed files with 34 additions and 5 deletions

View File

@ -1,8 +1,11 @@
package msg
import (
"encoding/hex"
"crypto/rand"
"encoding/binary"
"errors"
"fmt"
"time"
"github.com/Tnze/go-mc/bot"
"github.com/Tnze/go-mc/bot/basic"
@ -27,8 +30,6 @@ func attachPlayerMsg(c *bot.Client, p *basic.Player, handler func(msg chat.Messa
bot.PacketHandler{
Priority: 64, ID: packetid.ClientboundPlayerChatHeader,
F: func(packet pk.Packet) error {
fmt.Println(packetid.ClientboundPacketID(packet.ID))
fmt.Println(hex.Dump(packet.Data))
return nil
},
},
@ -37,8 +38,6 @@ func attachPlayerMsg(c *bot.Client, p *basic.Player, handler func(msg chat.Messa
F: func(packet pk.Packet) error {
var message sign.PlayerMessage
var chatType chat.Type
fmt.Println(packetid.ClientboundPacketID(packet.ID))
fmt.Println(hex.Dump(packet.Data))
if err := packet.Scan(&message, &chatType); err != nil {
return err
}
@ -63,3 +62,30 @@ func attachPlayerMsg(c *bot.Client, p *basic.Player, handler func(msg chat.Messa
},
})
}
// SendMessage send chat message to server.
// Currently only support offline-mode or "Not Secure" chat
func (m *Manager) SendMessage(msg string) error {
if len(msg) > 256 {
return errors.New("message length greater than 256")
}
var salt int64
if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil {
return err
}
err := m.c.Conn.WritePacket(pk.Marshal(
packetid.ServerboundChat,
pk.String(msg),
pk.Long(time.Now().UnixMilli()),
pk.Long(salt),
pk.ByteArray{},
pk.Boolean(false),
pk.Array([]sign.HistoryMessage{}),
pk.Option[sign.HistoryMessage, *sign.HistoryMessage]{
Has: false,
},
))
return err
}