first commit

This commit is contained in:
Vaala Cat
2023-05-17 14:36:40 +08:00
commit 854341b902
9 changed files with 280 additions and 0 deletions

18
services/handler.go Normal file
View File

@@ -0,0 +1,18 @@
package services
import (
"tg-mc/services/mc"
"tg-mc/services/tgbot"
"github.com/sirupsen/logrus"
)
func Run() {
go tgbot.Run(mc.SendMsg)
for {
if err := mc.Run(); err != nil {
tgbot.SendMsg("致命错误:" + err.Error())
logrus.Panic(err)
}
}
}

90
services/mc/mc.go Normal file
View File

@@ -0,0 +1,90 @@
package mc
import (
"errors"
"fmt"
"log"
"strings"
"tg-mc/conf"
"tg-mc/services/tgbot"
"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"
"github.com/sirupsen/logrus"
)
var (
client *bot.Client
player *basic.Player
chatHandler *msg.Manager
playerList *playerlist.PlayerList
)
func Run() error {
client = bot.NewClient()
client.Auth.Name = conf.GetBotSettings().MCBotName
player = basic.NewPlayer(client, basic.DefaultSettings, basic.EventsListener{})
playerList = playerlist.New(client)
chatHandler = msg.New(client, player, 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 := chatHandler.SendMessage(msg); err != nil {
return err
}
return nil
}
func onSystemMsg(msg chat.Message, overlay bool) error {
log.Printf("System: %v", msg)
tgbot.SendMsg(msg.String())
return nil
}
func onPlayerMsg(msg chat.Message, validated bool) error {
log.Printf("Player: %s", msg)
s := strings.Split(msg.String(), " ")
if len(s) > 1 {
logrus.Error(s[0])
if s[0] != fmt.Sprintf("<%v>", conf.GetBotSettings().MCBotName) {
tgbot.SendMsg(msg.String())
}
}
return nil
}
func onDisguisedMsg(msg chat.Message) error {
log.Printf("Disguised: %v", msg)
tgbot.SendMsg(msg.String())
return nil
}

59
services/tgbot/bot.go Normal file
View File

@@ -0,0 +1,59 @@
package tgbot
import (
"log"
"net/http"
"net/url"
"tg-mc/conf"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/sirupsen/logrus"
)
var (
bot *tgbotapi.BotAPI
)
func Run(sendFunc func(string) error) {
var err error
HttpProxy := conf.GetBotSettings().HTTPProxy
proxyUrl, err := url.Parse(HttpProxy)
if err != nil {
log.Panic(err, "HTTP_PROXY environment variable is not set correctly")
}
client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
bot, err = tgbotapi.NewBotAPIWithClient(
conf.GetBotSettings().BotToken,
tgbotapi.APIEndpoint,
client)
if err != nil {
log.Panic(err)
}
bot.Debug = true
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates {
if update.Message != nil {
logrus.Infof("[%s] %s", update.Message.From.UserName, update.Message.Text)
if update.Message.Command() == "talk" {
logrus.Infof("id is %d", update.Message.Chat.ID)
sendFunc(update.Message.CommandArguments())
}
}
}
}
func SendMsg(msg string) error {
msgT := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, msg)
_, err := bot.Send(msgT)
return err
}