E5BotForSQLite/main.go

135 lines
3.1 KiB
Go
Raw Normal View History

2020-03-26 12:53:00 +08:00
package main
import (
2020-03-27 09:03:41 +08:00
"database/sql"
2020-03-26 12:53:00 +08:00
"fmt"
2020-03-28 15:22:23 +08:00
"github.com/robfig/cron/v3"
2020-03-26 12:53:00 +08:00
"github.com/spf13/viper"
2020-03-27 09:03:41 +08:00
"golang.org/x/net/proxy"
2020-03-26 12:53:00 +08:00
tb "gopkg.in/tucnak/telebot.v2"
2020-04-03 13:19:53 +08:00
"log"
2020-03-27 09:03:41 +08:00
"net/http"
2020-03-29 12:51:39 +08:00
"strconv"
2020-04-03 13:19:53 +08:00
"strings"
2020-03-26 12:53:00 +08:00
"time"
)
var (
BotToken string
2020-03-27 09:03:41 +08:00
Socks5 string
2020-03-27 23:03:46 +08:00
bot *tb.Bot
db *sql.DB
2020-04-03 13:19:53 +08:00
logger *log.Logger
2020-03-26 12:53:00 +08:00
)
2020-03-27 09:03:41 +08:00
const (
2020-03-29 12:07:15 +08:00
dbDriverName = "mysql"
2020-03-29 12:51:39 +08:00
logo = `
2020-03-29 16:42:46 +08:00
______ _____ _____ _ ____ _
| ____| ____/ ____| | | | _ \ | |
| |__ | |__| (___ _ _| |__ | |_) | ___ | |_
| __| |___ \\___ \| | | | '_ \| _ < / _ \| __|
| |____ ___) |___) | |_| | |_) | |_) | (_) | |_
|______|____/_____/ \__,_|_.__/|____/ \___/ \__|
2020-03-29 12:51:39 +08:00
`
2020-03-27 09:03:41 +08:00
)
2020-04-03 13:19:53 +08:00
func main() {
BotStart()
}
func BotStart() {
MakeHandle()
TaskLaunch()
logger.Println("Bot Start")
fmt.Println("------------")
bot.Start()
}
func MakeHandle() {
logger.Println("Make Handle……")
2020-04-07 10:56:45 +08:00
//所有用户
2020-04-03 13:19:53 +08:00
bot.Handle("/start", bStart)
bot.Handle("/my", bMy)
bot.Handle("/bind", bBind1)
bot.Handle("/unbind", bUnBind)
bot.Handle("/export", bExport)
2020-04-03 13:19:53 +08:00
bot.Handle("/help", bHelp)
bot.Handle(tb.OnText, bOnText)
2020-04-07 10:56:45 +08:00
//管理员
bot.Handle("/task", bTask)
bot.Handle("/log", bLog)
2020-04-03 13:19:53 +08:00
}
func TaskLaunch() {
task := cron.New()
//每三小时执行一次
task.AddFunc(viper.GetString("cron"), SignTask)
//log分为每天
task.AddFunc(" 0 0 * * *", InitLogger)
// */1 * * * * 1 */3 * * *
logger.Println("Cron Task Start……")
task.Start()
}
2020-03-27 09:03:41 +08:00
func init() {
fmt.Println(logo)
2020-04-03 13:19:53 +08:00
InitLogger()
2020-03-27 23:03:46 +08:00
//read config
2020-04-03 13:19:53 +08:00
logger.Println("Read Config……")
2020-03-26 12:53:00 +08:00
viper.SetConfigName("config")
viper.AddConfigPath(".")
err := viper.ReadInConfig()
2020-04-03 13:19:53 +08:00
if err != nil {
logger.Fatal(err)
}
host := viper.GetString("mysql.host")
user := viper.GetString("mysql.user")
port := viper.GetString("mysql.port")
pwd := viper.GetString("mysql.password")
database := viper.GetString("mysql.database")
path := strings.Join([]string{user, ":", pwd, "@tcp(", host, ":", port, ")/", database, "?charset=utf8"}, "")
//fmt.Println(path)
db, err = sql.Open(dbDriverName, path)
if err != nil {
logger.Fatal(err)
}
logger.Println("Connect MySQL Success!")
if ok, err := CreateTB(db); !ok {
logger.Fatal(err)
}
2020-03-26 12:53:00 +08:00
BotToken = viper.GetString("bot_token")
2020-03-27 09:03:41 +08:00
Socks5 = viper.GetString("socks5")
2020-03-27 23:03:46 +08:00
//set bot
2020-04-03 13:19:53 +08:00
logger.Println("Bot Settings……")
2020-03-29 17:31:35 +08:00
Poller := &tb.LongPoller{Timeout: 15 * time.Second}
spamProtected := tb.NewMiddlewarePoller(Poller, func(upd *tb.Update) bool {
if upd.Message == nil {
return true
}
if !upd.Message.Private() {
return false
}
return true
})
2020-03-27 09:03:41 +08:00
botsettings := tb.Settings{
2020-03-26 12:53:00 +08:00
Token: BotToken,
2020-03-29 17:31:35 +08:00
Poller: spamProtected,
2020-03-26 12:53:00 +08:00
}
2020-03-27 23:03:46 +08:00
//set socks5
2020-03-27 09:03:41 +08:00
if Socks5 != "" {
2020-04-03 13:19:53 +08:00
logger.Println("Proxy:" + Socks5)
2020-03-27 09:03:41 +08:00
dialer, err := proxy.SOCKS5("tcp", Socks5, nil, proxy.Direct)
2020-04-03 13:19:53 +08:00
if err != nil {
logger.Println(err)
}
2020-03-27 09:03:41 +08:00
httpTransport := &http.Transport{}
httpClient := &http.Client{Transport: httpTransport}
httpTransport.Dial = dialer.Dial
botsettings.Client = httpClient
}
2020-03-27 23:03:46 +08:00
//create bot
bot, err = tb.NewBot(botsettings)
2020-03-29 12:51:39 +08:00
if err != nil {
2020-04-03 13:19:53 +08:00
logger.Fatal(err)
2020-03-29 12:51:39 +08:00
}
2020-04-03 13:19:53 +08:00
logger.Println("Bot: " + strconv.Itoa(bot.Me.ID) + " " + bot.Me.Username)
2020-03-28 15:22:23 +08:00
}