avatar.go 994 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "net/http"
  6. "maunium.net/go/mautrix/appservice"
  7. "maunium.net/go/mautrix/id"
  8. "github.com/bwmarrin/discordgo"
  9. )
  10. func uploadAvatar(intent *appservice.IntentAPI, url string) (id.ContentURI, error) {
  11. req, err := http.NewRequest(http.MethodGet, url, nil)
  12. if err != nil {
  13. return id.ContentURI{}, fmt.Errorf("failed to prepare request: %w", err)
  14. }
  15. for key, value := range discordgo.DroidImageHeaders {
  16. req.Header.Set(key, value)
  17. }
  18. getResp, err := http.DefaultClient.Do(req)
  19. if err != nil {
  20. return id.ContentURI{}, fmt.Errorf("failed to download avatar: %w", err)
  21. }
  22. data, err := io.ReadAll(getResp.Body)
  23. _ = getResp.Body.Close()
  24. if err != nil {
  25. return id.ContentURI{}, fmt.Errorf("failed to read avatar data: %w", err)
  26. }
  27. mime := http.DetectContentType(data)
  28. resp, err := intent.UploadBytes(data, mime)
  29. if err != nil {
  30. return id.ContentURI{}, fmt.Errorf("failed to upload avatar to Matrix: %w", err)
  31. }
  32. return resp.ContentURI, nil
  33. }