| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // Copyright (c) 2021 Tulir Asokan
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this
- // file, You can obtain one at http://mozilla.org/MPL/2.0/.
- package types
- import (
- "fmt"
- "time"
- )
- type AddressingMode string
- const (
- AddressingModePN AddressingMode = "pn"
- AddressingModeLID AddressingMode = "lid"
- )
- type BroadcastRecipient struct {
- LID JID
- PN JID
- }
- // MessageSource contains basic sender and chat information about a message.
- type MessageSource struct {
- Chat JID // The chat where the message was sent.
- Sender JID // The user who sent the message.
- IsFromMe bool // Whether the message was sent by the current user instead of someone else.
- IsGroup bool // Whether the chat is a group chat or broadcast list.
- AddressingMode AddressingMode // The addressing mode of the message (phone number or LID)
- SenderAlt JID // The alternative address of the user who sent the message
- RecipientAlt JID // The alternative address of the recipient of the message for DMs.
- // When sending a read receipt to a broadcast list message, the Chat is the broadcast list
- // and Sender is you, so this field contains the recipient of the read receipt.
- BroadcastListOwner JID
- BroadcastRecipients []BroadcastRecipient
- }
- // IsIncomingBroadcast returns true if the message was sent to a broadcast list instead of directly to the user.
- //
- // If this is true, it means the message shows up in the direct chat with the Sender.
- func (ms *MessageSource) IsIncomingBroadcast() bool {
- return (!ms.IsFromMe || !ms.BroadcastListOwner.IsEmpty()) && ms.Chat.IsBroadcastList()
- }
- // DeviceSentMeta contains metadata from messages sent by another one of the user's own devices.
- type DeviceSentMeta struct {
- DestinationJID string // The destination user. This should match the MessageInfo.Recipient field.
- Phash string
- }
- type EditAttribute string
- const (
- EditAttributeEmpty EditAttribute = ""
- EditAttributeMessageEdit EditAttribute = "1"
- EditAttributePinInChat EditAttribute = "2"
- EditAttributeAdminEdit EditAttribute = "3" // only used in newsletters
- EditAttributeSenderRevoke EditAttribute = "7"
- EditAttributeAdminRevoke EditAttribute = "8"
- )
- type BotEditType string
- const (
- EditTypeFirst BotEditType = "first"
- EditTypeInner BotEditType = "inner"
- EditTypeLast BotEditType = "last"
- )
- // MsgBotInfo targets <bot>
- type MsgBotInfo struct {
- EditType BotEditType
- EditTargetID MessageID
- EditSenderTimestampMS time.Time
- }
- // MsgMetaInfo targets <meta>
- type MsgMetaInfo struct {
- // Bot things
- TargetID MessageID
- TargetSender JID
- TargetChat JID
- DeprecatedLIDSession *bool
- ThreadMessageID MessageID
- ThreadMessageSenderJID JID
- }
- // MessageInfo contains metadata about an incoming message.
- type MessageInfo struct {
- MessageSource
- ID MessageID
- ServerID MessageServerID
- Type string
- PushName string
- Timestamp time.Time
- Category string
- Multicast bool
- MediaType string
- Edit EditAttribute
- MsgBotInfo MsgBotInfo
- MsgMetaInfo MsgMetaInfo
- VerifiedName *VerifiedName
- DeviceSentMeta *DeviceSentMeta // Metadata for direct messages sent from another one of the user's own devices.
- }
- // SourceString returns a log-friendly representation of who sent the message and where.
- func (ms *MessageSource) SourceString() string {
- if ms.Sender != ms.Chat {
- return fmt.Sprintf("%s in %s", ms.Sender, ms.Chat)
- } else {
- return ms.Chat.String()
- }
- }
|