feat: support ban and kick
This commit is contained in:
parent
5528766c13
commit
b023de86ee
@ -14,5 +14,5 @@ func Run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
tgbot.Run(mc.SendMsg)
|
tgbot.Run(mc.SendMsg, mc.SendCommand)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
30
services/tgbot/kick.go
Normal 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)))
|
||||||
|
}
|
@ -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"})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user