mirror of
https://github.com/Kyren223/eko.git
synced 2026-03-10 09:55:36 +00:00
94 lines
2.5 KiB
Go
94 lines
2.5 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
|
|
tea "github.com/charmbracelet/bubbletea/v2"
|
|
|
|
"github.com/kyren223/eko/internal/client/gateway"
|
|
"github.com/kyren223/eko/internal/data"
|
|
"github.com/kyren223/eko/internal/packet"
|
|
"github.com/kyren223/eko/pkg/assert"
|
|
"github.com/kyren223/eko/pkg/snowflake"
|
|
)
|
|
|
|
type (
|
|
AppendMessage data.Message
|
|
UserProfileUpdate data.User
|
|
)
|
|
|
|
func SendMessage(message string) tea.Cmd {
|
|
return func() tea.Msg {
|
|
log.Println("request SendMessage sent")
|
|
frequencyId := snowflake.ID(1852771536100921344)
|
|
request := packet.SendMessage{
|
|
Content: message,
|
|
FrequencyID: &frequencyId,
|
|
}
|
|
response, ok := <-gateway.Send(&request)
|
|
if !ok {
|
|
return errors.New("request SendMessage timeout")
|
|
}
|
|
log.Println("request SendMessage received response")
|
|
|
|
switch response := response.(type) {
|
|
case *packet.ErrorMessage:
|
|
return errors.New(response.Error)
|
|
case *packet.Messages:
|
|
assert.Assert(len(response.Messages) == 1, "server must return only the one message that was sent")
|
|
return AppendMessage(response.Messages[0])
|
|
}
|
|
return fmt.Errorf("received invalid response from server: %v", response.Type())
|
|
}
|
|
}
|
|
|
|
func GetMessages() tea.Msg {
|
|
log.Println("request GetMessages sent")
|
|
frequencyId := snowflake.ID(1852771536100921344)
|
|
request := packet.GetMessagesRange{
|
|
FrequencyID: &frequencyId,
|
|
ReceiverID: nil,
|
|
From: nil,
|
|
To: nil,
|
|
}
|
|
response, ok := <-gateway.Send(&request)
|
|
if !ok {
|
|
return errors.New("request GetMessages timeout")
|
|
}
|
|
log.Println("request GetMessages received response")
|
|
|
|
switch response := response.(type) {
|
|
case *packet.ErrorMessage:
|
|
return errors.New(response.Error)
|
|
case *packet.Messages:
|
|
return response
|
|
}
|
|
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())
|
|
}
|
|
}
|