Ctrl K
ComunidadGuías…

internal/domain/sticker_collection.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package domain

import "errors"

// ErrStickerInvalid means the input document is not a valid sticker/GIF (faveSticker/saveGif etc.).
var ErrStickerInvalid = errors.New("sticker document invalid")

var (
	ErrStickerSetTitleInvalid      = errors.New("sticker set title invalid")
	ErrStickerSetShortNameInvalid  = errors.New("sticker set short name invalid")
	ErrStickerSetShortNameOccupied = errors.New("sticker set short name occupied")
	ErrStickerSetTypeInvalid       = errors.New("sticker set type invalid")
	ErrStickerSetEmpty             = errors.New("sticker set empty")
	ErrStickerSetTooMuch           = errors.New("sticker set too much")
	ErrStickerSetEmojiInvalid      = errors.New("sticker set emoji invalid")
	ErrStickerSetFileInvalid       = errors.New("sticker set file invalid")
	ErrStickerSetCreatorInvalid    = errors.New("sticker set creator invalid")
	ErrStickerSetInvalid           = errors.New("sticker set invalid")
	ErrStickerSetNotOwned          = errors.New("sticker set not owned")
	ErrStickerSetPositionInvalid   = errors.New("sticker set position invalid")
)

// StickerCollectionKind distinguishes the several kinds of personal sticker collection a user has.
type StickerCollectionKind string

const (
	// StickerCollectionFaved is favorited stickers (messages.faveSticker / getFavedStickers).
	StickerCollectionFaved StickerCollectionKind = "faved"
	// StickerCollectionRecent is recently used stickers (saveRecentSticker / getRecentStickers).
	StickerCollectionRecent StickerCollectionKind = "recent"
	// StickerCollectionRecentAttached is stickers recently used with media from the attach menu (attached=true).
	StickerCollectionRecentAttached StickerCollectionKind = "recent_attached"
	// StickerCollectionGif is saved GIFs (messages.saveGif / getSavedGifs).
	StickerCollectionGif StickerCollectionKind = "gif"
)

// Capacity upper bounds for each collection (newest first; the oldest are truncated on overflow). These only limit storage growth, not strict Telegram quotas;
// faved has no Premium tiering (outside the user's decision range) and uses a single bound.
const (
	MaxFavedStickers        = 100
	MaxRecentStickers       = 30
	MaxSavedGifs            = 200
	MaxInstalledStickerSets = 200
	MaxCreatedStickerSets   = 200
)

// MaxStickerCollectionItems returns the capacity upper bound for a collection kind.
func MaxStickerCollectionItems(kind StickerCollectionKind) int {
	switch kind {
	case StickerCollectionFaved:
		return MaxFavedStickers
	case StickerCollectionGif:
		return MaxSavedGifs
	default:
		return MaxRecentStickers
	}
}

// StickerCollectionItem is one item in a collection: document id + time added (recent's used_at / faved's favorite time).
type StickerCollectionItem struct {
	DocumentID int64
	Date       int
}

// UserStickerSet is one sticker set's install/archive state for an account.
// The set metadata, documents and packs are still maintained by the media/files module; only the user's view is stored here.
type UserStickerSet struct {
	OwnerUserID   int64
	StickerSetID  int64
	Kind          StickerSetKind
	Archived      bool
	InstalledDate int
	OrderValue    int64
}