Files
gover-ms-teams-online/main.go
Leons Aleksandrovs 9d560ce526 changed mouse moving logic
previously it would see if user is active each 10 seconds, and once in 5
minutes, it would move mouse if user wasn't active.
It caused issues because if user wasn't active before 5 minute ticker,
then mouse would still move.
Now gover counts for how long user has been idle, and moves mouse only
when time exceeds preset value in seconds
2025-10-09 22:29:17 +03:00

75 lines
1.4 KiB
Go

package main
import (
"fmt"
"time"
"github.com/go-vgo/robotgo"
)
const (
CHECKING_INTERVAL_SECONDS = 10
MOVE_AFTER_SECONDS = 300
)
func moveMouse() {
// Move mouse around 100px
robotgo.MoveSmoothRelative(100, 0)
time.Sleep(1 * time.Second)
robotgo.MoveSmoothRelative(-100, 0)
}
func displayStatus(lastMove *int) {
// Clear display, and write last move
fmt.Print("\033[H\033[2J")
fmt.Printf("Last move %d seconds ago\n", *lastMove)
}
func checkActive(x *int, y *int, lastMove *int) {
// Current x, and Current Y
cX, cY := robotgo.Location()
if cX == *x && cY == *y {
// Hasn't moved
*lastMove += CHECKING_INTERVAL_SECONDS
} else {
// Has moved
*lastMove = 0
}
// Set current x and y
*x = cX
*y = cY
// Check if we should move
if *lastMove >= MOVE_AFTER_SECONDS {
moveMouse()
*lastMove = 0
}
displayStatus(lastMove)
}
func main() {
// reactive variables haha (useState, or reactive(), but just pointers)
x := 0
y := 0
// Meant to represent seconds ago
lastMove := 0
// Create tickers
ticker := time.NewTicker(CHECKING_INTERVAL_SECONDS * time.Second)
fmt.Printf("Checking active every %d seconds", CHECKING_INTERVAL_SECONDS)
time.Sleep(5 * time.Second)
defer ticker.Stop()
// Run initial calls (optional)
checkActive(&x, &y, &lastMove)
// Goroutine to handle ticks
for range ticker.C {
checkActive(&x, &y, &lastMove)
}
}