starting on guild and member fetching

This commit is contained in:
41666 2025-03-25 22:23:55 -07:00
parent 9755318400
commit aafe3e2d21
12 changed files with 149 additions and 20 deletions

View file

@ -1,8 +1,57 @@
package discord
import (
"fmt"
"net/http"
"net/url"
"time"
)
const DiscordBaseUrl = "https://discord.com/api/v10"
type IDiscordClient interface {
Do(req *http.Request) (*http.Response, error)
}
func Get(url string) {
type DiscordClient struct {
Client *http.Client
BotToken string
ClientID string
ClientSecret string
}
func NewDiscordClient(clientID, clientSecret, botToken string) DiscordClient {
return DiscordClient{
ClientID: clientID,
ClientSecret: clientSecret,
BotToken: botToken,
Client: &http.Client{
Timeout: time.Second * 10,
},
}
}
func (d *DiscordClient) Do(req *http.Request) (*http.Response, error) {
return d.Client.Do(req)
}
func NewRequest(method string, path string, botToken string) *http.Request {
url, err := url.Parse(fmt.Sprintf("%s%s", DiscordBaseUrl, path))
if err != nil {
panic("discord/api: wtf couldnt join a string??")
}
req := &http.Request{
Method: method,
URL: url,
}
req.Header.Set("User-Agent", "Roleypoly (https://roleypoly.com, v4)")
if botToken != "" {
req.Header.Set("Authorization", fmt.Sprintf("Bot %s", botToken))
}
return req
}

30
discord/api_mock.go Normal file
View file

@ -0,0 +1,30 @@
package discord
import (
"bytes"
"encoding/json"
"io"
"net/http"
"github.com/stretchr/testify/mock"
)
type DiscordClientMock struct {
mock.Mock
}
func (c *DiscordClientMock) Do(req *http.Request) (*http.Response, error) {
args := c.Called(req)
return args.Get(0).(*http.Response), args.Error(1)
}
func (c *DiscordClientMock) MockResponse(statusCode int, data any) *http.Response {
body := bytes.Buffer{}
json.NewEncoder(&body).Encode(data)
return &http.Response{
StatusCode: statusCode,
Body: io.NopCloser(&body),
}
}

View file

@ -1,11 +1,12 @@
package discord
import "context"
import "git.sapphic.engineer/roleypoly/v4/types"
type IGuild interface {
GetMember(ctx context.Context, memberID string) (IMember, error)
GetMember(memberID string) (IMember, error)
}
type Guild struct {
ID string
Client IDiscordClient
types.DiscordGuild
}

View file

@ -1,8 +1,6 @@
package discord
import (
"context"
"github.com/stretchr/testify/mock"
)
@ -10,8 +8,8 @@ type GuildMock struct {
mock.Mock
}
func (g *GuildMock) GetMember(ctx context.Context, memberID string) (IMember, error) {
args := g.Called(ctx, memberID)
func (g *GuildMock) GetMember(memberID string) (IMember, error) {
args := g.Called(memberID)
if args.Get(0) == nil {
return nil, args.Error(1)

View file

@ -1,14 +1,18 @@
package discord
import "context"
type IGuildService interface {
GetGuild(ctx context.Context, guildID string) (IGuild, error)
Client() IDiscordClient
GetGuild(guildID string) (IGuild, error)
}
type GuildService struct {
client IDiscordClient
}
func (gs *GuildService) GetGuild(ctx context.Context, guildID string) (IGuild, error) {
return nil, nil
func (gs *GuildService) Client() IDiscordClient {
return gs.client
}
func (gs *GuildService) GetGuild(guildID string) (IGuild, error) {
// gs.client
}

View file

@ -1,8 +1,6 @@
package discord
import (
"context"
"github.com/stretchr/testify/mock"
)
@ -10,8 +8,8 @@ type GuildServiceMock struct {
mock.Mock
}
func (gs *GuildServiceMock) GetGuild(ctx context.Context, guildID string) (IGuild, error) {
args := gs.Called(ctx, guildID)
func (gs *GuildServiceMock) GetGuild(guildID string) (IGuild, error) {
args := gs.Called(guildID)
if args.Get(0) == nil {
return nil, args.Error(1)