mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 05:30:07 +08:00
45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package manager
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/wdvxdr1123/ZeroBot/utils/helper"
|
|
|
|
"github.com/FloatTech/floatbox/math"
|
|
"github.com/FloatTech/floatbox/web"
|
|
)
|
|
|
|
// user hash file
|
|
const gistraw = "https://gist.githubusercontent.com/%s/%s/raw/%s"
|
|
|
|
func checkNewUser(qq, gid int64, ghun, hash string) (bool, string) {
|
|
if db.CanFind("member", "WHERE ghun = ?", ghun) {
|
|
return false, "该github用户已入群"
|
|
}
|
|
gidsum := md5.Sum(helper.StringToBytes(strconv.FormatInt(gid, 10)))
|
|
gidhex := hex.EncodeToString(gidsum[:])
|
|
u := fmt.Sprintf(gistraw, ghun, hash, gidhex)
|
|
logrus.Debugln("[gist]visit url:", u)
|
|
data, err := web.GetData(u)
|
|
if err == nil {
|
|
logrus.Debugln("[gist]get data:", helper.BytesToString(data))
|
|
st, err := strconv.ParseInt(helper.BytesToString(data), 10, 64)
|
|
if err == nil {
|
|
// 600s 内验证成功
|
|
ok := math.Abs(int(time.Now().Unix()-st)) < 600
|
|
if ok {
|
|
_ = db.Insert("member", &member{QQ: qq, Ghun: ghun})
|
|
return true, ""
|
|
}
|
|
return false, "时间戳超时"
|
|
}
|
|
return false, "时间戳格式错误: " + helper.BytesToString(data)
|
|
}
|
|
return false, "无法连接到gist: " + err.Error()
|
|
}
|