chore: refresh gramsrv public release
This commit is contained in:
parent
75cebe8dbf
commit
70b6820474
1274 changed files with 378751 additions and 59919 deletions
|
|
@ -4,7 +4,25 @@ package domain
|
|||
type MessageEntityType string
|
||||
|
||||
const (
|
||||
MessageEntityBold MessageEntityType = "bold"
|
||||
MessageEntityBold MessageEntityType = "bold"
|
||||
MessageEntityItalic MessageEntityType = "italic"
|
||||
MessageEntityUnderline MessageEntityType = "underline"
|
||||
MessageEntityStrike MessageEntityType = "strike"
|
||||
MessageEntityCode MessageEntityType = "code"
|
||||
MessageEntityPre MessageEntityType = "pre"
|
||||
MessageEntityTextURL MessageEntityType = "text_url"
|
||||
MessageEntityMentionName MessageEntityType = "mention_name"
|
||||
MessageEntitySpoiler MessageEntityType = "spoiler"
|
||||
MessageEntityBlockquote MessageEntityType = "blockquote"
|
||||
MessageEntityCustomEmoji MessageEntityType = "custom_emoji"
|
||||
MessageEntityMention MessageEntityType = "mention"
|
||||
MessageEntityHashtag MessageEntityType = "hashtag"
|
||||
MessageEntityCashtag MessageEntityType = "cashtag"
|
||||
MessageEntityBotCommand MessageEntityType = "bot_command"
|
||||
MessageEntityURL MessageEntityType = "url"
|
||||
MessageEntityEmail MessageEntityType = "email"
|
||||
MessageEntityPhone MessageEntityType = "phone"
|
||||
MessageEntityBankCard MessageEntityType = "bank_card"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -55,7 +73,11 @@ func ValidateMessageReplyBounds(reply *MessageReply) error {
|
|||
if reply.TopMessageID < 0 || reply.TopMessageID > MaxMessageBoxID {
|
||||
return ErrReplyMessageIDInvalid
|
||||
}
|
||||
if reply.MessageID == 0 && reply.TopMessageID == 0 {
|
||||
if reply.StoryID < 0 || reply.StoryID > MaxStoryID {
|
||||
return ErrReplyMessageIDInvalid
|
||||
}
|
||||
// story 回复(StoryID>0)不携带 MessageID/TopMessageID;普通回复至少有其一。
|
||||
if reply.MessageID == 0 && reply.TopMessageID == 0 && reply.StoryID == 0 {
|
||||
return ErrReplyMessageIDInvalid
|
||||
}
|
||||
if reply.QuoteOffset < 0 || reply.QuoteOffset > MaxMessageReplyQuoteOffset {
|
||||
|
|
@ -69,6 +91,16 @@ type MessageEntity struct {
|
|||
Type MessageEntityType
|
||||
Offset int
|
||||
Length int
|
||||
// URL 仅 text_url 使用。
|
||||
URL string
|
||||
// UserID 仅 mention_name 使用。
|
||||
UserID int64
|
||||
// Language 仅 pre 使用。
|
||||
Language string
|
||||
// DocumentID 仅 custom_emoji 使用。
|
||||
DocumentID int64
|
||||
// Collapsed 仅 blockquote 使用。
|
||||
Collapsed bool
|
||||
}
|
||||
|
||||
// Message 是账号视角下的一条私聊消息。
|
||||
|
|
@ -90,9 +122,56 @@ type Message struct {
|
|||
Forward *MessageForward
|
||||
Reactions *ChannelMessageReactions
|
||||
Pts int
|
||||
TTLPeriod int
|
||||
ExpiresAt int
|
||||
Media *MessageMedia
|
||||
MediaUnread bool
|
||||
ReactionUnread bool
|
||||
ViaBotID int64
|
||||
// GroupedID 是相册分组 id:同一次 sendMultiMedia 的各条消息共享同一非零值,
|
||||
// 客户端据此把它们渲染成一个相册组。非相册消息恒 0。双盒持同一值。
|
||||
GroupedID int64
|
||||
// Effect 是消息特效 id(message.effect,flags2.2?long):私聊 1-1 专属动画特效
|
||||
// (🎉/👍 等),发送方与接收方双盒持同一非零值并各自播放一次;非特效消息恒 0。
|
||||
// 转发不携带特效(新消息恒 0)。仅私聊;群/频道不渲染。
|
||||
Effect int64
|
||||
// ReplyMarkup 是 bot 消息携带的 inline keyboard 快照(P3)。仅 bot 出站消息可
|
||||
// 非空;普通用户消息恒 nil(发送侧 is_bot 闸门)。双盒持同一快照(无 per-viewer 差异)。
|
||||
ReplyMarkup *MessageReplyMarkup
|
||||
// RichMessage 是 Layer 227 富文本消息(richMessage)快照,可选;普通消息恒 nil。
|
||||
RichMessage *MessageRichMessage
|
||||
// Pinned 是 owner 视角的置顶标志(官方私聊多置顶语义:双方各自
|
||||
// 的 box 行独立持有,非 pm_oneside 操作两侧同步翻转)。
|
||||
Pinned bool
|
||||
// SavedPeer 是 Saved Messages 分会话分组键(message.saved_peer_id)。
|
||||
// 仅 self-chat box 行非零:直发笔记 = self;转发进收藏夹 = 源会话 peer;
|
||||
// 存量回填兜底 hidden author 占位 user 2666000。非 self-chat 行恒零值。
|
||||
SavedPeer Peer
|
||||
}
|
||||
|
||||
// MessageRichMessage 是 Layer 227 富文本消息(richMessage)的协议中立快照:一组 IV
|
||||
// PageBlock(Blocks)+ 内嵌已解析的 Photos/Documents。
|
||||
//
|
||||
// Blocks 存 gotd TL 序列化后的 []tg.PageBlockClass 不透明字节——PageBlock 体系庞大且
|
||||
// input(inputRichMessage.blocks) 与 output(richMessage.blocks) 同构、原样透传,故不在
|
||||
// domain 逐类型建模;rpc 层负责 tg.PageBlock 向量 ↔ bytes 的序列化(domain 不依赖 tg)。
|
||||
// 与 message media 同理,Photos/Documents 存已解析快照(含 viewer 无关的 access_hash),
|
||||
// 投影复用 tgPhoto/tgDocument。Phase 1 仅支持 inputRichMessage(blocks 形态),不解析
|
||||
// HTML/Markdown 变体。
|
||||
//
|
||||
// 已知局限:Blocks 是 gotd 线格式不透明字节,跨 gotd 版本(PageBlock 构造器变更)可能
|
||||
// 失效——富文本消息为全新实验特性、无存量数据,Phase 1 接受该耦合。
|
||||
type MessageRichMessage struct {
|
||||
Rtl bool `json:"rtl,omitempty"`
|
||||
Part bool `json:"part,omitempty"`
|
||||
Blocks []byte `json:"blocks,omitempty"`
|
||||
Photos []Photo `json:"photos,omitempty"`
|
||||
Documents []Document `json:"documents,omitempty"`
|
||||
}
|
||||
|
||||
// IsZero 表示无富文本载荷(落库时跳过空快照、投影时不下发 rich_message)。
|
||||
func (m *MessageRichMessage) IsZero() bool {
|
||||
return m == nil || (len(m.Blocks) == 0 && len(m.Photos) == 0 && len(m.Documents) == 0)
|
||||
}
|
||||
|
||||
// MessageReply describes a message reply/thread header without depending on TL types.
|
||||
|
|
@ -104,6 +183,9 @@ type MessageReply struct {
|
|||
QuoteText string
|
||||
QuoteEntities []MessageEntity
|
||||
QuoteOffset int
|
||||
// StoryID > 0 表示这是一条对 story 的回复(评论):MessageID 为 0,Peer 为 story 作者,
|
||||
// 投影为 messageReplyStoryHeader 而非普通 messageReplyHeader。
|
||||
StoryID int
|
||||
}
|
||||
|
||||
// MessageForward 描述一条转发消息的原始作者信息。
|
||||
|
|
@ -126,17 +208,24 @@ type MessageList struct {
|
|||
|
||||
// MessageFilter 描述历史/搜索查询条件。
|
||||
type MessageFilter struct {
|
||||
HasPeer bool
|
||||
Peer Peer
|
||||
Query string
|
||||
OffsetID int
|
||||
OffsetDate int
|
||||
AddOffset int
|
||||
Limit int
|
||||
MaxID int
|
||||
MinID int
|
||||
Hash int64
|
||||
HasPeer bool
|
||||
Peer Peer
|
||||
Query string
|
||||
OffsetID int
|
||||
OffsetDate int
|
||||
AddOffset int
|
||||
Limit int
|
||||
MaxID int
|
||||
MinID int
|
||||
Hash int64
|
||||
// PinnedOnly 仅返回置顶消息(messages.search filterPinned 与
|
||||
// userFull.pinned_msg_id 的查询路径)。
|
||||
PinnedOnly bool
|
||||
MusicOnly bool
|
||||
NeedTotalCount bool
|
||||
// SavedPeer 非零时仅返回 self-chat 中该 saved 子会话的消息
|
||||
// (messages.getSavedHistory);Peer 必须同时是 self。
|
||||
SavedPeer Peer
|
||||
}
|
||||
|
||||
// SendPrivateTextRequest 是私聊文本/媒体发送命令。
|
||||
|
|
@ -155,6 +244,19 @@ type SendPrivateTextRequest struct {
|
|||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
RecipientBlocked bool
|
||||
TTLPeriod int
|
||||
ViaBotID int64
|
||||
// GroupedID 相册分组 id(sendMultiMedia 同组共享非零值,非相册恒 0)。
|
||||
GroupedID int64
|
||||
// Effect 消息特效 id(私聊专属,0 表无特效;调用方已对 catalog 校验过合法性)。
|
||||
Effect int64
|
||||
// BusinessAutomationKind is internal app-layer metadata used to suppress
|
||||
// recursive greeting/away automation for server-generated replies.
|
||||
BusinessAutomationKind BusinessAutomationKind
|
||||
// ReplyMarkup 是 bot 出站消息的 inline keyboard 快照(P3);普通用户发送恒 nil。
|
||||
ReplyMarkup *MessageReplyMarkup
|
||||
// RichMessage 是 Layer 227 富文本消息(richMessage)快照,可选;普通消息恒 nil。
|
||||
RichMessage *MessageRichMessage
|
||||
}
|
||||
|
||||
// SendPrivateTextResult 描述一次私聊文本发送的双端结果。
|
||||
|
|
@ -166,6 +268,26 @@ type SendPrivateTextResult struct {
|
|||
Duplicate bool
|
||||
}
|
||||
|
||||
// SetPrivateChatThemeRequest changes the shared theme token for a private dialog.
|
||||
type SetPrivateChatThemeRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
Emoticon string
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
RecipientBlocked bool
|
||||
}
|
||||
|
||||
// SetPrivateChatThemeResult describes the state change and optional service message.
|
||||
type SetPrivateChatThemeResult struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
Emoticon string
|
||||
Changed bool
|
||||
Send SendPrivateTextResult
|
||||
}
|
||||
|
||||
// SetPrivateMessageReactionsRequest replaces the current user's reactions for one private message.
|
||||
type SetPrivateMessageReactionsRequest struct {
|
||||
UserID int64
|
||||
|
|
@ -175,6 +297,9 @@ type SetPrivateMessageReactionsRequest struct {
|
|||
Big bool
|
||||
AddToRecent bool
|
||||
Date int
|
||||
// ReactionsPerUserMax 是 viewer 的每用户上限档位(premium 双档);
|
||||
// 0 表示未填,store 侧按默认档裁剪。
|
||||
ReactionsPerUserMax int
|
||||
}
|
||||
|
||||
// PrivateMessageReactionsRequest fetches reaction summaries for exact private message ids.
|
||||
|
|
@ -205,6 +330,7 @@ type ForwardPrivateMessagesRequest struct {
|
|||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
RecipientBlocked bool
|
||||
TTLPeriod int
|
||||
}
|
||||
|
||||
// ForwardPrivateMessagesResult 描述一次私聊转发的 owner 维度结果。
|
||||
|
|
@ -233,6 +359,7 @@ type ReadHistoryResult struct {
|
|||
Peer Peer
|
||||
MaxID int
|
||||
StillUnreadCount int
|
||||
ChannelPts int
|
||||
Changed bool
|
||||
InboxEvent UpdateEvent
|
||||
OutboxChanged bool
|
||||
|
|
@ -254,6 +381,10 @@ type ReadMessageContentsResult struct {
|
|||
OwnerUserID int64
|
||||
MessageIDs []int
|
||||
Event UpdateEvent
|
||||
// SenderEvents 是对端发送者的内容已读回执:reader 听完 voice/round 后,
|
||||
// 每个原 sender 收到一条 updateReadMessagesContents,messages 用 sender
|
||||
// 自己视角的 box id。
|
||||
SenderEvents []UpdateEvent
|
||||
}
|
||||
|
||||
// OutboxReadDateRequest 是 messages.getOutboxReadDate 查询。
|
||||
|
|
@ -263,16 +394,35 @@ type OutboxReadDateRequest struct {
|
|||
ID int
|
||||
}
|
||||
|
||||
// EditMessageRequest 是账号视角下编辑一条已发送私聊文本消息的命令。
|
||||
// EditMessageRequest 是账号视角下编辑一条已发送私聊消息的命令。
|
||||
// Media 非 nil 时整体替换消息媒体快照(当前唯一调用方是 live location 续报/停止,
|
||||
// rpc 层负责限定媒体种类);nil 表示纯文本编辑。
|
||||
type EditMessageRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
ID int
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
Media *MessageMedia
|
||||
EditDate int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
// SetReplyMarkup 置位时替换 reply_markup(ReplyMarkup 为 nil/空 = 清空键盘);
|
||||
// 未置位则保留原 markup。仅 bot 编辑自己消息时由 RPC 层置位(P3)。
|
||||
SetReplyMarkup bool
|
||||
ReplyMarkup *MessageReplyMarkup
|
||||
// ViaBotEditBotID 非零时允许对应 bot 编辑经由它发送的 inline 私聊消息。
|
||||
ViaBotEditBotID int64
|
||||
// AllowTodoParticipantMutation 允许 checklist 参与者在 others_can_* 授权下通过
|
||||
// edit 事件替换 todo 媒体快照。仅 RPC todo handler 设置;store 仍会限制为
|
||||
// todo->todo 且正文/entities/markup 不变,避免普通消息越权编辑。
|
||||
AllowTodoParticipantMutation bool
|
||||
// WebPageResolve 置位时为服务端内部「链接预览就地替换」:仅替换 media(不碰 body/
|
||||
// entities/edit_date,故不标记「已编辑」),生成 UpdateEventWebPage 而非 edit_message。
|
||||
// 幂等守卫:仅当目标当前 media 仍是 ID==ExpectedWebPageID 的 pending 链接预览才替换,
|
||||
// 否则返回 ErrMessageNotModified(消息已删/已改/已解析)。
|
||||
WebPageResolve bool
|
||||
ExpectedWebPageID int64
|
||||
}
|
||||
|
||||
// EditedMessageForUser 描述一次编辑对某个 owner 视角造成的影响。
|
||||
|
|
@ -315,9 +465,13 @@ type DeleteMessagesRequest struct {
|
|||
|
||||
// DeleteHistoryRequest 是账号视角下清空某个 peer 历史的命令。
|
||||
type DeleteHistoryRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
MaxID int
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
MaxID int
|
||||
// MinDate/MaxDate 是"按日期删除"的闭区间(unix 秒,0 表示不限);
|
||||
// 客户端先本地销毁再发请求,服务端静默忽略会造成删除复活。
|
||||
MinDate int
|
||||
MaxDate int
|
||||
JustClear bool
|
||||
Revoke bool
|
||||
Date int
|
||||
|
|
@ -358,3 +512,151 @@ func (r DeleteMessagesResult) Changed() bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// PinPrivateMessageRequest 是 messages.updatePinnedMessage 的私聊命令
|
||||
// (含 Saved Messages = self peer)。
|
||||
type PinPrivateMessageRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
MessageID int
|
||||
Pinned bool
|
||||
// PmOneside 仅置顶在本侧(官方私聊置顶框"同时为对方置顶"未勾选时),
|
||||
// 不向对端翻转、不生成服务消息。unpin 无此语义,恒双侧清除。
|
||||
PmOneside bool
|
||||
Silent bool
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
}
|
||||
|
||||
// PinnedMessagesForUser 描述置顶状态变化对某个 owner 视角的影响。
|
||||
type PinnedMessagesForUser struct {
|
||||
UserID int64
|
||||
Peer Peer
|
||||
MessageIDs []int
|
||||
Pinned bool
|
||||
Event UpdateEvent
|
||||
}
|
||||
|
||||
// MaxUnpinAllBatch 限制单次 unpinAllMessages 实际清除的置顶数量;
|
||||
// 超出部分由客户端按 affectedHistory.Offset>0 续发清除,单条
|
||||
// updatePinnedMessages 的 messages 向量随之有界。
|
||||
const MaxUnpinAllBatch = 1000
|
||||
|
||||
// PinPrivateMessageResult 描述私聊置顶/取消置顶的 owner 维度结果。
|
||||
// Updated 为空表示状态未变化(幂等 no-op,不烧 pts)。
|
||||
type PinPrivateMessageResult struct {
|
||||
OwnerUserID int64
|
||||
Updated []PinnedMessagesForUser
|
||||
// Offset 非 0 表示 unpinAll 还有剩余批次待清。
|
||||
Offset int
|
||||
}
|
||||
|
||||
// Self 返回当前请求账号的置顶结果。
|
||||
func (r PinPrivateMessageResult) Self() PinnedMessagesForUser {
|
||||
for _, item := range r.Updated {
|
||||
if item.UserID == r.OwnerUserID {
|
||||
return item
|
||||
}
|
||||
}
|
||||
return PinnedMessagesForUser{UserID: r.OwnerUserID}
|
||||
}
|
||||
|
||||
// Changed 表示本次操作是否实际翻转了任何 owner 视角的置顶状态。
|
||||
func (r PinPrivateMessageResult) Changed() bool {
|
||||
for _, item := range r.Updated {
|
||||
if len(item.MessageIDs) > 0 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// UnpinAllPrivateMessagesRequest 是 messages.unpinAllMessages 的私聊命令。
|
||||
type UnpinAllPrivateMessagesRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
}
|
||||
|
||||
// ScheduledMessage is a pending account-owned message that has not entered
|
||||
// normal peer history yet.
|
||||
type ScheduledMessage struct {
|
||||
OwnerUserID int64
|
||||
ID int
|
||||
Peer Peer
|
||||
RandomID int64
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
Media *MessageMedia
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
SendAs *Peer
|
||||
ScheduleDate int
|
||||
ScheduleRepeatPeriod int
|
||||
CreatedAt int
|
||||
UpdatedAt int
|
||||
State string
|
||||
SentMessageID int
|
||||
}
|
||||
|
||||
// ScheduledMessageList is a bounded scheduled queue page.
|
||||
type ScheduledMessageList struct {
|
||||
Messages []ScheduledMessage
|
||||
Count int
|
||||
Hash int64
|
||||
}
|
||||
|
||||
// ScheduleMessageRequest creates one scheduled message.
|
||||
type ScheduleMessageRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
RandomID int64
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
Media *MessageMedia
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
SendAs *Peer
|
||||
ScheduleDate int
|
||||
ScheduleRepeatPeriod int
|
||||
Date int
|
||||
}
|
||||
|
||||
// EditScheduledMessageRequest updates one pending scheduled message before it
|
||||
// enters normal history.
|
||||
type EditScheduledMessageRequest struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
ID int
|
||||
SetMessage bool
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
ScheduleDate int
|
||||
Date int
|
||||
}
|
||||
|
||||
// ScheduledMessageFilter selects scheduled messages for one owner/peer.
|
||||
type ScheduledMessageFilter struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
IDs []int
|
||||
Limit int
|
||||
Hash int64
|
||||
}
|
||||
|
||||
// ScheduledMessageClaim describes a due/manual scheduled dispatch claim.
|
||||
type ScheduledMessageClaim struct {
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
IDs []int
|
||||
Now int
|
||||
Limit int
|
||||
LeaseUntil int
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue