Skip to content

Commit

Permalink
feat(api): fetch members count
Browse files Browse the repository at this point in the history
  • Loading branch information
ernado committed Apr 18, 2024
1 parent c0e57b9 commit fa2cf1e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 24 deletions.
17 changes: 10 additions & 7 deletions internal/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,27 @@ import (
"context"

"github.com/gotd/td/telegram"
"github.com/gotd/td/telegram/message/peer"
"github.com/ogen-go/ogen/http"

"github.com/go-faster/bot/internal/ent"
"github.com/go-faster/bot/internal/oas"
)

func NewServer(db *ent.Client, tg *telegram.Client, ht http.Client) *Server {
func NewServer(db *ent.Client, tg *telegram.Client, resolver peer.Resolver, ht http.Client) *Server {
return &Server{
db: db,
tg: tg,
ht: ht,
db: db,
tg: tg,
ht: ht,
resolver: resolver,
}
}

type Server struct {
db *ent.Client
tg *telegram.Client
ht http.Client
db *ent.Client
tg *telegram.Client
ht http.Client
resolver peer.Resolver
}

func (s Server) NewError(ctx context.Context, err error) *oas.ErrorStatusCode {
Expand Down
52 changes: 37 additions & 15 deletions internal/api/badge.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import (
"strings"

"github.com/go-faster/errors"
"github.com/go-faster/sdk/zctx"
"github.com/gotd/td/tg"
"go.uber.org/zap"

"github.com/go-faster/bot/internal/oas"
)
Expand All @@ -35,22 +38,41 @@ func etag(name string, data []byte) string {
}

func (s Server) GetTelegramBadge(ctx context.Context, params oas.GetTelegramBadgeParams) (*oas.GetTelegramBadgeOKHeaders, error) {
members := map[string]int{
"gotd_en": 237,
"gotd_ru": 234,
"gotd_zhcn": 15,
}[params.GroupName]
_ = s.tg // TODO(ernado): fetch actual data.
title := params.Title.Or(params.GroupName)
text := strconv.Itoa(members)
u := &url.URL{
Scheme: "https",
Host: "img.shields.io",
Path: generateBadgePath(title, text, "179cde"),
var members int
{
peer, err := s.resolver.ResolveDomain(ctx, "@"+params.GroupName)
if err != nil {
return nil, errors.Wrap(err, "resolve domain")
}
fullChat, err := s.tg.API().MessagesGetFullChat(ctx, peer.(*tg.InputPeerChat).ChatID)
if err != nil {
return nil, errors.Wrap(err, "get chat")
}
for _, chat := range fullChat.Chats {
switch c := chat.(type) {
case *tg.Chat:
members = c.ParticipantsCount
default:
zctx.From(ctx).Warn("unexpected chat type",
zap.String("type", fmt.Sprintf("%T", chat)),
)
}
}
}
var (
title = params.Title.Or(params.GroupName)
text = strconv.Itoa(members)
u = &url.URL{
Scheme: "https",
Host: "img.shields.io",
Path: generateBadgePath(title, text, "179cde"),
}
)
{
q := u.Query()
q.Set("logo", "telegram")
u.RawQuery = q.Encode()
}
q := u.Query()
q.Set("logo", "telegram")
u.RawQuery = q.Encode()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), http.NoBody)
if err != nil {
return nil, errors.Wrap(err, "create request")
Expand Down
8 changes: 6 additions & 2 deletions internal/cmd/internal/server/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ type App struct {
gaps *updates.Manager
rdy *Readiness
httpTransport *otelhttp.Transport
resolver peer.Resolver
}

func initApp(m *sdkapp.Metrics, lg *zap.Logger) (_ *App, rerr error) {
Expand Down Expand Up @@ -129,7 +130,9 @@ func initApp(m *sdkapp.Metrics, lg *zap.Logger) (_ *App, rerr error) {
},
})
raw := client.API()
sender := message.NewSender(raw)
resolver := peer.DefaultResolver(raw)
sender := message.NewSender(raw).
WithResolver(resolver)
dd := downloader.NewDownloader()
httpTransport := otelhttp.NewTransport(http.DefaultTransport,
otelhttp.WithTracerProvider(m.TracerProvider()),
Expand Down Expand Up @@ -195,6 +198,7 @@ func initApp(m *sdkapp.Metrics, lg *zap.Logger) (_ *App, rerr error) {
token: token,
raw: raw,
sender: sender,
resolver: resolver,
dispatcher: dispatcher,
mux: mux,
m: m,
Expand Down Expand Up @@ -325,7 +329,7 @@ func (a *App) Run(ctx context.Context) error {
httpClient := &http.Client{
Transport: a.httpTransport,
}
h, err := oas.NewServer(api.NewServer(a.db, a.client, httpClient),
h, err := oas.NewServer(api.NewServer(a.db, a.client, a.resolver, httpClient),
oas.WithMeterProvider(a.m.MeterProvider()),
oas.WithTracerProvider(a.m.TracerProvider()),
)
Expand Down

0 comments on commit fa2cf1e

Please sign in to comment.