fucking hate chatgpt

This commit is contained in:
aaron 2024-11-05 08:25:53 -08:00
parent 304923a482
commit d9c23c6a51
12 changed files with 42 additions and 30 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -33,8 +33,9 @@ var knownGames = map[string]bool{
func (p *Plugin) ReceiveProcessList(w http.ResponseWriter, r *http.Request) {
var payload struct {
ProcessList string `json:"processList"`
UserID string `json:"userID"` // Assuming you're sending userID from the desktop app
UserID string `json:"userID"`
}
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
p.API.LogError("Failed to decode process list", "error", err.Error())
http.Error(w, "Invalid request payload", http.StatusBadRequest)
@ -57,26 +58,6 @@ func (p *Plugin) ReceiveProcessList(w http.ResponseWriter, r *http.Request) {
}
}
// GetActiveGame scans processes to determine the active game based on known game names
func (p *Plugin) GetActiveGame() (string, error) {
cmd := exec.Command("ps", "-e")
output, err := cmd.Output()
if err != nil {
return "", err
}
lines := strings.Split(string(output), "\n")
for _, line := range lines {
for gameName := range knownGames {
if strings.Contains(line, gameName) {
return gameName, nil
}
}
}
return "", nil
}
// SetUserGameStatus updates the user's custom status to reflect the game they are playing
func (p *Plugin) SetUserGameStatus(userID, game string) error {
status := fmt.Sprintf("playing: %s", game)
@ -85,6 +66,11 @@ func (p *Plugin) SetUserGameStatus(userID, game string) error {
return appErr
}
// Avoid unnecessary updates
if user.Props["custom_status"] == status {
return nil
}
customStatus := model.CustomStatus{
Emoji: "video_game",
Text: status,
@ -123,6 +109,10 @@ func (p *Plugin) MonitorGameStatus(userID string) {
if err := p.SetUserGameStatus(userID, game); err != nil {
p.API.LogError("Failed to set user game status", "error", err.Error())
}
} else {
if err := p.SetUserGameStatus(userID, ""); err != nil {
p.API.LogError("Failed to clear user game status", "error", err.Error())
}
}
time.Sleep(30 * time.Second)
@ -130,6 +120,26 @@ func (p *Plugin) MonitorGameStatus(userID string) {
}
}
// GetActiveGame scans processes to determine the active game based on known game names
func (p *Plugin) GetActiveGame() (string, error) {
cmd := exec.Command("tasklist") // Use tasklist for Windows
output, err := cmd.Output()
if err != nil {
return "", err
}
lines := strings.Split(string(output), "\n")
for _, line := range lines {
for gameName := range knownGames {
if strings.Contains(line, gameName) {
return gameName, nil
}
}
}
return "", nil
}
// OnActivate is called when the plugin is activated
func (p *Plugin) OnActivate() error {
config := p.getConfiguration()
@ -150,17 +160,21 @@ func (p *Plugin) OnActivate() error {
// Register the HTTP handler for receiving process lists
http.HandleFunc("/plugins/com.mattermost.gamestatusupdate/processlist", p.ReceiveProcessList)
// Retrieve the current user ID
session, err := p.API.GetSession("current") // Use "current" to get the session for the logged-in user
if err != nil {
return fmt.Errorf("failed to get session: %w", err) // Handle the error appropriately
}
userID := session.UserId
// Start monitoring game status for the current user
go p.MonitorGameStatus(userID)
}
return nil
}
// OnDeactivate is called when the plugin is deactivated
func (p *Plugin) OnDeactivate() error {
close(p.stopChannel)
return nil
}
// HandleWebSocketEvent handles incoming WebSocket events.
func (p *Plugin) HandleWebSocketEvent(event model.WebSocketEvent) {
// Check if the event is of type user_status
@ -185,20 +199,18 @@ func (p *Plugin) HandleWebSocketEvent(event model.WebSocketEvent) {
return
}
// Continue with your logic to update the user's game status...
// Update the user's game status based on active game
game, err := p.GetActiveGame()
if err != nil {
p.API.LogError("Failed to get active game", "error", err.Error())
return
}
// Update the user's game status
if game != "" {
if err := p.SetUserGameStatus(data.UserID, game); err != nil {
p.API.LogError("Failed to update user game status", "error", err.Error())
}
} else {
// Clear the user's game status if no game is detected
if err := p.SetUserGameStatus(data.UserID, ""); err != nil {
p.API.LogError("Failed to clear user game status", "error", err.Error())
}