Initial open source release

This commit is contained in:
A 2026-06-04 01:37:39 +08:00
commit 74992e893f
377 changed files with 118084 additions and 0 deletions

2
internal/app/help/doc.go Normal file
View file

@ -0,0 +1,2 @@
// Package help 提供 help.* RPC 背后的数据目录服务。
package help

View file

@ -0,0 +1,76 @@
package help
import (
"context"
"telesrv/internal/domain"
"telesrv/internal/store"
)
const tdesktopClient = "tdesktop"
const tdesktopDefaultAppConfig = `{"chat_read_mark_expire_period":604800,"chat_read_mark_size_threshold":50,"pm_read_date_expire_period":604800,"quote_length_max":1024,"telegram_antispam_group_size_min":200,"telegram_antispam_user_id":"5434988373","reactions_default":{"_":"reactionEmoji","emoticon":"👍"},"reactions_uniq_max":11,"reactions_user_max_default":1,"reactions_in_chat_max":3}`
// Service 提供客户端启动配置与国家区号目录。
type Service struct {
appConfigs store.AppConfigStore
countries store.CountryStore
}
// NewService 创建 help 服务。
func NewService(appConfigs store.AppConfigStore, countries store.CountryStore) *Service {
return &Service{appConfigs: appConfigs, countries: countries}
}
// GetAppConfig 返回 TDesktop app confighash 命中时返回 notModified。
func (s *Service) GetAppConfig(ctx context.Context, hash int) (domain.AppConfig, bool, error) {
if s == nil || s.appConfigs == nil {
cfg := domain.AppConfig{Client: tdesktopClient, Hash: 5, JSON: []byte(tdesktopDefaultAppConfig)}
return cfg, hash == cfg.Hash, nil
}
cfg, found, err := s.appConfigs.GetAppConfig(ctx, tdesktopClient)
if err != nil {
return domain.AppConfig{}, false, err
}
if !found {
cfg = domain.AppConfig{Client: tdesktopClient, Hash: 5, JSON: []byte(tdesktopDefaultAppConfig)}
}
return cfg, hash != 0 && hash == cfg.Hash, nil
}
// GetCountries 返回国家区号目录hash 命中时返回 notModified。
func (s *Service) GetCountries(ctx context.Context, langCode string, hash int) (domain.CountriesList, bool, error) {
if s == nil || s.countries == nil {
list := defaultCountries()
return list, hash != 0 && hash == list.Hash, nil
}
list, err := s.countries.ListCountries(ctx, langCode)
if err != nil {
return domain.CountriesList{}, false, err
}
if len(list.Countries) == 0 {
list = defaultCountries()
}
return list, hash != 0 && hash == list.Hash, nil
}
func defaultCountries() domain.CountriesList {
return domain.CountriesList{
Hash: 1,
Countries: []domain.Country{
{
ISO2: "US",
DefaultName: "United States",
CountryCodes: []domain.CountryCode{
{CountryCode: "1", Prefixes: []string{"1"}},
},
},
{
ISO2: "CN",
DefaultName: "China",
CountryCodes: []domain.CountryCode{
{CountryCode: "86", Prefixes: []string{"86"}},
},
},
},
}
}