fix: align private and channel update semantics
(cherry picked from commit c65f76f56278f74082c4fa792ed49104d5d33c38)
This commit is contained in:
parent
dce7b92772
commit
d84fa6e126
36 changed files with 1765 additions and 382 deletions
|
|
@ -347,6 +347,8 @@ type ChannelMessage struct {
|
|||
Reactions *ChannelMessageReactions
|
||||
Action *ChannelMessageAction
|
||||
Media *MessageMedia
|
||||
Mentioned bool
|
||||
MediaUnread bool
|
||||
Pts int
|
||||
Deleted bool
|
||||
}
|
||||
|
|
@ -827,6 +829,12 @@ type ChannelDifference struct {
|
|||
Timeout int
|
||||
}
|
||||
|
||||
// DirtyChannel identifies an active channel with channel-scoped updates after an account difference date.
|
||||
type DirtyChannel struct {
|
||||
ChannelID int64
|
||||
Pts int
|
||||
}
|
||||
|
||||
// CreateChannelRequest creates a broadcast channel or megagroup.
|
||||
type CreateChannelRequest struct {
|
||||
CreatorUserID int64
|
||||
|
|
|
|||
|
|
@ -20,6 +20,18 @@ type ContactList struct {
|
|||
Hash int64
|
||||
}
|
||||
|
||||
// BlockedContact is one owner-visible blocked peer.
|
||||
type BlockedContact struct {
|
||||
User User
|
||||
Date int
|
||||
}
|
||||
|
||||
// BlockedContactList describes contacts.getBlocked output.
|
||||
type BlockedContactList struct {
|
||||
Blocked []BlockedContact
|
||||
Count int
|
||||
}
|
||||
|
||||
// ContactInput 描述一次 owner 视角联系人写入。
|
||||
type ContactInput struct {
|
||||
ContactUserID int64
|
||||
|
|
|
|||
|
|
@ -73,24 +73,26 @@ type MessageEntity struct {
|
|||
|
||||
// Message 是账号视角下的一条私聊消息。
|
||||
type Message struct {
|
||||
ID int // 当前 owner 视角下的 message box id,暴露给 Telegram 客户端。
|
||||
UID int64 // 共享私聊消息主体 id,不暴露给客户端。
|
||||
RandomID int64
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
From Peer
|
||||
Date int
|
||||
EditDate int
|
||||
Out bool
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
Body string
|
||||
Entities []MessageEntity
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
Reactions *ChannelMessageReactions
|
||||
Pts int
|
||||
Media *MessageMedia
|
||||
ID int // 当前 owner 视角下的 message box id,暴露给 Telegram 客户端。
|
||||
UID int64 // 共享私聊消息主体 id,不暴露给客户端。
|
||||
RandomID int64
|
||||
OwnerUserID int64
|
||||
Peer Peer
|
||||
From Peer
|
||||
Date int
|
||||
EditDate int
|
||||
Out bool
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
Body string
|
||||
Entities []MessageEntity
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
Reactions *ChannelMessageReactions
|
||||
Pts int
|
||||
Media *MessageMedia
|
||||
MediaUnread bool
|
||||
ReactionUnread bool
|
||||
}
|
||||
|
||||
// MessageReply describes a message reply/thread header without depending on TL types.
|
||||
|
|
@ -139,19 +141,20 @@ type MessageFilter struct {
|
|||
|
||||
// SendPrivateTextRequest 是私聊文本/媒体发送命令。
|
||||
type SendPrivateTextRequest struct {
|
||||
SenderUserID int64
|
||||
RecipientUserID int64
|
||||
RandomID int64
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
Media *MessageMedia
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
SenderUserID int64
|
||||
RecipientUserID int64
|
||||
RandomID int64
|
||||
Message string
|
||||
Entities []MessageEntity
|
||||
Media *MessageMedia
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
ReplyTo *MessageReply
|
||||
Forward *MessageForward
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
RecipientBlocked bool
|
||||
}
|
||||
|
||||
// SendPrivateTextResult 描述一次私聊文本发送的双端结果。
|
||||
|
|
@ -189,18 +192,19 @@ type PrivateMessageReactionsResult struct {
|
|||
|
||||
// ForwardPrivateMessagesRequest 是私聊文本消息转发命令。
|
||||
type ForwardPrivateMessagesRequest struct {
|
||||
OwnerUserID int64
|
||||
FromPeer Peer
|
||||
ToUserID int64
|
||||
MessageIDs []int
|
||||
RandomIDs []int64
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
DropAuthor bool
|
||||
ReplyTo *MessageReply
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
OwnerUserID int64
|
||||
FromPeer Peer
|
||||
ToUserID int64
|
||||
MessageIDs []int
|
||||
RandomIDs []int64
|
||||
Silent bool
|
||||
NoForwards bool
|
||||
DropAuthor bool
|
||||
ReplyTo *MessageReply
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
RecipientBlocked bool
|
||||
}
|
||||
|
||||
// ForwardPrivateMessagesResult 描述一次私聊转发的 owner 维度结果。
|
||||
|
|
@ -238,14 +242,18 @@ type ReadHistoryResult struct {
|
|||
|
||||
// ReadMessageContentsRequest marks media/mention contents as read for exact owner-visible messages.
|
||||
type ReadMessageContentsRequest struct {
|
||||
OwnerUserID int64
|
||||
IDs []int
|
||||
OwnerUserID int64
|
||||
IDs []int
|
||||
Date int
|
||||
OriginAuthKeyID [8]byte
|
||||
OriginSessionID int64
|
||||
}
|
||||
|
||||
// ReadMessageContentsResult contains owner-visible message IDs that existed and can be synced.
|
||||
// ReadMessageContentsResult contains owner-visible message IDs whose content unread state changed.
|
||||
type ReadMessageContentsResult struct {
|
||||
OwnerUserID int64
|
||||
MessageIDs []int
|
||||
Event UpdateEvent
|
||||
}
|
||||
|
||||
// OutboxReadDateRequest 是 messages.getOutboxReadDate 查询。
|
||||
|
|
|
|||
|
|
@ -4,24 +4,25 @@ package domain
|
|||
type UpdateEventType string
|
||||
|
||||
const (
|
||||
UpdateEventNewMessage UpdateEventType = "new_message"
|
||||
UpdateEventReadHistoryInbox UpdateEventType = "read_history_inbox"
|
||||
UpdateEventReadHistoryOutbox UpdateEventType = "read_history_outbox"
|
||||
UpdateEventEditMessage UpdateEventType = "edit_message"
|
||||
UpdateEventMessageReactions UpdateEventType = "message_reactions"
|
||||
UpdateEventContactsReset UpdateEventType = "contacts_reset"
|
||||
UpdateEventDialogPinned UpdateEventType = "dialog_pinned"
|
||||
UpdateEventPinnedDialogs UpdateEventType = "pinned_dialogs"
|
||||
UpdateEventDialogUnreadMark UpdateEventType = "dialog_unread_mark"
|
||||
UpdateEventPeerSettings UpdateEventType = "peer_settings"
|
||||
UpdateEventDeleteMessages UpdateEventType = "delete_messages"
|
||||
UpdateEventDialogFilter UpdateEventType = "dialog_filter"
|
||||
UpdateEventDialogFilterOrder UpdateEventType = "dialog_filter_order"
|
||||
UpdateEventDialogFilters UpdateEventType = "dialog_filters"
|
||||
UpdateEventFolderPeers UpdateEventType = "folder_peers"
|
||||
UpdateEventChannelAvailable UpdateEventType = "channel_available_messages"
|
||||
UpdateEventChannelViewForum UpdateEventType = "channel_view_forum_as_messages"
|
||||
UpdateEventNoop UpdateEventType = "noop"
|
||||
UpdateEventNewMessage UpdateEventType = "new_message"
|
||||
UpdateEventReadHistoryInbox UpdateEventType = "read_history_inbox"
|
||||
UpdateEventReadHistoryOutbox UpdateEventType = "read_history_outbox"
|
||||
UpdateEventReadMessageContents UpdateEventType = "read_message_contents"
|
||||
UpdateEventEditMessage UpdateEventType = "edit_message"
|
||||
UpdateEventMessageReactions UpdateEventType = "message_reactions"
|
||||
UpdateEventContactsReset UpdateEventType = "contacts_reset"
|
||||
UpdateEventDialogPinned UpdateEventType = "dialog_pinned"
|
||||
UpdateEventPinnedDialogs UpdateEventType = "pinned_dialogs"
|
||||
UpdateEventDialogUnreadMark UpdateEventType = "dialog_unread_mark"
|
||||
UpdateEventPeerSettings UpdateEventType = "peer_settings"
|
||||
UpdateEventDeleteMessages UpdateEventType = "delete_messages"
|
||||
UpdateEventDialogFilter UpdateEventType = "dialog_filter"
|
||||
UpdateEventDialogFilterOrder UpdateEventType = "dialog_filter_order"
|
||||
UpdateEventDialogFilters UpdateEventType = "dialog_filters"
|
||||
UpdateEventFolderPeers UpdateEventType = "folder_peers"
|
||||
UpdateEventChannelAvailable UpdateEventType = "channel_available_messages"
|
||||
UpdateEventChannelViewForum UpdateEventType = "channel_view_forum_as_messages"
|
||||
UpdateEventNoop UpdateEventType = "noop"
|
||||
)
|
||||
|
||||
// UpdateEvent 是账号视角的增量事件,按 user_id + pts 顺序持久化。
|
||||
|
|
@ -50,9 +51,16 @@ type UpdateEvent struct {
|
|||
|
||||
// UpdateDifference 是 updates.getDifference 的业务层结果。
|
||||
type UpdateDifference struct {
|
||||
State UpdateState
|
||||
Events []UpdateEvent
|
||||
State UpdateState
|
||||
Events []UpdateEvent
|
||||
ChannelNudges []ChannelDifferenceNudge
|
||||
// Partial 为 true 表示连续事件被 limit 截断、后面还有(映射 updates.differenceSlice,
|
||||
// 客户端据 State 继续翻页);false 表示已到当前连续末尾(updates.difference)。
|
||||
Partial bool
|
||||
}
|
||||
|
||||
// ChannelDifferenceNudge is a computed account-level hint that a channel diff is dirty.
|
||||
type ChannelDifferenceNudge struct {
|
||||
ChannelID int64
|
||||
Pts int
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue