1
bot/models/star.go
Andrew Privalov dda407358e
8.1 (#137)
* api 8.1

* readme
2024-12-19 15:12:11 +03:00

195 lines
7.4 KiB
Go

package models
import (
"encoding/json"
"fmt"
)
type TransactionPartnerType string
const (
TransactionPartnerTypeUser TransactionPartnerType = "user"
TransactionPartnerTypeAffiliateProgram TransactionPartnerType = "affiliate_program"
TransactionPartnerTypeFragment TransactionPartnerType = "fragment"
TransactionPartnerTypeTelegramAds TransactionPartnerType = "telegram_ads"
TransactionPartnerTypeTelegramApi TransactionPartnerType = "telegram_api"
TransactionPartnerTypeOther TransactionPartnerType = "other"
)
// TransactionPartner https://core.telegram.org/bots/api#transactionpartner
type TransactionPartner struct {
Type TransactionPartnerType
User *TransactionPartnerUser `json:"user,omitempty"`
AffiliateProgram *TransactionPartnerAffiliateProgram `json:"affiliate_program,omitempty"`
Fragment *TransactionPartnerFragment `json:"fragment,omitempty"`
TelegramAds *TransactionPartnerTelegramAds `json:"telegram_ads,omitempty"`
TelegramApi *TransactionPartnerTelegramApi `json:"telegram_api,omitempty"`
Other *TransactionPartnerOther `json:"other,omitempty"`
}
func (m *TransactionPartner) UnmarshalJSON(data []byte) error {
v := struct {
Type TransactionPartnerType `json:"type"`
}{}
err := json.Unmarshal(data, &v)
if err != nil {
return err
}
switch v.Type {
case TransactionPartnerTypeUser:
m.Type = TransactionPartnerTypeUser
m.User = &TransactionPartnerUser{}
return json.Unmarshal(data, m.User)
case TransactionPartnerTypeAffiliateProgram:
m.Type = TransactionPartnerTypeAffiliateProgram
m.AffiliateProgram = &TransactionPartnerAffiliateProgram{}
return json.Unmarshal(data, m.AffiliateProgram)
case TransactionPartnerTypeFragment:
m.Type = TransactionPartnerTypeFragment
m.Fragment = &TransactionPartnerFragment{}
return json.Unmarshal(data, m.Fragment)
case TransactionPartnerTypeTelegramAds:
m.Type = TransactionPartnerTypeTelegramAds
m.TelegramAds = &TransactionPartnerTelegramAds{}
return json.Unmarshal(data, m.TelegramAds)
case TransactionPartnerTypeTelegramApi:
m.Type = TransactionPartnerTypeTelegramApi
m.TelegramApi = &TransactionPartnerTelegramApi{}
return json.Unmarshal(data, m.TelegramApi)
case TransactionPartnerTypeOther:
m.Type = TransactionPartnerTypeOther
m.Other = &TransactionPartnerOther{}
return json.Unmarshal(data, m.Other)
}
return fmt.Errorf("unsupported TransactionPartner type")
}
// AffiliateInfo https://core.telegram.org/bots/api#affiliateinfo
type AffiliateInfo struct {
AffiliateUser *User `json:"affiliate_user,omitempty"`
AffiliateChat *Chat `json:"affiliate_chat,omitempty"`
CommissionPerMille int `json:"commission_per_mille"`
Amount int `json:"amount"`
NanostarAmount int `json:"nanostar_amount"`
}
// TransactionPartnerUser https://core.telegram.org/bots/api#transactionpartneruser
type TransactionPartnerUser struct {
Type TransactionPartnerType `json:"type"`
User User `json:"user"`
Affiliate *AffiliateInfo `json:"affiliate,omitempty"`
InvoicePayload string `json:"invoice_payload,omitempty"`
SubscriptionPeriod int `json:"subscription_period,omitempty"`
PaidMedia []*PaidMedia `json:"paid_media,omitempty"`
PaidMediaPayload string `json:"paid_media_payload,omitempty"`
Gift string `json:"gift,omitempty"`
}
// TransactionPartnerAffiliateProgram https://core.telegram.org/bots/api#transactionpartneraffiliateprogram
type TransactionPartnerAffiliateProgram struct {
Type TransactionPartnerType `json:"type"`
SponsorUser *User `json:"sponsor_user,omitempty"`
CommissionPerMille int `json:"commission_per_mille"`
}
// TransactionPartnerFragment https://core.telegram.org/bots/api#transactionpartnerfragment
type TransactionPartnerFragment struct {
Type TransactionPartnerType `json:"type"`
WithdrawalState *RevenueWithdrawalState `json:"withdrawal_state,omitempty"`
}
// TransactionPartnerTelegramAds https://core.telegram.org/bots/api#transactionpartnertelegramads
type TransactionPartnerTelegramAds struct {
Type TransactionPartnerType `json:"type"`
}
// TransactionPartnerTelegramApi https://core.telegram.org/bots/api#transactionpartnertelegramapi
type TransactionPartnerTelegramApi struct {
Type TransactionPartnerType `json:"type"`
RequestCount int `json:"request_count"`
}
// TransactionPartnerOther https://core.telegram.org/bots/api#transactionpartnerother
type TransactionPartnerOther struct {
Type TransactionPartnerType `json:"type"`
}
type RevenueWithdrawalStateType string
const (
RevenueWithdrawalStateTypePending RevenueWithdrawalStateType = "pending"
RevenueWithdrawalStateTypeSucceeded RevenueWithdrawalStateType = "succeeded"
RevenueWithdrawalStateTypeFailed RevenueWithdrawalStateType = "failed"
)
// RevenueWithdrawalState https://core.telegram.org/bots/api#revenuewithdrawalstate
type RevenueWithdrawalState struct {
Type RevenueWithdrawalStateType `json:"type"`
Pending *RevenueWithdrawalStatePending `json:"pending,omitempty"`
Succeeded *RevenueWithdrawalStateSucceeded `json:"succeeded,omitempty"`
Failed *RevenueWithdrawalStateFailed `json:"failed,omitempty"`
}
func (m *RevenueWithdrawalState) UnmarshalJSON(data []byte) error {
v := struct {
Type RevenueWithdrawalStateType `json:"type"`
}{}
err := json.Unmarshal(data, &v)
if err != nil {
return err
}
switch v.Type {
case RevenueWithdrawalStateTypePending:
m.Type = RevenueWithdrawalStateTypePending
m.Pending = &RevenueWithdrawalStatePending{}
return json.Unmarshal(data, m.Pending)
case RevenueWithdrawalStateTypeSucceeded:
m.Type = RevenueWithdrawalStateTypeSucceeded
m.Succeeded = &RevenueWithdrawalStateSucceeded{}
return json.Unmarshal(data, m.Succeeded)
case RevenueWithdrawalStateTypeFailed:
m.Type = RevenueWithdrawalStateTypeFailed
m.Failed = &RevenueWithdrawalStateFailed{}
return json.Unmarshal(data, m.Failed)
}
return fmt.Errorf("unsupported RevenueWithdrawalState type")
}
// RevenueWithdrawalStatePending https://core.telegram.org/bots/api#revenuewithdrawalstatepending
type RevenueWithdrawalStatePending struct {
Type RevenueWithdrawalStateType `json:"type"`
}
// RevenueWithdrawalStateSucceeded https://core.telegram.org/bots/api#revenuewithdrawalstatesucceeded
type RevenueWithdrawalStateSucceeded struct {
Type RevenueWithdrawalStateType `json:"type"`
Date int `json:"date"`
URL string `json:"url"`
}
// RevenueWithdrawalStateFailed https://core.telegram.org/bots/api#revenuewithdrawalstatefailed
type RevenueWithdrawalStateFailed struct {
Type RevenueWithdrawalStateType `json:"type"`
}
// StarTransaction https://core.telegram.org/bots/api#startransaction
type StarTransaction struct {
ID string `json:"id"`
Amount int `json:"amount"`
NanostarAmount int `json:"nanostar_amount,omitempty"`
Date int `json:"date"`
Source *TransactionPartner `json:"source,omitempty"`
Receiver *TransactionPartner `json:"receiver,omitempty"`
}
// StarTransactions https://core.telegram.org/bots/api#startransactions
type StarTransactions struct {
Transactions []StarTransaction `json:"transactions"`
}