support offline-mode chat message sending
This commit is contained in:
@ -1,8 +1,11 @@
|
|||||||
package msg
|
package msg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"crypto/rand"
|
||||||
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Tnze/go-mc/bot"
|
"github.com/Tnze/go-mc/bot"
|
||||||
"github.com/Tnze/go-mc/bot/basic"
|
"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{
|
bot.PacketHandler{
|
||||||
Priority: 64, ID: packetid.ClientboundPlayerChatHeader,
|
Priority: 64, ID: packetid.ClientboundPlayerChatHeader,
|
||||||
F: func(packet pk.Packet) error {
|
F: func(packet pk.Packet) error {
|
||||||
fmt.Println(packetid.ClientboundPacketID(packet.ID))
|
|
||||||
fmt.Println(hex.Dump(packet.Data))
|
|
||||||
return nil
|
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 {
|
F: func(packet pk.Packet) error {
|
||||||
var message sign.PlayerMessage
|
var message sign.PlayerMessage
|
||||||
var chatType chat.Type
|
var chatType chat.Type
|
||||||
fmt.Println(packetid.ClientboundPacketID(packet.ID))
|
|
||||||
fmt.Println(hex.Dump(packet.Data))
|
|
||||||
if err := packet.Scan(&message, &chatType); err != nil {
|
if err := packet.Scan(&message, &chatType); err != nil {
|
||||||
return err
|
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
|
||||||
|
}
|
||||||
|
@ -107,6 +107,9 @@ func onDeath() error {
|
|||||||
|
|
||||||
func onGameStart() error {
|
func onGameStart() error {
|
||||||
log.Println("Game start")
|
log.Println("Game start")
|
||||||
|
if err := chatHandler.SendMessage("Hello, world"); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil // if err isn't nil, HandleGame() will return it.
|
return nil // if err isn't nil, HandleGame() will return it.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user