477 lines
30 KiB
Go
477 lines
30 KiB
Go
package slack
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"net/url"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type UserPrefsCarrier struct {
|
|
SlackResponse
|
|
UserPrefs *UserPrefs `json:"prefs"`
|
|
}
|
|
|
|
// UserPrefs carries a bunch of user settings including some unknown types
|
|
type UserPrefs struct {
|
|
UserColors string `json:"user_colors,omitempty"`
|
|
ColorNamesInList bool `json:"color_names_in_list,omitempty"`
|
|
// Keyboard UnknownType `json:"keyboard"`
|
|
EmailAlerts string `json:"email_alerts,omitempty"`
|
|
EmailAlertsSleepUntil int `json:"email_alerts_sleep_until,omitempty"`
|
|
EmailTips bool `json:"email_tips,omitempty"`
|
|
EmailWeekly bool `json:"email_weekly,omitempty"`
|
|
EmailOffers bool `json:"email_offers,omitempty"`
|
|
EmailResearch bool `json:"email_research,omitempty"`
|
|
EmailDeveloper bool `json:"email_developer,omitempty"`
|
|
WelcomeMessageHidden bool `json:"welcome_message_hidden,omitempty"`
|
|
SearchSort string `json:"search_sort,omitempty"`
|
|
SearchFileSort string `json:"search_file_sort,omitempty"`
|
|
SearchChannelSort string `json:"search_channel_sort,omitempty"`
|
|
SearchPeopleSort string `json:"search_people_sort,omitempty"`
|
|
ExpandInlineImages bool `json:"expand_inline_images,omitempty"`
|
|
ExpandInternalInlineImages bool `json:"expand_internal_inline_images,omitempty"`
|
|
ExpandSnippets bool `json:"expand_snippets,omitempty"`
|
|
PostsFormattingGuide bool `json:"posts_formatting_guide,omitempty"`
|
|
SeenWelcome2 bool `json:"seen_welcome_2,omitempty"`
|
|
SeenSSBPrompt bool `json:"seen_ssb_prompt,omitempty"`
|
|
SpacesNewXpBannerDismissed bool `json:"spaces_new_xp_banner_dismissed,omitempty"`
|
|
SearchOnlyMyChannels bool `json:"search_only_my_channels,omitempty"`
|
|
SearchOnlyCurrentTeam bool `json:"search_only_current_team,omitempty"`
|
|
SearchHideMyChannels bool `json:"search_hide_my_channels,omitempty"`
|
|
SearchOnlyShowOnline bool `json:"search_only_show_online,omitempty"`
|
|
SearchHideDeactivatedUsers bool `json:"search_hide_deactivated_users,omitempty"`
|
|
EmojiMode string `json:"emoji_mode,omitempty"`
|
|
EmojiUse string `json:"emoji_use,omitempty"`
|
|
HasInvited bool `json:"has_invited,omitempty"`
|
|
HasUploaded bool `json:"has_uploaded,omitempty"`
|
|
HasCreatedChannel bool `json:"has_created_channel,omitempty"`
|
|
HasSearched bool `json:"has_searched,omitempty"`
|
|
SearchExcludeChannels string `json:"search_exclude_channels,omitempty"`
|
|
MessagesTheme string `json:"messages_theme,omitempty"`
|
|
WebappSpellcheck bool `json:"webapp_spellcheck,omitempty"`
|
|
NoJoinedOverlays bool `json:"no_joined_overlays,omitempty"`
|
|
NoCreatedOverlays bool `json:"no_created_overlays,omitempty"`
|
|
DropboxEnabled bool `json:"dropbox_enabled,omitempty"`
|
|
SeenDomainInviteReminder bool `json:"seen_domain_invite_reminder,omitempty"`
|
|
SeenMemberInviteReminder bool `json:"seen_member_invite_reminder,omitempty"`
|
|
MuteSounds bool `json:"mute_sounds,omitempty"`
|
|
ArrowHistory bool `json:"arrow_history,omitempty"`
|
|
TabUIReturnSelects bool `json:"tab_ui_return_selects,omitempty"`
|
|
ObeyInlineImgLimit bool `json:"obey_inline_img_limit,omitempty"`
|
|
RequireAt bool `json:"require_at,omitempty"`
|
|
SsbSpaceWindow string `json:"ssb_space_window,omitempty"`
|
|
MacSsbBounce string `json:"mac_ssb_bounce,omitempty"`
|
|
MacSsbBullet bool `json:"mac_ssb_bullet,omitempty"`
|
|
ExpandNonMediaAttachments bool `json:"expand_non_media_attachments,omitempty"`
|
|
ShowTyping bool `json:"show_typing,omitempty"`
|
|
PagekeysHandled bool `json:"pagekeys_handled,omitempty"`
|
|
LastSnippetType string `json:"last_snippet_type,omitempty"`
|
|
DisplayRealNamesOverride int `json:"display_real_names_override,omitempty"`
|
|
DisplayDisplayNames bool `json:"display_display_names,omitempty"`
|
|
Time24 bool `json:"time24,omitempty"`
|
|
EnterIsSpecialInTbt bool `json:"enter_is_special_in_tbt,omitempty"`
|
|
MsgInputSendBtn bool `json:"msg_input_send_btn,omitempty"`
|
|
MsgInputSendBtnAutoSet bool `json:"msg_input_send_btn_auto_set,omitempty"`
|
|
MsgInputStickyComposer bool `json:"msg_input_sticky_composer,omitempty"`
|
|
GraphicEmoticons bool `json:"graphic_emoticons,omitempty"`
|
|
ConvertEmoticons bool `json:"convert_emoticons,omitempty"`
|
|
SsEmojis bool `json:"ss_emojis,omitempty"`
|
|
SeenOnboardingStart bool `json:"seen_onboarding_start,omitempty"`
|
|
OnboardingCancelled bool `json:"onboarding_cancelled,omitempty"`
|
|
SeenOnboardingSlackbotConversation bool `json:"seen_onboarding_slackbot_conversation,omitempty"`
|
|
SeenOnboardingChannels bool `json:"seen_onboarding_channels,omitempty"`
|
|
SeenOnboardingDirectMessages bool `json:"seen_onboarding_direct_messages,omitempty"`
|
|
SeenOnboardingInvites bool `json:"seen_onboarding_invites,omitempty"`
|
|
SeenOnboardingSearch bool `json:"seen_onboarding_search,omitempty"`
|
|
SeenOnboardingRecentMentions bool `json:"seen_onboarding_recent_mentions,omitempty"`
|
|
SeenOnboardingStarredItems bool `json:"seen_onboarding_starred_items,omitempty"`
|
|
SeenOnboardingPrivateGroups bool `json:"seen_onboarding_private_groups,omitempty"`
|
|
SeenOnboardingBanner bool `json:"seen_onboarding_banner,omitempty"`
|
|
OnboardingSlackbotConversationStep int `json:"onboarding_slackbot_conversation_step,omitempty"`
|
|
SetTzAutomatically bool `json:"set_tz_automatically,omitempty"`
|
|
SuppressLinkWarning bool `json:"suppress_link_warning,omitempty"`
|
|
DndEnabled bool `json:"dnd_enabled,omitempty"`
|
|
DndStartHour string `json:"dnd_start_hour,omitempty"`
|
|
DndEndHour string `json:"dnd_end_hour,omitempty"`
|
|
DndBeforeMonday string `json:"dnd_before_monday,omitempty"`
|
|
DndAfterMonday string `json:"dnd_after_monday,omitempty"`
|
|
DndEnabledMonday string `json:"dnd_enabled_monday,omitempty"`
|
|
DndBeforeTuesday string `json:"dnd_before_tuesday,omitempty"`
|
|
DndAfterTuesday string `json:"dnd_after_tuesday,omitempty"`
|
|
DndEnabledTuesday string `json:"dnd_enabled_tuesday,omitempty"`
|
|
DndBeforeWednesday string `json:"dnd_before_wednesday,omitempty"`
|
|
DndAfterWednesday string `json:"dnd_after_wednesday,omitempty"`
|
|
DndEnabledWednesday string `json:"dnd_enabled_wednesday,omitempty"`
|
|
DndBeforeThursday string `json:"dnd_before_thursday,omitempty"`
|
|
DndAfterThursday string `json:"dnd_after_thursday,omitempty"`
|
|
DndEnabledThursday string `json:"dnd_enabled_thursday,omitempty"`
|
|
DndBeforeFriday string `json:"dnd_before_friday,omitempty"`
|
|
DndAfterFriday string `json:"dnd_after_friday,omitempty"`
|
|
DndEnabledFriday string `json:"dnd_enabled_friday,omitempty"`
|
|
DndBeforeSaturday string `json:"dnd_before_saturday,omitempty"`
|
|
DndAfterSaturday string `json:"dnd_after_saturday,omitempty"`
|
|
DndEnabledSaturday string `json:"dnd_enabled_saturday,omitempty"`
|
|
DndBeforeSunday string `json:"dnd_before_sunday,omitempty"`
|
|
DndAfterSunday string `json:"dnd_after_sunday,omitempty"`
|
|
DndEnabledSunday string `json:"dnd_enabled_sunday,omitempty"`
|
|
DndDays string `json:"dnd_days,omitempty"`
|
|
DndCustomNewBadgeSeen bool `json:"dnd_custom_new_badge_seen,omitempty"`
|
|
DndNotificationScheduleNewBadgeSeen bool `json:"dnd_notification_schedule_new_badge_seen,omitempty"`
|
|
// UnreadCollapsedChannels unknownType `json:"unread_collapsed_channels,omitempty"`
|
|
SidebarBehavior string `json:"sidebar_behavior,omitempty"`
|
|
ChannelSort string `json:"channel_sort,omitempty"`
|
|
SeparatePrivateChannels bool `json:"separate_private_channels,omitempty"`
|
|
SeparateSharedChannels bool `json:"separate_shared_channels,omitempty"`
|
|
SidebarTheme string `json:"sidebar_theme,omitempty"`
|
|
SidebarThemeCustomValues string `json:"sidebar_theme_custom_values,omitempty"`
|
|
NoInvitesWidgetInSidebar bool `json:"no_invites_widget_in_sidebar,omitempty"`
|
|
NoOmniboxInChannels bool `json:"no_omnibox_in_channels,omitempty"`
|
|
|
|
KKeyOmniboxAutoHideCount int `json:"k_key_omnibox_auto_hide_count,omitempty"`
|
|
ShowSidebarQuickswitcherButton bool `json:"show_sidebar_quickswitcher_button,omitempty"`
|
|
EntOrgWideChannelsSidebar bool `json:"ent_org_wide_channels_sidebar,omitempty"`
|
|
MarkMsgsReadImmediately bool `json:"mark_msgs_read_immediately,omitempty"`
|
|
StartScrollAtOldest bool `json:"start_scroll_at_oldest,omitempty"`
|
|
SnippetEditorWrapLongLines bool `json:"snippet_editor_wrap_long_lines,omitempty"`
|
|
LsDisabled bool `json:"ls_disabled,omitempty"`
|
|
FKeySearch bool `json:"f_key_search,omitempty"`
|
|
KKeyOmnibox bool `json:"k_key_omnibox,omitempty"`
|
|
PromptedForEmailDisabling bool `json:"prompted_for_email_disabling,omitempty"`
|
|
NoMacelectronBanner bool `json:"no_macelectron_banner,omitempty"`
|
|
NoMacssb1Banner bool `json:"no_macssb1_banner,omitempty"`
|
|
NoMacssb2Banner bool `json:"no_macssb2_banner,omitempty"`
|
|
NoWinssb1Banner bool `json:"no_winssb1_banner,omitempty"`
|
|
HideUserGroupInfoPane bool `json:"hide_user_group_info_pane,omitempty"`
|
|
MentionsExcludeAtUserGroups bool `json:"mentions_exclude_at_user_groups,omitempty"`
|
|
MentionsExcludeReactions bool `json:"mentions_exclude_reactions,omitempty"`
|
|
PrivacyPolicySeen bool `json:"privacy_policy_seen,omitempty"`
|
|
EnterpriseMigrationSeen bool `json:"enterprise_migration_seen,omitempty"`
|
|
LastTosAcknowledged string `json:"last_tos_acknowledged,omitempty"`
|
|
SearchExcludeBots bool `json:"search_exclude_bots,omitempty"`
|
|
LoadLato2 bool `json:"load_lato_2,omitempty"`
|
|
FullerTimestamps bool `json:"fuller_timestamps,omitempty"`
|
|
LastSeenAtChannelWarning int `json:"last_seen_at_channel_warning,omitempty"`
|
|
EmojiAutocompleteBig bool `json:"emoji_autocomplete_big,omitempty"`
|
|
TwoFactorAuthEnabled bool `json:"two_factor_auth_enabled,omitempty"`
|
|
// TwoFactorType unknownType `json:"two_factor_type,omitempty"`
|
|
// TwoFactorBackupType unknownType `json:"two_factor_backup_type,omitempty"`
|
|
HideHexSwatch bool `json:"hide_hex_swatch,omitempty"`
|
|
ShowJumperScores bool `json:"show_jumper_scores,omitempty"`
|
|
EnterpriseMdmCustomMsg string `json:"enterprise_mdm_custom_msg,omitempty"`
|
|
// EnterpriseExcludedAppTeams unknownType `json:"enterprise_excluded_app_teams,omitempty"`
|
|
ClientLogsPri string `json:"client_logs_pri,omitempty"`
|
|
FlannelServerPool string `json:"flannel_server_pool,omitempty"`
|
|
MentionsExcludeAtChannels bool `json:"mentions_exclude_at_channels,omitempty"`
|
|
ConfirmClearAllUnreads bool `json:"confirm_clear_all_unreads,omitempty"`
|
|
ConfirmUserMarkedAway bool `json:"confirm_user_marked_away,omitempty"`
|
|
BoxEnabled bool `json:"box_enabled,omitempty"`
|
|
SeenSingleEmojiMsg bool `json:"seen_single_emoji_msg,omitempty"`
|
|
ConfirmShCallStart bool `json:"confirm_sh_call_start,omitempty"`
|
|
PreferredSkinTone string `json:"preferred_skin_tone,omitempty"`
|
|
ShowAllSkinTones bool `json:"show_all_skin_tones,omitempty"`
|
|
WhatsNewRead int `json:"whats_new_read,omitempty"`
|
|
// FrecencyJumper unknownType `json:"frecency_jumper,omitempty"`
|
|
FrecencyEntJumper string `json:"frecency_ent_jumper,omitempty"`
|
|
FrecencyEntJumperBackup string `json:"frecency_ent_jumper_backup,omitempty"`
|
|
Jumbomoji bool `json:"jumbomoji,omitempty"`
|
|
NewxpSeenLastMessage int `json:"newxp_seen_last_message,omitempty"`
|
|
ShowMemoryInstrument bool `json:"show_memory_instrument,omitempty"`
|
|
EnableUnreadView bool `json:"enable_unread_view,omitempty"`
|
|
SeenUnreadViewCoachmark bool `json:"seen_unread_view_coachmark,omitempty"`
|
|
EnableReactEmojiPicker bool `json:"enable_react_emoji_picker,omitempty"`
|
|
SeenCustomStatusBadge bool `json:"seen_custom_status_badge,omitempty"`
|
|
SeenCustomStatusCallout bool `json:"seen_custom_status_callout,omitempty"`
|
|
SeenCustomStatusExpirationBadge bool `json:"seen_custom_status_expiration_badge,omitempty"`
|
|
UsedCustomStatusKbShortcut bool `json:"used_custom_status_kb_shortcut,omitempty"`
|
|
SeenGuestAdminSlackbotAnnouncement bool `json:"seen_guest_admin_slackbot_announcement,omitempty"`
|
|
SeenThreadsNotificationBanner bool `json:"seen_threads_notification_banner,omitempty"`
|
|
SeenNameTaggingCoachmark bool `json:"seen_name_tagging_coachmark,omitempty"`
|
|
AllUnreadsSortOrder string `json:"all_unreads_sort_order,omitempty"`
|
|
Locale string `json:"locale,omitempty"`
|
|
SeenIntlChannelNamesCoachmark bool `json:"seen_intl_channel_names_coachmark,omitempty"`
|
|
SeenP2LocaleChangeMessage int `json:"seen_p2_locale_change_message,omitempty"`
|
|
SeenLocaleChangeMessage int `json:"seen_locale_change_message,omitempty"`
|
|
SeenJapaneseLocaleChangeMessage bool `json:"seen_japanese_locale_change_message,omitempty"`
|
|
SeenSharedChannelsCoachmark bool `json:"seen_shared_channels_coachmark,omitempty"`
|
|
SeenSharedChannelsOptInChangeMessage bool `json:"seen_shared_channels_opt_in_change_message,omitempty"`
|
|
HasRecentlySharedaChannel bool `json:"has_recently_shared_a_channel,omitempty"`
|
|
SeenChannelBrowserAdminCoachmark bool `json:"seen_channel_browser_admin_coachmark,omitempty"`
|
|
SeenAdministrationMenu bool `json:"seen_administration_menu,omitempty"`
|
|
SeenDraftsSectionCoachmark bool `json:"seen_drafts_section_coachmark,omitempty"`
|
|
SeenEmojiUpdateOverlayCoachmark bool `json:"seen_emoji_update_overlay_coachmark,omitempty"`
|
|
SeenSonicDeluxeToast int `json:"seen_sonic_deluxe_toast,omitempty"`
|
|
SeenWysiwygDeluxeToast bool `json:"seen_wysiwyg_deluxe_toast,omitempty"`
|
|
SeenMarkdownPasteToast int `json:"seen_markdown_paste_toast,omitempty"`
|
|
SeenMarkdownPasteShortcut int `json:"seen_markdown_paste_shortcut,omitempty"`
|
|
SeenIaEducation bool `json:"seen_ia_education,omitempty"`
|
|
PlainTextMode bool `json:"plain_text_mode,omitempty"`
|
|
ShowSharedChannelsEducationBanner bool `json:"show_shared_channels_education_banner,omitempty"`
|
|
AllowCallsToSetCurrentStatus bool `json:"allow_calls_to_set_current_status,omitempty"`
|
|
InInteractiveMasMigrationFlow bool `json:"in_interactive_mas_migration_flow,omitempty"`
|
|
SunsetInteractiveMessageViews int `json:"sunset_interactive_message_views,omitempty"`
|
|
ShdepPromoCodeSubmitted bool `json:"shdep_promo_code_submitted,omitempty"`
|
|
SeenShdepSlackbotMessage bool `json:"seen_shdep_slackbot_message,omitempty"`
|
|
SeenCallsInteractiveCoachmark bool `json:"seen_calls_interactive_coachmark,omitempty"`
|
|
AllowCmdTabIss bool `json:"allow_cmd_tab_iss,omitempty"`
|
|
SeenWorkflowBuilderDeluxeToast bool `json:"seen_workflow_builder_deluxe_toast,omitempty"`
|
|
WorkflowBuilderIntroModalClickedThrough bool `json:"workflow_builder_intro_modal_clicked_through,omitempty"`
|
|
// WorkflowBuilderCoachmarks unknownType `json:"workflow_builder_coachmarks,omitempty"`
|
|
SeenGdriveCoachmark bool `json:"seen_gdrive_coachmark,omitempty"`
|
|
OverloadedMessageEnabled bool `json:"overloaded_message_enabled,omitempty"`
|
|
SeenHighlightsCoachmark bool `json:"seen_highlights_coachmark,omitempty"`
|
|
SeenHighlightsArrowsCoachmark bool `json:"seen_highlights_arrows_coachmark,omitempty"`
|
|
SeenHighlightsWarmWelcome bool `json:"seen_highlights_warm_welcome,omitempty"`
|
|
SeenNewSearchUi bool `json:"seen_new_search_ui,omitempty"`
|
|
SeenChannelSearch bool `json:"seen_channel_search,omitempty"`
|
|
SeenPeopleSearch bool `json:"seen_people_search,omitempty"`
|
|
SeenPeopleSearchCount int `json:"seen_people_search_count,omitempty"`
|
|
DismissedScrollSearchTooltipCount int `json:"dismissed_scroll_search_tooltip_count,omitempty"`
|
|
LastDismissedScrollSearchTooltipTimestamp int `json:"last_dismissed_scroll_search_tooltip_timestamp,omitempty"`
|
|
HasUsedQuickswitcherShortcut bool `json:"has_used_quickswitcher_shortcut,omitempty"`
|
|
SeenQuickswitcherShortcutTipCount int `json:"seen_quickswitcher_shortcut_tip_count,omitempty"`
|
|
BrowsersDismissedChannelsLowResultsEducation bool `json:"browsers_dismissed_channels_low_results_education,omitempty"`
|
|
BrowsersSeenInitialChannelsEducation bool `json:"browsers_seen_initial_channels_education,omitempty"`
|
|
BrowsersDismissedPeopleLowResultsEducation bool `json:"browsers_dismissed_people_low_results_education,omitempty"`
|
|
BrowsersSeenInitialPeopleEducation bool `json:"browsers_seen_initial_people_education,omitempty"`
|
|
BrowsersDismissedUserGroupsLowResultsEducation bool `json:"browsers_dismissed_user_groups_low_results_education,omitempty"`
|
|
BrowsersSeenInitialUserGroupsEducation bool `json:"browsers_seen_initial_user_groups_education,omitempty"`
|
|
BrowsersDismissedFilesLowResultsEducation bool `json:"browsers_dismissed_files_low_results_education,omitempty"`
|
|
BrowsersSeenInitialFilesEducation bool `json:"browsers_seen_initial_files_education,omitempty"`
|
|
A11yAnimations bool `json:"a11y_animations,omitempty"`
|
|
SeenKeyboardShortcutsCoachmark bool `json:"seen_keyboard_shortcuts_coachmark,omitempty"`
|
|
NeedsInitialPasswordSet bool `json:"needs_initial_password_set,omitempty"`
|
|
LessonsEnabled bool `json:"lessons_enabled,omitempty"`
|
|
TractorEnabled bool `json:"tractor_enabled,omitempty"`
|
|
TractorExperimentGroup string `json:"tractor_experiment_group,omitempty"`
|
|
OpenedSlackbotDm bool `json:"opened_slackbot_dm,omitempty"`
|
|
NewxpSuggestedChannels string `json:"newxp_suggested_channels,omitempty"`
|
|
OnboardingComplete bool `json:"onboarding_complete,omitempty"`
|
|
WelcomePlaceState string `json:"welcome_place_state,omitempty"`
|
|
// OnboardingRoleApps unknownType `json:"onboarding_role_apps,omitempty"`
|
|
HasReceivedThreadedMessage bool `json:"has_received_threaded_message,omitempty"`
|
|
SendYourFirstMessageBannerEnabled bool `json:"send_your_first_message_banner_enabled,omitempty"`
|
|
WhocanseethisDmMpdmBadge bool `json:"whocanseethis_dm_mpdm_badge,omitempty"`
|
|
HighlightWords string `json:"highlight_words,omitempty"`
|
|
ThreadsEverything bool `json:"threads_everything,omitempty"`
|
|
NoTextInNotifications bool `json:"no_text_in_notifications,omitempty"`
|
|
PushShowPreview bool `json:"push_show_preview,omitempty"`
|
|
GrowlsEnabled bool `json:"growls_enabled,omitempty"`
|
|
AllChannelsLoud bool `json:"all_channels_loud,omitempty"`
|
|
PushDmAlert bool `json:"push_dm_alert,omitempty"`
|
|
PushMentionAlert bool `json:"push_mention_alert,omitempty"`
|
|
PushEverything bool `json:"push_everything,omitempty"`
|
|
PushIdleWait int `json:"push_idle_wait,omitempty"`
|
|
PushSound string `json:"push_sound,omitempty"`
|
|
NewMsgSnd string `json:"new_msg_snd,omitempty"`
|
|
PushLoudChannels string `json:"push_loud_channels,omitempty"`
|
|
PushMentionChannels string `json:"push_mention_channels,omitempty"`
|
|
PushLoudChannelsSet string `json:"push_loud_channels_set,omitempty"`
|
|
LoudChannels string `json:"loud_channels,omitempty"`
|
|
NeverChannels string `json:"never_channels,omitempty"`
|
|
LoudChannelsSet string `json:"loud_channels_set,omitempty"`
|
|
AtChannelSuppressedChannels string `json:"at_channel_suppressed_channels,omitempty"`
|
|
PushAtChannelSuppressedChannels string `json:"push_at_channel_suppressed_channels,omitempty"`
|
|
MutedChannels string `json:"muted_channels,omitempty"`
|
|
// AllNotificationsPrefs unknownType `json:"all_notifications_prefs,omitempty"`
|
|
GrowthMsgLimitApproachingCtaCount int `json:"growth_msg_limit_approaching_cta_count,omitempty"`
|
|
GrowthMsgLimitApproachingCtaTs int `json:"growth_msg_limit_approaching_cta_ts,omitempty"`
|
|
GrowthMsgLimitReachedCtaCount int `json:"growth_msg_limit_reached_cta_count,omitempty"`
|
|
GrowthMsgLimitReachedCtaLastTs int `json:"growth_msg_limit_reached_cta_last_ts,omitempty"`
|
|
GrowthMsgLimitLongReachedCtaCount int `json:"growth_msg_limit_long_reached_cta_count,omitempty"`
|
|
GrowthMsgLimitLongReachedCtaLastTs int `json:"growth_msg_limit_long_reached_cta_last_ts,omitempty"`
|
|
GrowthMsgLimitSixtyDayBannerCtaCount int `json:"growth_msg_limit_sixty_day_banner_cta_count,omitempty"`
|
|
GrowthMsgLimitSixtyDayBannerCtaLastTs int `json:"growth_msg_limit_sixty_day_banner_cta_last_ts,omitempty"`
|
|
// GrowthAllBannersPrefs unknownType `json:"growth_all_banners_prefs,omitempty"`
|
|
AnalyticsUpsellCoachmarkSeen bool `json:"analytics_upsell_coachmark_seen,omitempty"`
|
|
SeenAppSpaceCoachmark bool `json:"seen_app_space_coachmark,omitempty"`
|
|
SeenAppSpaceTutorial bool `json:"seen_app_space_tutorial,omitempty"`
|
|
DismissedAppLauncherWelcome bool `json:"dismissed_app_launcher_welcome,omitempty"`
|
|
DismissedAppLauncherLimit bool `json:"dismissed_app_launcher_limit,omitempty"`
|
|
Purchaser bool `json:"purchaser,omitempty"`
|
|
ShowEntOnboarding bool `json:"show_ent_onboarding,omitempty"`
|
|
FoldersEnabled bool `json:"folders_enabled,omitempty"`
|
|
// FolderData unknownType `json:"folder_data,omitempty"`
|
|
SeenCorporateExportAlert bool `json:"seen_corporate_export_alert,omitempty"`
|
|
ShowAutocompleteHelp int `json:"show_autocomplete_help,omitempty"`
|
|
DeprecationToastLastSeen int `json:"deprecation_toast_last_seen,omitempty"`
|
|
DeprecationModalLastSeen int `json:"deprecation_modal_last_seen,omitempty"`
|
|
Iap1Lab int `json:"iap1_lab,omitempty"`
|
|
IaTopNavTheme string `json:"ia_top_nav_theme,omitempty"`
|
|
IaPlatformActionsLab int `json:"ia_platform_actions_lab,omitempty"`
|
|
ActivityView string `json:"activity_view,omitempty"`
|
|
FailoverProxyCheckCompleted int `json:"failover_proxy_check_completed,omitempty"`
|
|
EdgeUploadProxyCheckCompleted int `json:"edge_upload_proxy_check_completed,omitempty"`
|
|
AppSubdomainCheckCompleted int `json:"app_subdomain_check_completed,omitempty"`
|
|
AddAppsPromptDismissed bool `json:"add_apps_prompt_dismissed,omitempty"`
|
|
AddChannelPromptDismissed bool `json:"add_channel_prompt_dismissed,omitempty"`
|
|
ChannelSidebarHideInvite bool `json:"channel_sidebar_hide_invite,omitempty"`
|
|
InProdSurveysEnabled bool `json:"in_prod_surveys_enabled,omitempty"`
|
|
DismissedInstalledAppDmSuggestions string `json:"dismissed_installed_app_dm_suggestions,omitempty"`
|
|
SeenContextualMessageShortcutsModal bool `json:"seen_contextual_message_shortcuts_modal,omitempty"`
|
|
SeenMessageNavigationEducationalToast bool `json:"seen_message_navigation_educational_toast,omitempty"`
|
|
ContextualMessageShortcutsModalWasSeen bool `json:"contextual_message_shortcuts_modal_was_seen,omitempty"`
|
|
MessageNavigationToastWasSeen bool `json:"message_navigation_toast_was_seen,omitempty"`
|
|
UpToBrowseKbShortcut bool `json:"up_to_browse_kb_shortcut,omitempty"`
|
|
ChannelSections string `json:"channel_sections,omitempty"`
|
|
TZ string `json:"tz,omitempty"`
|
|
}
|
|
|
|
func (api *Client) GetUserPrefs() (*UserPrefsCarrier, error) {
|
|
return api.GetUserPrefsContext(context.Background())
|
|
}
|
|
|
|
func (api *Client) GetUserPrefsContext(ctx context.Context) (*UserPrefsCarrier, error) {
|
|
response := UserPrefsCarrier{}
|
|
|
|
err := api.getMethod(ctx, "users.prefs.get", api.token, url.Values{}, &response)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &response, response.Err()
|
|
}
|
|
|
|
func (api *Client) MuteChat(channelID string) (*UserPrefsCarrier, error) {
|
|
prefs, err := api.GetUserPrefs()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
chnls := strings.Split(prefs.UserPrefs.MutedChannels, ",")
|
|
for _, chn := range chnls {
|
|
if chn == channelID {
|
|
return nil, nil // noop
|
|
}
|
|
}
|
|
newChnls := prefs.UserPrefs.MutedChannels + "," + channelID
|
|
values := url.Values{"token": {api.token}, "muted_channels": {newChnls}, "reason": {"update-muted-channels"}}
|
|
response := UserPrefsCarrier{}
|
|
|
|
err = api.postMethod(context.Background(), "users.prefs.set", values, &response)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &response, response.Err()
|
|
}
|
|
|
|
func (api *Client) UnMuteChat(channelID string) (*UserPrefsCarrier, error) {
|
|
prefs, err := api.GetUserPrefs()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
chnls := strings.Split(prefs.UserPrefs.MutedChannels, ",")
|
|
newChnls := make([]string, len(chnls)-1)
|
|
for i, chn := range chnls {
|
|
if chn == channelID {
|
|
return nil, nil // noop
|
|
}
|
|
newChnls[i] = chn
|
|
}
|
|
values := url.Values{"token": {api.token}, "muted_channels": {strings.Join(newChnls, ",")}, "reason": {"update-muted-channels"}}
|
|
response := UserPrefsCarrier{}
|
|
|
|
err = api.postMethod(context.Background(), "users.prefs.set", values, &response)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &response, response.Err()
|
|
}
|
|
|
|
// UserDetails contains user details coming in the initial response from StartRTM
|
|
type UserDetails struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Created JSONTime `json:"created"`
|
|
ManualPresence string `json:"manual_presence"`
|
|
Prefs UserPrefs `json:"prefs"`
|
|
}
|
|
|
|
// JSONTime exists so that we can have a String method converting the date
|
|
type JSONTime int64
|
|
|
|
// String converts the unix timestamp into a string
|
|
func (t JSONTime) String() string {
|
|
tm := t.Time()
|
|
return fmt.Sprintf("\"%s\"", tm.Format("Mon Jan _2"))
|
|
}
|
|
|
|
// Time returns a `time.Time` representation of this value.
|
|
func (t JSONTime) Time() time.Time {
|
|
return time.Unix(int64(t), 0)
|
|
}
|
|
|
|
// UnmarshalJSON will unmarshal both string and int JSON values
|
|
func (t *JSONTime) UnmarshalJSON(buf []byte) error {
|
|
s := bytes.Trim(buf, `"`)
|
|
|
|
if bytes.EqualFold(s, []byte("null")) {
|
|
*t = JSONTime(0)
|
|
return nil
|
|
}
|
|
|
|
v, err := strconv.Atoi(string(s))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*t = JSONTime(int64(v))
|
|
return nil
|
|
}
|
|
|
|
// Team contains details about a team
|
|
type Team struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Domain string `json:"domain"`
|
|
}
|
|
|
|
// Icons XXX: needs further investigation
|
|
type Icons struct {
|
|
Image36 string `json:"image_36,omitempty"`
|
|
Image48 string `json:"image_48,omitempty"`
|
|
Image72 string `json:"image_72,omitempty"`
|
|
}
|
|
|
|
// Info contains various details about the authenticated user and team.
|
|
// It is returned by StartRTM or included in the "ConnectedEvent" RTM event.
|
|
type Info struct {
|
|
URL string `json:"url,omitempty"`
|
|
User *UserDetails `json:"self,omitempty"`
|
|
Team *Team `json:"team,omitempty"`
|
|
}
|
|
|
|
type infoResponseFull struct {
|
|
Info
|
|
SlackResponse
|
|
}
|
|
|
|
// GetBotByID is deprecated and returns nil
|
|
func (info Info) GetBotByID(botID string) *Bot {
|
|
return nil
|
|
}
|
|
|
|
// GetUserByID is deprecated and returns nil
|
|
func (info Info) GetUserByID(userID string) *User {
|
|
return nil
|
|
}
|
|
|
|
// GetChannelByID is deprecated and returns nil
|
|
func (info Info) GetChannelByID(channelID string) *Channel {
|
|
return nil
|
|
}
|
|
|
|
// GetGroupByID is deprecated and returns nil
|
|
func (info Info) GetGroupByID(groupID string) *Group {
|
|
return nil
|
|
}
|
|
|
|
// GetIMByID is deprecated and returns nil
|
|
func (info Info) GetIMByID(imID string) *IM {
|
|
return nil
|
|
}
|