diff options
Diffstat (limited to 'internal/client/api/api.go')
| -rw-r--r-- | internal/client/api/api.go | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/internal/client/api/api.go b/internal/client/api/api.go index d52b727..7fcde8b 100644 --- a/internal/client/api/api.go +++ b/internal/client/api/api.go @@ -14,7 +14,10 @@ import ( "github.com/kyren223/eko/pkg/snowflake" ) -type AppendMessage data.Message +type ( + AppendMessage data.Message + UserProfileUpdate data.User +) func SendMessage(message string) tea.Cmd { return func() tea.Msg { @@ -26,8 +29,7 @@ func SendMessage(message string) tea.Cmd { } response, ok := <-gateway.Send(&request) if !ok { - log.Println() - return errors.New("request timeout") + return errors.New("request SendMessage timeout") } log.Println("request SendMessage received response") @@ -53,8 +55,7 @@ func GetMessages() tea.Msg { } response, ok := <-gateway.Send(&request) if !ok { - log.Println() - return errors.New("request timeout") + return errors.New("request GetMessages timeout") } log.Println("request GetMessages received response") @@ -66,3 +67,27 @@ func GetMessages() tea.Msg { } return fmt.Errorf("received invalid response from server: %v", response.Type()) } + +func GetUserById(id snowflake.ID) tea.Cmd { + return func() tea.Msg { + log.Println("request GetUserById for ID", id, "sent") + request := packet.GetUserByID{UserID: id} + response, ok := <-gateway.Send(&request) + if !ok { + return errors.New("request GetUserById timeout") + } + log.Println("request GetUserById received response") + + switch response := response.(type) { + case *packet.ErrorMessage: + return errors.New(response.Error) + case *packet.Users: + if len(response.Users) == 0 { + return fmt.Errorf("requested user id %v not found", id) + } + assert.Assert(len(response.Users) == 1, "server must return only one user with the matching id") + return UserProfileUpdate(response.Users[0]) + } + return fmt.Errorf("received invalid response from server: %v", response.Type()) + } +} |
