feat: support ban and kick

This commit is contained in:
Vaala Cat 2023-08-28 17:22:04 +08:00
parent 5528766c13
commit b023de86ee
7 changed files with 67 additions and 14 deletions

View File

@ -14,5 +14,5 @@ func Run() {
} }
} }
}() }()
tgbot.Run(mc.SendMsg) tgbot.Run(mc.SendMsg, mc.SendCommand)
} }

View File

@ -28,9 +28,9 @@ func GetAuthcator() Auth {
} }
func (a *Authcator) IsAuthed(u models.User, expireMode bool) bool { func (a *Authcator) IsAuthed(u models.User, expireMode bool) bool {
if u.MCName != "VaalaCat" { // if u.MCName != "VaalaCat" {
return true // return true
} // }
if approveTime, ok := a.UserMap.Load(u.MCName); ok { if approveTime, ok := a.UserMap.Load(u.MCName); ok {
if !expireMode { if !expireMode {
return true return true

View File

@ -52,7 +52,7 @@ func HandleJoinGame(userName string, mention bool, expireMode bool) {
tgbotapi.NewInlineKeyboardButtonData("拒绝", defs.NewRejectCommand(u.MCName).ToJSON())), tgbotapi.NewInlineKeyboardButtonData("拒绝", defs.NewRejectCommand(u.MCName).ToJSON())),
) )
conf.Bot.Send(m) conf.Bot.Send(m)
kickPlayer(userName) KickPlayer(userName)
return return
} }
if mention { if mention {
@ -61,7 +61,7 @@ func HandleJoinGame(userName string, mention bool, expireMode bool) {
case StatusPending: case StatusPending:
SendMsgToPlayer("你还没有绑定 Telegram 哦, 5秒后你将会被踢出。请在群组中发送 /bind <你的 MC 用户名> 进行绑定。", userName) SendMsgToPlayer("你还没有绑定 Telegram 哦, 5秒后你将会被踢出。请在群组中发送 /bind <你的 MC 用户名> 进行绑定。", userName)
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
kickPlayer(userName) KickPlayer(userName)
m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 没有绑定尝试登录已被T出", userName)) m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 没有绑定尝试登录已被T出", userName))
conf.Bot.Send(m) conf.Bot.Send(m)
case StatusBanned: case StatusBanned:
@ -71,13 +71,13 @@ func HandleJoinGame(userName string, mention bool, expireMode bool) {
default: default:
SendMsgToPlayer("未知错误,请联系管理员,你将被踢出", userName) SendMsgToPlayer("未知错误,请联系管理员,你将被踢出", userName)
time.Sleep(3 * time.Second) time.Sleep(3 * time.Second)
kickPlayer(userName) KickPlayer(userName)
m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 登录失败错误未知已被T出", userName)) m := tgbotapi.NewMessage(conf.GetBotSettings().GroupID, fmt.Sprintf("用户:%v 登录失败错误未知已被T出", userName))
conf.Bot.Send(m) conf.Bot.Send(m)
} }
} }
func sendCommand(cmd string) error { func SendCommand(cmd string) error {
var salt int64 var salt int64
if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil { if err := binary.Read(rand.Reader, binary.BigEndian, &salt); err != nil {
return err return err
@ -95,8 +95,8 @@ func sendCommand(cmd string) error {
return err return err
} }
func kickPlayer(userName string) error { func KickPlayer(userName string) error {
err := sendCommand("kick " + userName) err := SendCommand("kick " + userName)
return err return err
} }

View File

@ -63,7 +63,7 @@ func SendMsg(msg string) {
func SendMsgToPlayer(msg string, playerName string) { func SendMsgToPlayer(msg string, playerName string) {
go func() { go func() {
err := sendCommand(fmt.Sprintf("tell %s %s", playerName, msg)) err := SendCommand(fmt.Sprintf("tell %s %s", playerName, msg))
if err != nil { if err != nil {
logrus.Error("send msg to player error: ", err) logrus.Error("send msg to player error: ", err)
} }

View File

@ -18,6 +18,8 @@ var funcHandlers = map[string]func(*tgbotapi.Message, interface{}){
"unbind": UnbindHandler, "unbind": UnbindHandler,
"get": GetHandler, "get": GetHandler,
"set": SetHandler, "set": SetHandler,
"kick": KickHandler,
"ban": BanHandler,
} }
var callBackHandlers = map[string]func(tgbotapi.Update, defs.Command){ var callBackHandlers = map[string]func(tgbotapi.Update, defs.Command){
@ -56,7 +58,7 @@ func init() {
log.Printf("Authorized on account %s", conf.Bot.Self.UserName) log.Printf("Authorized on account %s", conf.Bot.Self.UserName)
} }
func Run(sendFunc func(string)) { func Run(sendFunc func(string), cmdFunc func(string) error) {
u := tgbotapi.NewUpdate(0) u := tgbotapi.NewUpdate(0)
u.Timeout = 60 u.Timeout = 60
updates := conf.Bot.GetUpdatesChan(u) updates := conf.Bot.GetUpdatesChan(u)

30
services/tgbot/kick.go Normal file
View File

@ -0,0 +1,30 @@
package tgbot
import (
"fmt"
"tg-mc/conf"
"tg-mc/models"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
func KickHandler(m *tgbotapi.Message, i interface{}) {
f, ok := i.(func(string) error)
if !ok {
return
}
u, err := models.GetUserByTGID(m.From.ID)
if err != nil {
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "您还没有绑定账号,请先绑定"))
return
}
err = f(fmt.Sprintf("kick %s", u.MCName))
if err != nil {
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, err.Error()))
return
}
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("已踢出用户 %s", u.MCName)))
}

View File

@ -2,23 +2,31 @@ package tgbot
import ( import (
"fmt" "fmt"
"math/rand"
"strconv" "strconv"
"tg-mc/conf" "tg-mc/conf"
"tg-mc/models" "tg-mc/models"
"tg-mc/services/utils" "tg-mc/services/utils"
commonUtils "tg-mc/utils" commonUtils "tg-mc/utils"
"time"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/samber/lo" "github.com/samber/lo"
) )
func SetHandler(m *tgbotapi.Message, i interface{}) { func SetHandler(m *tgbotapi.Message, i interface{}) {
var a []string
if t, ok := i.([]string); ok {
a = t
} else {
a = commonUtils.GetArgs(m.CommandArguments())
}
if !utils.IsAdmin(m) { if !utils.IsAdmin(m) {
tm := tgbotapi.NewMessage(m.Chat.ID, "您不是管理员,没有该权限") tm := tgbotapi.NewMessage(m.Chat.ID, "您不是管理员,没有该权限")
conf.Bot.Send(tm) conf.Bot.Send(tm)
return return
} }
a := commonUtils.GetArgs(m.CommandArguments())
if len(a) != 3 { if len(a) != 3 {
tm := tgbotapi.NewMessage(m.Chat.ID, "参数错误,样例:\n```\n/set username tgid status\n```") tm := tgbotapi.NewMessage(m.Chat.ID, "参数错误,样例:\n```\n/set username tgid status\n```")
tm.ParseMode = "Markdown" tm.ParseMode = "Markdown"
@ -46,5 +54,18 @@ func SetHandler(m *tgbotapi.Message, i interface{}) {
return return
} }
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "设置用户成功")) conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "设置用户成功"))
return }
func BanHandler(m *tgbotapi.Message, i interface{}) {
rand.Seed(time.Now().UnixNano())
randomNumber := rand.Intn(11)
for {
_, err := models.GetUserByTGID(int64(randomNumber))
if err != nil {
break
} else {
randomNumber = rand.Intn(11)
}
}
SetHandler(m, []string{m.CommandArguments(), fmt.Sprintf("-%d", randomNumber), "2"})
} }