added a few things to
ticker will now only update timetable not send all requests to avoid rate limiting Untis.go Main() will only be used in initial startup ticker cleanup in botstart since that isnt being used anymore
This commit is contained in:
parent
bf0b89e024
commit
fb503f6a9e
4 changed files with 46 additions and 23 deletions
|
|
@ -15,7 +15,6 @@ import (
|
|||
"path/filepath"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"untislogger/Untis"
|
||||
|
||||
|
|
@ -225,7 +224,6 @@ func checkAllUsersTimetables(s *discordgo.Session) {
|
|||
accounts := loadAllAccounts()
|
||||
for _, user := range accounts {
|
||||
decPwd, _ := decrypt(user.Password)
|
||||
// You can use decPwd to fetch the timetable for this user
|
||||
checkTimetableChangesForUser(user, decPwd, s)
|
||||
}
|
||||
}
|
||||
|
|
@ -253,14 +251,6 @@ func Start() {
|
|||
return
|
||||
}
|
||||
|
||||
// Schedule timetable checks every minute (or hour as needed)
|
||||
go func() {
|
||||
ticker := time.NewTicker(1 * time.Minute)
|
||||
for range ticker.C {
|
||||
checkAllUsersTimetables(dg)
|
||||
}
|
||||
}()
|
||||
|
||||
fmt.Println("Bot is now running. Press CTRL+C to exit.")
|
||||
// Wait for CTRL+C or other term signal to exit.
|
||||
sc := make(chan os.Signal, 1)
|
||||
|
|
|
|||
|
|
@ -32,8 +32,6 @@ type LoginResponse struct {
|
|||
|
||||
var Url = os.Getenv("URL")
|
||||
|
||||
// var Password = os.Getenv("UNTIS_PASSWORD")
|
||||
// var USERS = os.Getenv("UNTIS_USER")
|
||||
func Main(user, password, userID string) {
|
||||
godotenv.Load("../.env")
|
||||
cookies, err := Auth(user, password, userID)
|
||||
|
|
@ -48,6 +46,16 @@ func Main(user, password, userID string) {
|
|||
Teachers(cookies)
|
||||
}
|
||||
|
||||
func Update(user, password, userID string) {
|
||||
godotenv.Load("../.env")
|
||||
cookies, err := Auth(user, password, userID)
|
||||
if err != nil {
|
||||
log.Printf("Authentication failed for user %s: %v", user, err)
|
||||
return
|
||||
}
|
||||
Timetable(cookies, userID)
|
||||
}
|
||||
|
||||
func Auth(user, password, userID string) ([]*http.Cookie, error) {
|
||||
l := Login{"2023-05-06 15:44:22.215292", "authenticate", Params{user, password, "WebUntis Test"}, "2.0"}
|
||||
loginJSON, err := json.Marshal(l)
|
||||
|
|
|
|||
2
go.mod
2
go.mod
|
|
@ -1,6 +1,6 @@
|
|||
module untislogger
|
||||
|
||||
go 1.25.2
|
||||
go 1.27.0
|
||||
|
||||
require (
|
||||
github.com/bwmarrin/discordgo v0.29.0
|
||||
|
|
|
|||
45
main.go
45
main.go
|
|
@ -111,19 +111,13 @@ func init() {
|
|||
log.Fatalf("Failed to load timezone: %v", locErr)
|
||||
}
|
||||
log.Printf("Timezone set to: %s", location)
|
||||
}
|
||||
|
||||
func getTime() time.Time {
|
||||
return time.Now().In(location)
|
||||
initUpdate()
|
||||
}
|
||||
|
||||
func main() {
|
||||
godotenv.Load(".env")
|
||||
// Untis.Main() //starting API calls function| happens in schedule func
|
||||
// Run()
|
||||
// Starts logging the timetable for each new Lesson and logs changes
|
||||
go BotStart.Start()
|
||||
scheduleTimetableUpdate()
|
||||
go scheduleTimetableUpdate()
|
||||
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
|
@ -136,6 +130,10 @@ func main() {
|
|||
log.Println("Shutting down...")
|
||||
}
|
||||
|
||||
func getTime() time.Time {
|
||||
return time.Now().In(location)
|
||||
}
|
||||
|
||||
func isScheduledTime(now time.Time) bool {
|
||||
scheduled := []string{"07:45", "08:35", "09:35", "10:25", "11:25", "12:15", "13:40", "14:25", "15:20", "16:00"}
|
||||
current := now.Format("15:04")
|
||||
|
|
@ -147,6 +145,32 @@ func isScheduledTime(now time.Time) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func initUpdate() {
|
||||
// Load all registered users
|
||||
accounts, err := BotStart.LoadAndDecryptAccounts()
|
||||
if err != nil {
|
||||
log.Printf("Error loading accounts: %v", err)
|
||||
}
|
||||
|
||||
// Add the default user from .env
|
||||
defaultUser := os.Getenv("UNTIS_USER")
|
||||
defaultPassword := os.Getenv("UNTIS_PASSWORD")
|
||||
if defaultUser != "" && defaultPassword != "" {
|
||||
accounts = append(accounts, BotStart.DecryptedAccount{
|
||||
UserID: "default",
|
||||
Username: defaultUser,
|
||||
DecryptedPassword: defaultPassword,
|
||||
})
|
||||
}
|
||||
|
||||
// Process each user
|
||||
for _, acc := range accounts {
|
||||
// Fetch the latest timetable and only timetable
|
||||
Untis.Main(acc.Username, acc.DecryptedPassword, acc.UserID)
|
||||
time.Sleep(3 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func scheduleTimetableUpdate() {
|
||||
prevData := make(map[string][]byte)
|
||||
|
||||
|
|
@ -171,8 +195,9 @@ func scheduleTimetableUpdate() {
|
|||
|
||||
// Process each user
|
||||
for _, acc := range accounts {
|
||||
// Fetch the latest timetable
|
||||
Untis.Main(acc.Username, acc.DecryptedPassword, acc.UserID)
|
||||
// Fetch the latest timetable and only timetable
|
||||
Untis.Update(acc.Username, acc.DecryptedPassword, acc.UserID)
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
// Check for changes
|
||||
timetableFile := fmt.Sprintf("timetableFilled_%s.json", acc.UserID)
|
||||
|
|
|
|||
Loading…
Reference in a new issue