206 lines
5.8 KiB
Go
206 lines
5.8 KiB
Go
package tgbot
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"net/http"
|
||
"net/url"
|
||
"strconv"
|
||
"tg-mc/conf"
|
||
"tg-mc/models"
|
||
"tg-mc/services/utils"
|
||
commonUtils "tg-mc/utils"
|
||
|
||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||
"github.com/samber/lo"
|
||
"github.com/sirupsen/logrus"
|
||
)
|
||
|
||
func Run(sendFunc func(string)) {
|
||
var err error
|
||
|
||
api := conf.GetBotSettings().BotAPI
|
||
if len(api) == 0 {
|
||
api = tgbotapi.APIEndpoint
|
||
}
|
||
|
||
HttpProxy := conf.GetBotSettings().HTTPProxy
|
||
proxyUrl, err := url.Parse(HttpProxy)
|
||
if err != nil {
|
||
log.Panic(err, "HTTP_PROXY environment variable is not set correctly")
|
||
}
|
||
|
||
if len(HttpProxy) != 0 {
|
||
client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}}
|
||
conf.Bot, err = tgbotapi.NewBotAPIWithClient(
|
||
conf.GetBotSettings().BotToken,
|
||
api,
|
||
client)
|
||
} else {
|
||
conf.Bot, err = tgbotapi.NewBotAPIWithAPIEndpoint(conf.GetBotSettings().BotToken, api)
|
||
}
|
||
|
||
if err != nil {
|
||
log.Panic(err)
|
||
}
|
||
|
||
conf.Bot.Debug = false
|
||
|
||
log.Printf("Authorized on account %s", conf.Bot.Self.UserName)
|
||
|
||
u := tgbotapi.NewUpdate(0)
|
||
u.Timeout = 60
|
||
updates := conf.Bot.GetUpdatesChan(u)
|
||
|
||
for update := range updates {
|
||
if update.Message != nil {
|
||
go func(m *tgbotapi.Message) {
|
||
logrus.Infof("[%s] %s", m.From.UserName, m.Text)
|
||
if m.Command() == "talk" {
|
||
logrus.Infof("id is %d", m.Chat.ID)
|
||
m := fmt.Sprintf("%v: %v", m.From.UserName, m.CommandArguments())
|
||
sendFunc(m)
|
||
if err != nil {
|
||
logrus.WithError(err).Error("send message error")
|
||
}
|
||
return
|
||
}
|
||
if m.Command() == "list" {
|
||
logrus.Infof("id is %d", m.Chat.ID)
|
||
m := tgbotapi.NewMessage(m.Chat.ID, utils.GetAlivePlayer())
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
if m.Command() == "bind" {
|
||
logrus.Infof("id is %d", m.Chat.ID)
|
||
err := models.CreateUser(&models.User{
|
||
TGID: m.From.ID,
|
||
MCName: m.CommandArguments(),
|
||
Status: 1,
|
||
})
|
||
if err != nil {
|
||
m := tgbotapi.NewMessage(m.Chat.ID, "绑定失败, err: "+err.Error())
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
m := tgbotapi.NewMessage(m.Chat.ID,
|
||
fmt.Sprintf("绑定成功,你的MCID是%v", m.CommandArguments()))
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
if m.Command() == "unbind" {
|
||
logrus.Infof("id is %d", m.Chat.ID)
|
||
u, err := models.GetUserByTGID(m.From.ID)
|
||
if err != nil {
|
||
m := tgbotapi.NewMessage(m.Chat.ID, "你还没有绑定")
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
err = u.Delete(m.From.ID)
|
||
if err != nil {
|
||
m := tgbotapi.NewMessage(m.Chat.ID, "解绑失败")
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
m := tgbotapi.NewMessage(m.Chat.ID, "解绑成功")
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
if m.Command() == "get" {
|
||
if !utils.IsAdmin(m) &&
|
||
len(m.CommandArguments()) != 0 {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, "您不是管理员,没有该权限")
|
||
conf.Bot.Send(tm)
|
||
return
|
||
} else if utils.IsAdmin(m) &&
|
||
len(m.CommandArguments()) != 0 {
|
||
a := commonUtils.GetArgs(m.CommandArguments())
|
||
if len(a) != 2 {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, "参数错误,样例:\n```\n/get <tgid|username> <value>\n```")
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
if a[0] == "tgid" {
|
||
tgid, err := strconv.ParseInt(a[1], 10, 64)
|
||
if err != nil {
|
||
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "ID错误,应该为int64"))
|
||
return
|
||
}
|
||
u, err := models.GetUserByTGID(tgid)
|
||
if err != nil {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("查询出错,err:\n```\n%+v\n```", err))
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("用户信息:\n```\n%+v\n```", u))
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
}
|
||
if a[0] == "username" {
|
||
u, err := models.GetUserByMCName(a[1])
|
||
if err != nil {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("查询出错,err:\n```\n%+v\n```", err))
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("用户信息:\n```\n%+v\n```", u))
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
}
|
||
return
|
||
}
|
||
logrus.Infof("id is %d", m.Chat.ID)
|
||
u, err := models.GetUserByTGID(m.From.ID)
|
||
if err != nil {
|
||
m := tgbotapi.NewMessage(m.Chat.ID, "你还没有绑定")
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
m := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("你的MCID是%v", u.MCName))
|
||
conf.Bot.Send(m)
|
||
return
|
||
}
|
||
if m.Command() == "set" {
|
||
if !utils.IsAdmin(m) {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, "您不是管理员,没有该权限")
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
a := commonUtils.GetArgs(m.CommandArguments())
|
||
if len(a) != 3 {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, "参数错误,样例:\n```\n/set username tgid status\n```")
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
tgid, err := strconv.ParseInt(a[1], 10, 64)
|
||
if err != nil {
|
||
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "ID错误,应该为int64"))
|
||
return
|
||
}
|
||
status, err := strconv.ParseInt(a[2], 10, 64)
|
||
if err != nil || !lo.Contains([]int64{0, 1, 2}, status) {
|
||
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "Status错误,应该为0(Pending),1(Normal),2(Banned)"))
|
||
return
|
||
}
|
||
if err := models.CreateUser(&models.User{
|
||
TGID: tgid,
|
||
MCName: a[0],
|
||
Status: int(status),
|
||
}); err != nil {
|
||
tm := tgbotapi.NewMessage(m.Chat.ID, fmt.Sprintf("创建用户错误,err:\n```\n%+v\n```", err))
|
||
tm.ParseMode = "Markdown"
|
||
conf.Bot.Send(tm)
|
||
return
|
||
}
|
||
conf.Bot.Send(tgbotapi.NewMessage(m.Chat.ID, "设置用户成功"))
|
||
return
|
||
}
|
||
}(update.Message)
|
||
}
|
||
}
|
||
}
|