feat(instance): сервер установщика больше не «главный»

Понятие главного сервера убрано из поведения: сервер, создаваемый установщиком,
обычный (is_main = false), автовступления в него нет, а в настройках инстанса
он остаётся лишь справочно (main_guild_id → AdminGuildID в ответе API).
Клиент от него больше не зависит: новичок начинает с пустым списком серверов.
This commit is contained in:
2026-09-20 01:12:01 +03:00
parent 33dc1fec96
commit f26728113d
9 changed files with 458 additions and 23 deletions
+6 -14
View File
@@ -23,9 +23,10 @@ type instancePayload struct {
MaxGuildsPerUser int `json:"max_guilds_per_user"`
MaxMembersPerGuild int `json:"max_members_per_guild"`
MaxMessageLength int `json:"max_message_length"`
MainGuildID string `json:"main_guild_id,omitempty"`
UserCount int `json:"user_count"`
GuildCount int `json:"guild_count"`
// AdminGuildID — сервер, созданный установщиком (справочно, автовхода нет).
AdminGuildID string `json:"main_guild_id,omitempty"`
UserCount int `json:"user_count"`
GuildCount int `json:"guild_count"`
}
type instanceOutput struct {
@@ -441,21 +442,17 @@ func (s *Server) instancePayload(ctx context.Context) (instancePayload, error) {
GuildCount: len(guilds),
}
if settings.MainGuildID != 0 {
payload.MainGuildID = formatSnowflake(settings.MainGuildID)
payload.AdminGuildID = formatSnowflake(settings.MainGuildID)
}
return payload, nil
}
// createGuildAsAdmin создаёт сервер в обход лимитов и фиксирует это в аудите.
func (s *Server) createGuildAsAdmin(ctx context.Context, admin, owner *store.User, name string) (*store.Guild, error) {
settings, err := s.store.InstanceSettings(ctx)
if err != nil {
return nil, humaError(err)
}
guild, err := s.store.CreateGuild(ctx, store.CreateGuildParams{
Name: name,
OwnerID: owner.ID,
IsMain: settings.MainGuildID == 0,
IsMain: false,
IsDiscoverable: false,
})
if err != nil {
@@ -469,11 +466,6 @@ func (s *Server) createGuildAsAdmin(ctx context.Context, admin, owner *store.Use
}); err != nil {
return nil, humaError(err)
}
if guild.IsMain {
if err := s.store.SetInstanceSetting(ctx, "main_guild_id", strconv.FormatUint(guild.ID, 10)); err != nil {
return nil, humaError(err)
}
}
s.recordAudit(ctx, admin, guild.ID, "guild.create", "guild", &guild.ID, "created by instance admin")
s.recordAudit(ctx, admin, guild.ID, "limits.bypass", "guild", &guild.ID, "instance admin bypassed guild limits")
if s.gateway != nil {