Files
mc-tgbot/services/mc/helper.go
T

119 lines
3.4 KiB
Go

package mc
import (
"crypto/rand"
"encoding/binary"
"errors"
"tg-mc/conf"
su "tg-mc/services/utils"
"tg-mc/utils"
"time"
"github.com/Tnze/go-mc/chat"
"github.com/Tnze/go-mc/data/packetid"
"github.com/Tnze/go-mc/net/packet"
)
func GetJoinedPlayer(m chat.Message) (userName string, err error) {
if m.Translate != "multiplayer.player.joined" && len(m.With) == 0 {
return "", errors.New(ErrNotJoined)
}
userName = m.With[0].Text
return
}
func GetLeftPlayer(m chat.Message) (userName string, err error) {
if m.Translate != "multiplayer.player.left" && len(m.With) == 0 {
return "", errors.New(ErrNotJoined)
}
userName = m.With[0].Text
return
}
func HandleJoinGame(userName string, mention bool, expireMode bool) {
// return
// u, err := models.GetUserByMCName(userName)
// if err != nil {
// logrus.Error("get user name error: ", err)
// }
// switch u.Status {
// case StatusNormal:
// if !GetAuthcator().IsAuthed(u, expireMode) {
// m := tgbotapi.NewMessage(u.TGID, fmt.Sprintf("MC用户:%v 尝试登录,请手动允许,每次授权持续30秒", userName))
// m.ReplyMarkup = tgbotapi.NewInlineKeyboardMarkup(
// tgbotapi.NewInlineKeyboardRow(
// tgbotapi.NewInlineKeyboardButtonData("批准", defs.NewApproveCommand(u.MCName).ToJSON()),
// tgbotapi.NewInlineKeyboardButtonData("拒绝", defs.NewRejectCommand(u.MCName).ToJSON())),
// )
// conf.Bot.Send(m)
// KickPlayer(userName)
// return
// }
if mention {
SendMsgToPlayer("欢迎回来!", userName)
}
// case StatusPending:
// SendMsgToPlayer("你还没有绑定 Telegram 哦, 5秒后你将会被踢出。请在群组中发送 /bind <你的 MC 用户名> 进行绑定。", userName)
// time.Sleep(5 * time.Second)
// KickPlayer(userName)
// m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 没有绑定,尝试登录已被T出", userName))
// conf.Bot.Send(m)
// case StatusBanned:
// SendMsgToPlayer("你已被封禁,如有疑问请联系管理员。", userName)
// m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 已被封禁,尝试登录已被T出", userName))
// conf.Bot.Send(m)
// default:
// SendMsgToPlayer("未知错误,请联系管理员,你将被踢出", userName)
// time.Sleep(3 * time.Second)
// KickPlayer(userName)
// m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 登录失败,错误未知,已被T出", userName))
// conf.Bot.Send(m)
// }
}
func SendCommand(cmd string) error {
var salt int64
if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil {
return err
}
err := conf.Client.Conn.WritePacket(packet.Marshal(
packetid.ServerboundChatCommand,
packet.String(cmd),
packet.Long(time.Now().UnixMilli()),
packet.Long(salt),
packet.VarInt(0), // signature
packet.VarInt(0),
packet.NewFixedBitSet(20),
))
return err
}
func KickPlayer(userName string) error {
err := SendCommand("kick " + userName)
return err
}
func CronKick() {
utils.CronStart(func() {
users := su.GetAlivePlayerList()
for _, u := range users {
HandleJoinGame(u, false, false)
}
})
}
func isBotMsg(msg chat.Message) bool {
return msg.Translate == "commands.message.display.outgoing"
}
func HandleLeftGame(userName string) {
// u, err := models.GetUserByMCName(userName)
// if err != nil {
// logrus.Error("get user name error: ", err)
// }
// GetAuthcator().Reject(u)
}