mirror of
https://github.com/ultrasn0w/huso.git
synced 2025-12-13 10:29:52 +01:00
Erster Discord Versuch
This commit is contained in:
3
go.mod
3
go.mod
@@ -4,6 +4,7 @@ go 1.18
|
||||
|
||||
require (
|
||||
github.com/allegro/bigcache/v3 v3.0.2
|
||||
github.com/bwmarrin/discordgo v0.25.0
|
||||
github.com/fasthttp/router v1.4.10
|
||||
github.com/go-sql-driver/mysql v1.6.0
|
||||
github.com/gookit/color v1.5.1
|
||||
@@ -16,6 +17,7 @@ require (
|
||||
require (
|
||||
github.com/andybalholm/brotli v1.0.4 // indirect
|
||||
github.com/bwmarrin/snowflake v0.3.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/klauspost/compress v1.15.8 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d // indirect
|
||||
@@ -23,5 +25,6 @@ require (
|
||||
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
|
||||
github.com/xujiajun/mmap-go v1.0.1 // indirect
|
||||
github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b // indirect
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||
)
|
||||
|
||||
12
go.sum
12
go.sum
@@ -4,6 +4,8 @@ github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu
|
||||
github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
|
||||
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/bwmarrin/discordgo v0.25.0 h1:NXhdfHRNxtwso6FPdzW2i3uBvvU7UIQTghmV2T4nqAs=
|
||||
github.com/bwmarrin/discordgo v0.25.0/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
||||
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
||||
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
||||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
@@ -17,11 +19,12 @@ github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ=
|
||||
github.com/gookit/color v1.5.1/go.mod h1:wZFzea4X8qN6vHOSP2apMb4/+w/orMznEzYsIHPaqKM=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
|
||||
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.15.7 h1:7cgTQxJCU/vy+oP/E3B9RGbQTgbiVzIJWIKOLoAsPok=
|
||||
github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
|
||||
github.com/klauspost/compress v1.15.8 h1:JahtItbkWjf2jzm/T+qgMxkP9EMHsqEUA6vCMGmXvhA=
|
||||
github.com/klauspost/compress v1.15.8/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@@ -52,8 +55,11 @@ github.com/xujiajun/nutsdb v0.9.0 h1:vy8rjDp0Sk/SnTAqg61i+G4NIN/3tBKSdZ6rIyKYVIo
|
||||
github.com/xujiajun/nutsdb v0.9.0/go.mod h1:8ZdTTF0cEQO+wN940htfHYKswFql2iB6Osckx+GmOoU=
|
||||
github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b h1:jKG9OiL4T4xQN3IUrhUpc1tG+HfDXppkgVcrAiiaI/0=
|
||||
github.com/xujiajun/utils v0.0.0-20190123093513-8bf096c4f53b/go.mod h1:AZd87GYJlUzl82Yab2kTjx1EyXSQCAfZDhpTo1SQC4k=
|
||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
@@ -67,8 +73,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e h1:CsOuNlbOuf0mzxJIefr6Q4uAUetRUwZE4qt7VfzP+xo=
|
||||
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
|
||||
25
huso.go
25
huso.go
@@ -12,6 +12,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/allegro/bigcache/v3"
|
||||
"github.com/bwmarrin/discordgo"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/gookit/color"
|
||||
"github.com/xujiajun/nutsdb"
|
||||
@@ -48,6 +49,7 @@ var (
|
||||
localServer = flag.Bool("localServer", false, "Set varius headers for running locally")
|
||||
mmDbServer = flag.String("mmDbServer", "hanami.family:3306", "MovieManager db server")
|
||||
mmDbUser = flag.String("mmDbUser", "yui", "MovieManager db user")
|
||||
discordToken = flag.String("discordToken", "OTk4MTk3MTMzNjE2MzUzMzUw.GKPdLt.zaMvvlikffjBxJO-Qx69A5nQNQxtA-FmkH2yTA", "Discord bot auth token")
|
||||
animeCache *bigcache.BigCache
|
||||
seasoncache *bigcache.BigCache
|
||||
userCache *bigcache.BigCache
|
||||
@@ -56,6 +58,7 @@ var (
|
||||
mmCache *bigcache.BigCache
|
||||
db *nutsdb.DB
|
||||
mmDb *sql.DB
|
||||
discc *discordgo.Session
|
||||
jikanLimiter *rate.Limiter
|
||||
logOut *RingBuf
|
||||
buildTime string
|
||||
@@ -124,12 +127,8 @@ func main() {
|
||||
color.Errorln(err.Error())
|
||||
} else {
|
||||
mmDb, err = sql.Open("mysql", conns)
|
||||
if err != nil || mmDb == nil {
|
||||
if err != nil {
|
||||
color.Errorln(err.Error())
|
||||
} else {
|
||||
color.Errorln("No MovieManager DB connection")
|
||||
}
|
||||
if err != nil {
|
||||
color.Errorln(err.Error())
|
||||
} else {
|
||||
mmDb.SetConnMaxLifetime(time.Minute * 3)
|
||||
mmDb.SetMaxOpenConns(10)
|
||||
@@ -146,6 +145,20 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
discc, err = discordgo.New("Bot " + *discordToken)
|
||||
if err != nil {
|
||||
color.Errorln(err.Error())
|
||||
} else {
|
||||
err = discc.Open()
|
||||
if err != nil {
|
||||
color.Errorln(err.Error())
|
||||
} else {
|
||||
defer discc.Close()
|
||||
color.Infoln("Discord huso online")
|
||||
logOut.WriteLine("📯 Discord huso online")
|
||||
}
|
||||
}
|
||||
|
||||
Arbeit()
|
||||
LangeArbeit()
|
||||
|
||||
|
||||
27
labersack.go
Normal file
27
labersack.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/gookit/color"
|
||||
)
|
||||
|
||||
func SendAppointBroadcast(creator string, app *Appointment) {
|
||||
if app != nil && discc != nil {
|
||||
var msgStart strings.Builder
|
||||
for _, u := range app.Users {
|
||||
uData, err := ReadUser(u)
|
||||
if err != nil || uData.DiscordID == 0 {
|
||||
continue
|
||||
}
|
||||
msgStart.WriteString(fmt.Sprintf("<@%d> ", uData.DiscordID))
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("📺 %s%s created appointment for %d at <t:%d:F>", msgStart.String(), creator, app.Anime, app.Time.Unix())
|
||||
_, err := discc.ChannelMessageSend("998277590609559632", msg)
|
||||
if err != nil {
|
||||
color.Errorln(err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
6
nuss.go
6
nuss.go
@@ -79,14 +79,16 @@ func AddUserToAnime(username string, userId, animeId int64, progress int, update
|
||||
return &anime, err
|
||||
}
|
||||
|
||||
func AddUserToAppointment(username string, animeId int64, meeting time.Time) (*Appointment, error) {
|
||||
func AddUserToAppointment(username string, animeId int64, meeting time.Time) (*Appointment, bool, error) {
|
||||
var appoint Appointment
|
||||
fresh := false
|
||||
err := db.Update(
|
||||
func(tx *nutsdb.Tx) error {
|
||||
keyBytes := Int64AndDateToBytes(animeId, meeting)
|
||||
e, err := tx.Get(bucketAppoint, keyBytes)
|
||||
var users []string
|
||||
if err != nil {
|
||||
fresh = true
|
||||
users = make([]string, 0)
|
||||
} else {
|
||||
// parse user list
|
||||
@@ -121,7 +123,7 @@ func AddUserToAppointment(username string, animeId int64, meeting time.Time) (*A
|
||||
}
|
||||
return tx.Put(bucketAppoint, keyBytes, newData, nutsdb.Persistent)
|
||||
})
|
||||
return &appoint, err
|
||||
return &appoint, fresh, err
|
||||
}
|
||||
|
||||
func DeleteUserFromAnime(username string, userId, animeId int64) (*AnimeUser, error) {
|
||||
|
||||
26
ober.go
26
ober.go
@@ -435,6 +435,15 @@ func Register(ctx *fasthttp.RequestCtx) {
|
||||
ctx.SetStatusCode(fasthttp.StatusExpectationFailed)
|
||||
return
|
||||
}
|
||||
// check user discord id
|
||||
if register.DiscordID != 0 && discc != nil {
|
||||
_, err = discc.User(fmt.Sprint(register.DiscordID != 0))
|
||||
if err != nil {
|
||||
ctx.WriteString("Discord user id is kaputt")
|
||||
ctx.SetStatusCode(fasthttp.StatusExpectationFailed)
|
||||
return
|
||||
}
|
||||
}
|
||||
// REGISTER
|
||||
user := UserData{
|
||||
Username: register.Username,
|
||||
@@ -499,6 +508,16 @@ func RegisterUpdate(ctx *fasthttp.RequestCtx) {
|
||||
if regUpdate.Secret != "" {
|
||||
user.Secret = regUpdate.Secret
|
||||
}
|
||||
|
||||
// check user discord id
|
||||
if regUpdate.DiscordID != 0 && discc != nil {
|
||||
_, err = discc.User(fmt.Sprint(regUpdate.DiscordID))
|
||||
if err != nil {
|
||||
ctx.WriteString("Discord user id is kaputt")
|
||||
ctx.SetStatusCode(fasthttp.StatusExpectationFailed)
|
||||
return
|
||||
}
|
||||
}
|
||||
user.DiscordID = regUpdate.DiscordID
|
||||
|
||||
err = SaveUser(user)
|
||||
@@ -795,6 +814,7 @@ func processUpdateAppointmentReq(ctx *fasthttp.RequestCtx, update bool) {
|
||||
for i, appointment := range appoints {
|
||||
var appData *Appointment
|
||||
var found bool
|
||||
fresh := false
|
||||
|
||||
if update {
|
||||
// kann sich (noch) nicht in der Vergagenheit verabreden
|
||||
@@ -816,7 +836,7 @@ func processUpdateAppointmentReq(ctx *fasthttp.RequestCtx, update bool) {
|
||||
}
|
||||
|
||||
// save appointment and get list
|
||||
appData, err = AddUserToAppointment(username, appointment.Anime, appointment.Time)
|
||||
appData, fresh, err = AddUserToAppointment(username, appointment.Anime, appointment.Time)
|
||||
} else {
|
||||
found, err = CheckAnimeExistInDb(appointment.Anime)
|
||||
if err != nil {
|
||||
@@ -836,6 +856,10 @@ func processUpdateAppointmentReq(ctx *fasthttp.RequestCtx, update bool) {
|
||||
return
|
||||
}
|
||||
appoints[i].Users = appData.Users
|
||||
|
||||
if update && fresh {
|
||||
SendAppointBroadcast(username, appData)
|
||||
}
|
||||
}
|
||||
|
||||
data, err := json.Marshal(appoints)
|
||||
|
||||
9
zecke.go
9
zecke.go
@@ -5,6 +5,7 @@ import (
|
||||
_ "embed"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
@@ -30,6 +31,10 @@ func MmReadOracle() ([]MmOracle, error) {
|
||||
}
|
||||
}
|
||||
|
||||
if mmDb == nil {
|
||||
return oracles, errors.New("no DB connection")
|
||||
}
|
||||
|
||||
oracleQuery := `SELECT m.id, m.title, m.mal_id, COALESCE(SUM(pv.score), 0) AS avgScore FROM movie m
|
||||
JOIN vote pv ON (m.id = pv.movie_id)
|
||||
JOIN promise pp ON (pp.user_id = pv.user_id)
|
||||
@@ -87,6 +92,10 @@ func MmReadOracle() ([]MmOracle, error) {
|
||||
}
|
||||
|
||||
func MmReadCharts() ([]MmOracle, error) {
|
||||
if mmDb == nil {
|
||||
return nil, errors.New("no DB connection")
|
||||
}
|
||||
|
||||
chartsQuery := `SELECT m.id, m.title, m.mal_id FROM movie m
|
||||
JOIN evening_movie em ON em.movie_id = m.id
|
||||
JOIN evening e ON em.evening_id = e.id
|
||||
|
||||
Reference in New Issue
Block a user