offline-twitter/pkg/scraper/dm_chat_room.go
2024-12-21 09:15:02 -08:00

51 lines
1.9 KiB
Go

package scraper
type DMChatRoomID string
// A participant in a chat room.
//
// Most settings will only be fetched for the logged-in user (other chat members will just be "false" for
// everything). The "IsChatSettingsValid" flag indicates whether this is the case.
type DMChatParticipant struct {
DMChatRoomID DMChatRoomID `db:"chat_room_id"`
UserID UserID `db:"user_id"`
LastReadEventID DMMessageID `db:"last_read_event_id"`
IsChatSettingsValid bool `db:"is_chat_settings_valid"`
IsNotificationsDisabled bool `db:"is_notifications_disabled"`
IsMentionNotificationsDisabled bool `db:"is_mention_notifications_disabled"`
IsReadOnly bool `db:"is_read_only"`
IsTrusted bool `db:"is_trusted"`
IsMuted bool `db:"is_muted"`
Status string `db:"status"`
}
// A chat room. Stores a map of chat participants and a reference to the most recent message,
// for preview purposes.
type DMChatRoom struct {
ID DMChatRoomID `db:"id"`
Type string `db:"type"`
LastMessagedAt Timestamp `db:"last_messaged_at"` // Used for ordering the chats in the UI
IsNSFW bool `db:"is_nsfw"`
// GROUP_DM rooms
CreatedAt Timestamp `db:"created_at"`
CreatedByUserID UserID `db:"created_by_user_id"`
Name string `db:"name"`
AvatarImageRemoteURL string `db:"avatar_image_remote_url"`
AvatarImageLocalPath string `db:"avatar_image_local_path"`
LastMessageID DMMessageID `db:"last_message_id"` // Not stored, but used to generate preview
Participants map[UserID]DMChatParticipant
}
// TODO: view-layer
// - view helpers should go in a view layer
func (r DMChatRoom) GetParticipantIDs() []UserID {
ret := []UserID{}
for user_id := range r.Participants {
ret = append(ret, user_id)
}
return ret
}