lib

package
v0.0.0-...-ed68906 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2015 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const E = "events"
View Source
const L = "links"
View Source
const M = "messages"

These contstats define the four types of callbacks that lazlo can hand you

View Source
const Q = "questions"
View Source
const T = "timers"

Variables

View Source
var Logger = newLogger()

Logger is a global reference to our logging object

Functions

This section is empty.

Types

type ApiRequest

type ApiRequest struct {
	URL    string
	Values url.Values
	Broker *Broker
}

ApiRequest contains everything we need to make.. well an api request

type ApiResponse

type ApiResponse struct {
	Bots          []Bot     `json:"bots,omitempty"`
	CacheVersion  string    `json:"cache_version,omitempty"`
	Channels      []Channel `json:"channels,omitempty"`
	Channel       Channel   `json:"channel,omitempty"`
	Groups        []Group   `json:"groups,omitempty"`
	Group         Group     `json:"group,omitempty"`
	IMs           []IM      `json:"ims,omitempty"`
	LatestEventTs string    `json:"latest_event_ts,omitempty"`
	Latest        string    `json:"latest,omitempty"`
	Ok            bool      `json:"ok,omitempty"`
	ReplyTo       int32     `json:"reply_to,omitempty"`
	Error         string    `json:"error,omitempty"`
	HasMore       bool      `json:"has_more,omitempty"`
	Self          Self      `json:"self,omitempty"`
	Team          Team      `json:"team,omitempty"`
	URL           string    `json:"url,omitempty"`
	Users         []User    `json:"users,omitempty"`
	User          User      `json:"user,omitempty"`
	Messages      []Event   `json:"messages,omitempty"`
}

func MakeAPIReq

func MakeAPIReq(req ApiRequest) (*ApiResponse, error)

MakeAPIReq takes an ApiRequest, adds auth if necessary and POSTs it to the slack web-api.

func (*ApiResponse) GetChannel

func (meta *ApiResponse) GetChannel(id string) *Channel

GetChannel is a convienence function to fetch a pointer to a channel object given its ID

func (*ApiResponse) GetChannelByName

func (meta *ApiResponse) GetChannelByName(name string) *Channel

GetChannel is a convienence function to fetch a pointer to a channel object given its Name

func (*ApiResponse) GetUser

func (meta *ApiResponse) GetUser(id string) *User

GetUser is a convienence function to return a pointer to a user object given its ID.

func (*ApiResponse) GetUserByName

func (meta *ApiResponse) GetUserByName(name string) *User

GetUserByName is a convience function to return a pointer to a user object given its Name

func (*ApiResponse) GetUserName

func (meta *ApiResponse) GetUserName(id string) string

GetUserName is a convience function to return a user's Name field given its ID.

type Attachment

type Attachment struct {
	Fallback   string            `json:"fallback"`
	Color      string            `json:"color,omitempty"`
	Pretext    string            `json:"pretext,omitempty"`
	AuthorName string            `json:"author_name,omitempty"`
	AuthorLink string            `json:"author_link,omitempty"`
	AuthorIcon string            `json:"author_icon,omitempty"`
	Title      string            `json:"title,omitempty"`
	TitleLink  string            `json:"title_link,omitempty"`
	Text       string            `json:"text,omitempty"`
	Fields     []AttachmentField `json:"fields,omitempty"`
	ImageUrl   string            `json:"image_url,omitempty"`
	ThumbUrl   string            `json:"thumb_url,omitempty"`
	MarkdownIn []string          `json:"mrkdwn_in,omitempty"`
}

type AttachmentField

type AttachmentField struct {
	Title string `json:"title"`
	Value string `json:"value"`
	Short bool   `json:"short,omitempty"`
}

type Bot

type Bot struct {
	Created       float64 `json:"created,omitempty"`
	Deleted       bool    `json:"deleted,omitempty"`
	Icons         Icon    `json:"icons,omitempty"`
	ID            string  `json:"id,omitempty"`
	IsIm          bool    `json:"is_im,omitempty"`
	IsUserDeleted bool    `json:"is_user_deleted,omitempty"`
	User          string  `json:"user,omitempty"`
	Name          string  `json:"name,omitempty"`
	Extra         map[string]interface{}
}

type Brain

type Brain interface {
	Open() error
	Close() error
	Get(string) ([]byte, error)
	Set(key string, data []byte) error
	Delete(string) error
}

Top-level exported Store interface for storage backends to implement

type Broker

type Broker struct {
	SlackMeta    *ApiResponse
	Config       *Config
	Socket       *websocket.Conn
	Modules      map[string]*Module
	Brain        Brain
	ApiResponses map[int32]chan map[string]interface{}

	ReadFilters    []*ReadFilter
	WriteFilters   []*WriteFilter
	MID            int32
	WriteThread    *WriteThread
	QuestionThread *QuestionThread
	SigChan        chan os.Signal
	SyncChan       chan bool
	ThreadCount    int32
	// contains filtered or unexported fields
}

Broker is the all-knowing repository of references

func NewBroker

func NewBroker() (*Broker, error)

NewBroker instantiates a new broker

func (*Broker) DeRegisterCallback

func (b *Broker) DeRegisterCallback(callback interface{}) error

func (*Broker) DefaultChannel

func (b *Broker) DefaultChannel() string

returns the Team's default channel

func (*Broker) EventCallback

func (b *Broker) EventCallback(key string, val string) *EventCallback

func (*Broker) GetDM

func (b *Broker) GetDM(ID string) string

Get a direct message channel ID so we can DM the given user

func (*Broker) LinkCallback

func (b *Broker) LinkCallback(p string, f ...func(http.ResponseWriter, *http.Request)) *LinkCallback

func (*Broker) MessageCallback

func (b *Broker) MessageCallback(pattern string, respond bool, channel ...string) *MessageCallback

func (*Broker) NextMID

func (b *Broker) NextMID() int32

NextMID() ensures our outbound messages have a unique ID number (a requirement of the slack rtm api)

func (*Broker) QuestionCallback

func (b *Broker) QuestionCallback(user string, prompt string) *QuestionCallback

func (*Broker) Register

func (b *Broker) Register(things ...interface{})

broker.Register() registers user-provided plug-ins

func (*Broker) RegisterCallback

func (b *Broker) RegisterCallback(callback interface{}) error

func (*Broker) Respond

func (b *Broker) Respond(text string, thing *interface{}, isReply bool) chan map[string]interface{}

send a reply to any sort of thingy that contains an ID and Channel attribute

func (*Broker) Say

func (b *Broker) Say(s string, channel ...string) chan map[string]interface{}

Say something in the named channel (or the default channel if none specified)

func (*Broker) Send

func (b *Broker) Send(e *Event) chan map[string]interface{}

this is the primary interface to Slack's write socket. Use this to send events.

func (*Broker) Start

func (broker *Broker) Start()

Broker.Start() starts the broker

func (*Broker) StartHttp

func (b *Broker) StartHttp()

func (*Broker) StartModules

func (b *Broker) StartModules()

StartModules launches each user-provided plugin registered in loadMOdules.go

func (*Broker) Stop

func (broker *Broker) Stop()

Stop gracefully stops lazlo

func (*Broker) This

func (b *Broker) This(thingy map[string]interface{})

broker.This() takes an inbound thingy of unknown type and brokers it to wherever it needs to go

func (*Broker) TimerCallback

func (b *Broker) TimerCallback(schedule string) *TimerCallback

type Channel

type Channel struct {
	Created     float64  `json:"created,omitempty"`
	Creator     string   `json:"creator,omitempty"`
	ID          string   `json:"id,omitempty"`
	IsArchived  bool     `json:"is_archived,omitempty"`
	IsChannel   bool     `json:"is_channel,omitempty"`
	IsGeneral   bool     `json:"is_general,omitempty"`
	IsMember    bool     `json:"is_member,omitempty"`
	LastRead    string   `json:"last_read,omitempty"`
	Latest      Event    `json:"latest,omitempty"`
	Members     []string `json:"members,omitempty"`
	Name        string   `json:"name,omitempty"`
	Purpose     Topic    `json:"purpose,omitempty"`
	Topic       Topic    `json:"topic,omitempty"`
	UnreadCount float64  `json:"unread_count,omitempty"`
	Extra       map[string]interface{}
}

type Config

type Config struct {
	Name     string `env:"key=LAZLO_NAME default=lazlo"`
	Token    string `env:"key=LAZLO_TOKEN"`
	URL      string `env:"key=LAZLO_URL default=http://localhost"`
	LogLevel string `env:"key=LAZLO_LOG_LEVEL default=info"`
	RedisURL string `env:"key=LAZLO_REDIS_URL"`
	RedisPW  string `env:"key=LAZLO_REDIS_PW"`
	Port     string `env:"key=PORT"`
}

Config struct

type Event

type Event struct {
	ID           int32        `json:"id,omitempty"`
	Type         string       `json:"type,omitempty"`
	Channel      string       `json:"channel,omitempty"`
	Text         string       `json:"text,omitempty"`
	Attachments  []Attachment `json:"attachments,omitempty"`
	User         string       `json:"user,omitempty"`
	UserName     string       `json:"username,omitempty"`
	BotID        string       `json:"bot_id,omitempty"`
	Subtype      string       `json:"subtype,omitempty"`
	Ts           string       `json:"ts,omitempty"`
	Broker       *Broker
	CallBackCode string `json:"callbackcode,omitempty"`
	Extra        map[string]interface{}
}

func (*Event) GetDM

func (event *Event) GetDM(s string) string

Get a Direct-Message Channel to the user from a given event

func (*Event) Reply

func (event *Event) Reply(s string) chan map[string]interface{}

Reply is a convienence function to REPLY to a given event object

func (*Event) Respond

func (event *Event) Respond(s string) chan map[string]interface{}

Respond is a convienence function to RESPOND to a given event object

func (*Event) RespondAttachments

func (event *Event) RespondAttachments(a []Attachment) chan map[string]interface{}

RespondAttachments is a function to RESPOND WITH ATTACHMENTS to a given event object

type EventCallback

type EventCallback struct {
	ID   string
	Key  string
	Val  string
	Chan chan map[string]interface{}
}

type Group

type Group struct {
	Created    int64    `json:"created,omitempty"`
	Creator    string   `json:"creator,omitempty"`
	ID         string   `json:"id,omitempty"`
	IsArchived bool     `json:"is_archived,omitempty"`
	IsGroup    bool     `json:"is_group,omitempty"`
	Members    []string `json:"members,omitempty"`
	Name       string   `json:"name,omitempty"`
	Purpose    Topic    `json:"purpose,omitempty"`
	Topic      Topic    `json:"topic,omitempty"`
	Extra      map[string]interface{}
}

type IM

type IM struct {
	Created       int64  `json:"created,omitempty"`
	ID            string `json:"id,omitempty"`
	IsIm          bool   `json:"is_im,omitempty"`
	IsUserDeleted bool   `json:"is_user_deleted,omitempty"`
	Latest        Event  `json:"latest,omitempty"`
	User          string `json:"user,omitempty"`
	Extra         map[string]interface{}
}

type Icon

type Icon struct {
	Image192     string `json:"image_132,omitempty"`
	Image132     string `json:"image_132,omitempty"`
	Image102     string `json:"image_102,omitempty"`
	Image88      string `json:"image_88,omitempty"`
	Image68      string `json:"image_68,omitempty"`
	Image48      string `json:"image_48,omitempty"`
	Image44      string `json:"image_44,omitempty"`
	Image34      string `json:"image_34,omitempty"`
	ImageDefault bool   `json:"image_default,omitempty"`
}

type LinkCallback

type LinkCallback struct {
	ID      string
	Path    string // the computed URL
	URL     string
	Handler func(res http.ResponseWriter, req *http.Request)
	Chan    chan *http.Request
	// contains filtered or unexported fields
}

func (*LinkCallback) Delete

func (l *LinkCallback) Delete()

type MessageCallback

type MessageCallback struct {
	ID        string
	Pattern   string
	Respond   bool // if true, only respond if the bot is mentioned by name
	Chan      chan PatternMatch
	SlackChan string // if set filter message callbacks to this Slack channel
}

type Module

type Module struct {
	Name  string
	Usage string
	Run   func(*Broker)
}

The Module type represents a user-defined plug-in. Build one of these and add it to loadModules.go for Lazlo to run your thingy on startup

type PatternMatch

type PatternMatch struct {
	Event *Event
	Match []string
}

type QuestionCallback

type QuestionCallback struct {
	ID       string
	User     string
	DMChan   string
	Question string
	Answer   chan string
	// contains filtered or unexported fields
}

type QuestionQueue

type QuestionQueue struct {
	// contains filtered or unexported fields
}

func (*QuestionQueue) Launch

func (qq *QuestionQueue) Launch(b *Broker)

QuestionQueue.Launch is a worker that serializes questions to one person

type QuestionThread

type QuestionThread struct {
	// contains filtered or unexported fields
}

The QuestionThread serializes questions and sends questions to users

func (*QuestionThread) Start

func (qt *QuestionThread) Start()

QuestionThread.Start() starts the question-serializer service

type ReadFilter

type ReadFilter struct {
	Name  string
	Usage string
	Run   func(thingy map[string]interface{}) map[string]interface{}
}

ReadFilter is a yet-to-be-implemented hook run on all inbound events from slack before the broker gets a hold of them

type Self

type Self struct {
	Created        float64 `json:"created,omitempty"`
	ID             string  `json:"id,omitempty"`
	ManualPresence string  `json:"manual_presence,omitempty"`
	Name           string  `json:"name,omitempty"`
	Prefs          struct {
		AllChannelsLoud                 bool    `json:"all_channels_loud,omitempty"`
		ArrowHistory                    bool    `json:"arrow_history,omitempty"`
		AtChannelSuppressedChannels     string  `json:"at_channel_suppressed_channels,omitempty"`
		AutoplayChatSounds              bool    `json:"autoplay_chat_sounds,omitempty"`
		Collapsible                     bool    `json:"collapsible,omitempty"`
		CollapsibleByClick              bool    `json:"collapsible_by_click,omitempty"`
		ColorNamesInList                bool    `json:"color_names_in_list,omitempty"`
		CommaKeyPrefs                   bool    `json:"comma_key_prefs,omitempty"`
		ConvertEmoticons                bool    `json:"convert_emoticons,omitempty"`
		DisplayRealNamesOverride        float64 `json:"display_real_names_override,omitempty"`
		DropboxEnabled                  bool    `json:"dropbox_enabled,omitempty"`
		EmailAlerts                     string  `json:"email_alerts,omitempty"`
		EmailAlertsSleepUntil           float64 `json:"email_alerts_sleep_until,omitempty"`
		EmailMisc                       bool    `json:"email_misc,omitempty"`
		EmailWeekly                     bool    `json:"email_weekly,omitempty"`
		EmojiMode                       string  `json:"emoji_mode,omitempty"`
		EnterIsSpecialInTbt             bool    `json:"enter_is_special_in_tbt,omitempty"`
		ExpandInlineImgs                bool    `json:"expand_inline_imgs,omitempty"`
		ExpandInternalInlineImgs        bool    `json:"expand_internal_inline_imgs,omitempty"`
		ExpandNonMediaAttachments       bool    `json:"expand_non_media_attachments,omitempty"`
		ExpandSnippets                  bool    `json:"expand_snippets,omitempty"`
		FKeySearch                      bool    `json:"f_key_search,omitempty"`
		FullTextExtracts                bool    `json:"full_text_extracts,omitempty"`
		FuzzyMatching                   bool    `json:"fuzzy_matching,omitempty"`
		GraphicEmoticons                bool    `json:"graphic_emoticons,omitempty"`
		GrowlsEnabled                   bool    `json:"growls_enabled,omitempty"`
		HasCreatedChannel               bool    `json:"has_created_channel,omitempty"`
		HasInvited                      bool    `json:"has_invited,omitempty"`
		HasUploaded                     bool    `json:"has_uploaded,omitempty"`
		HighlightWords                  string  `json:"highlight_words,omitempty"`
		KKeyOmnibox                     bool    `json:"k_key_omnibox,omitempty"`
		LastSnippetType                 string  `json:"last_snippet_type,omitempty"`
		LoudChannels                    string  `json:"loud_channels,omitempty"`
		LoudChannelsSet                 string  `json:"loud_channels_set,omitempty"`
		LsDisabled                      bool    `json:"ls_disabled,omitempty"`
		MacSpeakSpeed                   float64 `json:"mac_speak_speed,omitempty"`
		MacSpeakVoice                   string  `json:"mac_speak_voice,omitempty"`
		MacSsbBounce                    string  `json:"mac_ssb_bounce,omitempty"`
		MacSsbBullet                    bool    `json:"mac_ssb_bullet,omitempty"`
		MarkMsgsReadImmediately         bool    `json:"mark_msgs_read_immediately,omitempty"`
		MessagesTheme                   string  `json:"messages_theme,omitempty"`
		MuteSounds                      bool    `json:"mute_sounds,omitempty"`
		MutedChannels                   string  `json:"muted_channels,omitempty"`
		NeverChannels                   string  `json:"never_channels,omitempty"`
		NewMsgSnd                       string  `json:"new_msg_snd,omitempty"`
		NoCreatedOverlays               bool    `json:"no_created_overlays,omitempty"`
		NoJoinedOverlays                bool    `json:"no_joined_overlays,omitempty"`
		NoMacssb1Banner                 bool    `json:"no_macssb1_banner,omitempty"`
		NoTextInNotifications           bool    `json:"no_text_in_notifications,omitempty"`
		ObeyInlineImgLimit              bool    `json:"obey_inline_img_limit,omitempty"`
		PagekeysHandled                 bool    `json:"pagekeys_handled,omitempty"`
		PostsFormattingGuide            bool    `json:"posts_formatting_guide,omitempty"`
		PrivacyPolicySeen               bool    `json:"privacy_policy_seen,omitempty"`
		PromptedForEmailDisabling       bool    `json:"prompted_for_email_disabling,omitempty"`
		PushAtChannelSuppressedChannels string  `json:"push_at_channel_suppressed_channels,omitempty"`
		PushDmAlert                     bool    `json:"push_dm_alert,omitempty"`
		PushEverything                  bool    `json:"push_everything,omitempty"`
		PushIdleWait                    float64 `json:"push_idle_wait,omitempty"`
		PushLoudChannels                string  `json:"push_loud_channels,omitempty"`
		PushLoudChannelsSet             string  `json:"push_loud_channels_set,omitempty"`
		PushMentionAlert                bool    `json:"push_mention_alert,omitempty"`
		PushMentionChannels             string  `json:"push_mention_channels,omitempty"`
		PushSound                       string  `json:"push_sound,omitempty"`
		RequireAt                       bool    `json:"require_at,omitempty"`
		SearchExcludeBots               bool    `json:"search_exclude_bots,omitempty"`
		SearchExcludeChannels           string  `json:"search_exclude_channels,omitempty"`
		SearchOnlyMyChannels            bool    `json:"search_only_my_channels,omitempty"`
		SearchSort                      string  `json:"search_sort,omitempty"`
		SeenChannelMenuTipCard          bool    `json:"seen_channel_menu_tip_card,omitempty"`
		SeenChannelsTipCard             bool    `json:"seen_channels_tip_card,omitempty"`
		SeenDomainInviteReminder        bool    `json:"seen_domain_invite_reminder,omitempty"`
		SeenFlexpaneTipCard             bool    `json:"seen_flexpane_tip_card,omitempty"`
		SeenMemberInviteReminder        bool    `json:"seen_member_invite_reminder,omitempty"`
		SeenMessageInputTipCard         bool    `json:"seen_message_input_tip_card,omitempty"`
		SeenSearchInputTipCard          bool    `json:"seen_search_input_tip_card,omitempty"`
		SeenSsbPrompt                   bool    `json:"seen_ssb_prompt,omitempty"`
		SeenTeamMenuTipCard             bool    `json:"seen_team_menu_tip_card,omitempty"`
		SeenUserMenuTipCard             bool    `json:"seen_user_menu_tip_card,omitempty"`
		SeenWelcome2                    bool    `json:"seen_welcome_2,omitempty"`
		ShowMemberPresence              bool    `json:"show_member_presence,omitempty"`
		ShowTyping                      bool    `json:"show_typing,omitempty"`
		SidebarBehavior                 string  `json:"sidebar_behavior,omitempty"`
		SidebarTheme                    string  `json:"sidebar_theme,omitempty"`
		SidebarThemeCustomValues        string  `json:"sidebar_theme_custom_values,omitempty"`
		SnippetEditorWrapLongLines      bool    `json:"snippet_editor_wrap_long_lines,omitempty"`
		SpeakGrowls                     bool    `json:"speak_growls,omitempty"`
		SsEmojis                        bool    `json:"ss_emojis,omitempty"`
		StartScrollAtOldest             bool    `json:"start_scroll_at_oldest,omitempty"`
		TabUiReturnSelects              bool    `json:"tab_ui_return_selects,omitempty"`
		Time24                          bool    `json:"time24,omitempty"`
		Tz                              string  `json:"tz,omitempty"`
		UserColors                      string  `json:"user_colors,omitempty"`
		WebappSpellcheck                bool    `json:"webapp_spellcheck,omitempty"`
		WelcomeMessageHidden            bool    `json:"welcome_message_hidden,omitempty"`
		WinSsbBullet                    bool    `json:"win_ssb_bullet,omitempty"`
	} `json:"prefs,omitempty"`
}

type Team

type Team struct {
	Domain            string  `json:"domain,omitempty"`
	EmailDomain       string  `json:"email_domain,omitempty"`
	Icon              Icon    `json:"icon,omitempty"`
	ID                string  `json:"id,omitempty"`
	MsgEditWindowMins float64 `json:"msg_edit_window_mins,omitempty"`
	Name              string  `json:"name,omitempty"`
	OverStorageLimit  bool    `json:"over_storage_limit,omitempty"`
	Prefs             struct {
		AllowMessageDeletion   bool     `json:"allow_message_deletion,omitempty"`
		DefaultChannels        []string `json:"default_channels,omitempty"`
		DisplayRealNames       bool     `json:"display_real_names,omitempty"`
		DmRetentionDuration    float64  `json:"dm_retention_duration,omitempty"`
		DmRetentionType        float64  `json:"dm_retention_type,omitempty"`
		GatewayAllowIrcPlain   float64  `json:"gateway_allow_irc_plain,omitempty"`
		GatewayAllowIrcSsl     float64  `json:"gateway_allow_irc_ssl,omitempty"`
		GatewayAllowXmppSsl    float64  `json:"gateway_allow_xmpp_ssl,omitempty"`
		GroupRetentionDuration float64  `json:"group_retention_duration,omitempty"`
		GroupRetentionType     float64  `json:"group_retention_type,omitempty"`
		HideReferers           bool     `json:"hide_referers,omitempty"`
		MsgEditWindowMins      float64  `json:"msg_edit_window_mins,omitempty"`
		RequireAtForMention    float64  `json:"require_at_for_mention,omitempty"`
		RetentionDuration      float64  `json:"retention_duration,omitempty"`
		RetentionType          float64  `json:"retention_type,omitempty"`
		WhoCanArchiveChannels  string   `json:"who_can_archive_channels,omitempty"`
		WhoCanAtChannel        string   `json:"who_can_at_channel,omitempty"`
		WhoCanAtEveryone       string   `json:"who_can_at_everyone,omitempty"`
		WhoCanCreateChannels   string   `json:"who_can_create_channels,omitempty"`
		WhoCanCreateGroups     string   `json:"who_can_create_groups,omitempty"`
		WhoCanKickChannels     string   `json:"who_can_kick_channels,omitempty"`
		WhoCanKickGroups       string   `json:"who_can_kick_groups,omitempty"`
		WhoCanPostGeneral      string   `json:"who_can_post_general,omitempty"`
	} `json:"prefs,omitempty"`
	Extra map[string]interface{}
}

type TimerCallback

type TimerCallback struct {
	ID       string
	Schedule string
	State    string
	Next     time.Time
	Chan     chan time.Time
	// contains filtered or unexported fields
}

func (*TimerCallback) Run

func (t *TimerCallback) Run(dur time.Duration)

wait for the timer to expire, callback to the module, and reschedule

func (*TimerCallback) Start

func (t *TimerCallback) Start() error

verify the schedule and start the timer

func (*TimerCallback) Stop

func (t *TimerCallback) Stop()

type Topic

type Topic struct {
	Creator string  `json:"creator,omitempty"`
	LastSet float64 `json:"last_set,omitempty"`
	Value   string  `json:"value,omitempty"`
}

type User

type User struct {
	Color             string      `json:"color,omitempty"`
	Deleted           bool        `json:"deleted,omitempty"`
	HasFiles          bool        `json:"has_files,omitempty"`
	ID                string      `json:"id,omitempty"`
	IsAdmin           bool        `json:"is_admin,omitempty"`
	IsBot             bool        `json:"is_bot,omitempty"`
	IsOwner           bool        `json:"is_owner,omitempty"`
	IsPrimaryOwner    bool        `json:"is_primary_owner,omitempty"`
	IsRestricted      bool        `json:"is_restricted,omitempty"`
	IsUltraRestricted bool        `json:"is_ultra_restricted,omitempty"`
	Name              string      `json:"name,omitempty"`
	Phone             interface{} `json:"phone,omitempty"`
	Presence          string      `json:"presence,omitempty"`
	Profile           struct {
		Email              string `json:"email,omitempty"`
		FirstName          string `json:"first_name,omitempty"`
		Image192           string `json:"image_192,omitempty"`
		Image24            string `json:"image_24,omitempty"`
		Image32            string `json:"image_32,omitempty"`
		Image48            string `json:"image_48,omitempty"`
		Image72            string `json:"image_72,omitempty"`
		LastName           string `json:"last_name,omitempty"`
		Phone              string `json:"phone,omitempty"`
		RealName           string `json:"real_name,omitempty"`
		RealNameNormalized string `json:"real_name_normalized,omitempty"`
	} `json:"profile,omitempty"`
	RealName string      `json:"real_name,omitempty"`
	Skype    string      `json:"skype,omitempty"`
	Status   interface{} `json:"status,omitempty"`
	Tz       string      `json:"tz,omitempty"`
	TzLabel  string      `json:"tz_label,omitempty"`
	TzOffset float64     `json:"tz_offset,omitempty"`
	Extra    map[string]interface{}
}

type WriteFilter

type WriteFilter struct {
	Name  string
	Usage string
	Run   func(e *Event)
}

WriteFilter is a yet-to-be-implemented hook run on all outbound events from slack before the broker gets a hold of them

type WriteThread

type WriteThread struct {
	Chan     chan Event
	SyncChan chan bool
	// contains filtered or unexported fields
}

The WriteThread serielizes and sends messages to the slack RTM interface

func (*WriteThread) Start

func (w *WriteThread) Start()

WriteThread.Start starts the writethread

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL