87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
package mc
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"tg-mc/conf"
|
|
|
|
"github.com/Tnze/go-mc/bot"
|
|
"github.com/Tnze/go-mc/bot/basic"
|
|
"github.com/Tnze/go-mc/bot/msg"
|
|
"github.com/Tnze/go-mc/bot/playerlist"
|
|
"github.com/Tnze/go-mc/chat"
|
|
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
|
)
|
|
|
|
func Run() error {
|
|
conf.Client = bot.NewClient()
|
|
conf.Client.Auth.Name = conf.GetBotSettings().MCBotName
|
|
client := conf.Client
|
|
|
|
conf.Player = basic.NewPlayer(client, basic.DefaultSettings, basic.EventsListener{})
|
|
conf.PlayerList = playerlist.New(client)
|
|
conf.ChatHandler = msg.New(client, conf.Player, conf.PlayerList, msg.EventsHandler{
|
|
SystemChat: onSystemMsg,
|
|
PlayerChatMessage: onPlayerMsg,
|
|
DisguisedChat: onDisguisedMsg,
|
|
})
|
|
|
|
err := client.JoinServer(
|
|
conf.GetBotSettings().MCServer,
|
|
)
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Login success")
|
|
|
|
var perr bot.PacketHandlerError
|
|
for {
|
|
if err = client.HandleGame(); err == nil {
|
|
return errors.New("handle game error")
|
|
}
|
|
if errors.As(err, &perr) {
|
|
log.Print(perr)
|
|
} else {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
func SendMsg(msg string) error {
|
|
if err := conf.ChatHandler.SendMessage(msg); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func onSystemMsg(msg chat.Message, overlay bool) error {
|
|
log.Printf("System: %v", msg)
|
|
m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("%v", msg))
|
|
conf.Bot.Send(m)
|
|
return nil
|
|
}
|
|
|
|
func onPlayerMsg(msg chat.Message, validated bool) error {
|
|
log.Printf("Player: %s", msg)
|
|
s := strings.Split(msg.String(), " ")
|
|
if len(s) > 1 {
|
|
if s[0] != fmt.Sprintf("<%v>", conf.GetBotSettings().MCBotName) {
|
|
m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("%v", msg))
|
|
conf.Bot.Send(m)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func onDisguisedMsg(msg chat.Message) error {
|
|
log.Printf("Disguised: %v", msg)
|
|
m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("%v", msg))
|
|
conf.Bot.Send(m)
|
|
return nil
|
|
}
|
|
|