Documentation ¶
Overview ¶
Package core provides core functionalities for mybot.
Index ¶
- Constants
- func CheckSlackError(err error) bool
- func CheckTwitterError(err error) bool
- func TwitterStatusURL(t anaconda.Tweet) string
- type ActionEvent
- type Config
- type ConfigProperties
- func (c *ConfigProperties) AddSlackMessage(msg MessageConfig)
- func (c *ConfigProperties) AddTwitterFavorite(favorite FavoriteConfig)
- func (c *ConfigProperties) AddTwitterSearch(search SearchConfig)
- func (c *ConfigProperties) AddTwitterTimeline(timeline TimelineConfig)
- func (c *ConfigProperties) GetPollingDuration() string
- func (c *ConfigProperties) GetProperties() ConfigProperties
- func (c *ConfigProperties) GetSlackMessages() []MessageConfig
- func (c *ConfigProperties) GetTwitterFavorites() []FavoriteConfig
- func (c *ConfigProperties) GetTwitterScreenNames() []string
- func (c *ConfigProperties) GetTwitterSearches() []SearchConfig
- func (c *ConfigProperties) GetTwitterTimelines() []TimelineConfig
- func (c *ConfigProperties) GetTwitterTimelinesByScreenName(screenName string) []TimelineConfig
- func (c *ConfigProperties) Marshal(ext string) ([]byte, error)
- func (c *ConfigProperties) SetPollingDuration(dur string)
- func (c *ConfigProperties) SetSlackMessages(msgs []MessageConfig)
- func (c *ConfigProperties) SetTwitterFavorites(favorites []FavoriteConfig)
- func (c *ConfigProperties) SetTwitterSearches(searches []SearchConfig)
- func (c *ConfigProperties) SetTwitterTimelines(timelines []TimelineConfig)
- func (c *ConfigProperties) Unmarshal(ext string, bytes []byte) error
- func (c *ConfigProperties) Validate() error
- func (c *ConfigProperties) ValidateWithAPI(api models.TwitterAPI) error
- type DBConfig
- type FavoriteConfig
- type FileConfig
- type Filter
- func (c Filter) CheckSlackMsg(ev *slack.MessageEvent, v VisionMatcher, l LanguageMatcher, cache data.Cache) (bool, error)
- func (c Filter) CheckTweet(t anaconda.Tweet, v VisionMatcher, l LanguageMatcher, cache data.Cache) (bool, error)
- func (c Filter) ShouldRepeat() bool
- func (f Filter) Validate() error
- type LanguageAPI
- type LanguageMatcher
- type MessageConfig
- type ReceivedEvent
- type SearchConfig
- type SlackAPI
- func (a *SlackAPI) AuthTest() (*slack.AuthTestResponse, error)
- func (a *SlackAPI) Enabled() bool
- func (a *SlackAPI) Listen(vis VisionMatcher, lang LanguageMatcher, twitterAPI *TwitterAPI) *SlackListener
- func (a *SlackAPI) PostMessage(channel, text string, channelIsOpen bool, opts ...slack.MsgOption) error
- func (a *SlackAPI) PostTweet(channel string, tweet anaconda.Tweet) error
- type SlackConfig
- type SlackListener
- type SlackMsg
- type Source
- type TimelineConfig
- type TweetChecker
- type TwitterAPI
- func (a *TwitterAPI) BaseAPI() models.TwitterAPI
- func (a *TwitterAPI) CheckUser(user string, allowSelf bool, users []string) (bool, error)
- func (a *TwitterAPI) Enabled() bool
- func (a *TwitterAPI) GetFavorites(vals url.Values) ([]anaconda.Tweet, error)
- func (a *TwitterAPI) GetSearch(query string, url url.Values) (anaconda.SearchResponse, error)
- func (a *TwitterAPI) GetSelf() (anaconda.User, error)
- func (a *TwitterAPI) GetUserSearch(searchTerm string, v url.Values) ([]anaconda.User, error)
- func (a *TwitterAPI) ListenMyself(v url.Values) (*TwitterDMListener, error)
- func (a *TwitterAPI) ListenUsers(v url.Values, vis VisionMatcher, lang LanguageMatcher, slack *SlackAPI, ...) (*TwitterUserListener, error)
- func (a *TwitterAPI) PostSlackMsg(text string, atts []slack.Attachment) (anaconda.Tweet, error)
- func (a *TwitterAPI) ProcessFavorites(name string, v url.Values, c TweetChecker, vision VisionMatcher, ...) ([]anaconda.Tweet, []data.Action, error)
- func (a *TwitterAPI) ProcessSearch(query string, v url.Values, c TweetChecker, vision VisionMatcher, ...) ([]anaconda.Tweet, []data.Action, error)
- func (a *TwitterAPI) VerifyCredentials() (bool, error)
- type TwitterConfig
- type TwitterDMListener
- type TwitterPostProcessor
- type TwitterPostProcessorEach
- type TwitterPostProcessorTop
- type TwitterUserListener
- type VisionAPI
- type VisionMatcher
Constants ¶
const ( TwitterEventType = "Twitter" SlackEventType = "Slack" )
Variables ¶
This section is empty.
Functions ¶
func CheckSlackError ¶
func CheckTwitterError ¶
func TwitterStatusURL ¶
Types ¶
type ActionEvent ¶
func NewActionEvent ¶
func NewActionEvent(action data.Action, data interface{}) ActionEvent
func (ActionEvent) String ¶
func (e ActionEvent) String() string
type Config ¶
type Config interface { utils.Savable utils.Loadable utils.Deletable GetProperties() ConfigProperties GetTwitterScreenNames() []string GetTwitterTimelines() []TimelineConfig GetTwitterTimelinesByScreenName(screenName string) []TimelineConfig SetTwitterTimelines(timelines []TimelineConfig) AddTwitterTimeline(timeline TimelineConfig) GetTwitterFavorites() []FavoriteConfig SetTwitterFavorites(favorites []FavoriteConfig) AddTwitterFavorite(favorite FavoriteConfig) GetTwitterSearches() []SearchConfig SetTwitterSearches(searches []SearchConfig) AddTwitterSearch(search SearchConfig) GetPollingDuration() string SetPollingDuration(dur string) GetSlackMessages() []MessageConfig SetSlackMessages(msgs []MessageConfig) AddSlackMessage(msg MessageConfig) Validate() error ValidateWithAPI(api models.TwitterAPI) error Unmarshal(ext string, bytes []byte) error Marshal(ext string) ([]byte, error) }
Config provides a set of funtions to access cofiguration of this application.
type ConfigProperties ¶
type ConfigProperties struct { // Twitter is a configuration related to Twitter. Twitter TwitterConfig `json:"twitter" toml:"twitter" bson:"twitter" yaml:"twitter"` // Slack is a configuration related to Slack Slack SlackConfig `json:"slack" toml:"slack" bson:"slack" yaml:"slack"` // Duration is a duration for some periodic jobs such as fetching // users' favorites and searching by the specified condition. Duration string `json:"duration" toml:"duration" bson:"duration" yaml:"duration"` // contains filtered or unexported fields }
ConfigProperties represents a collection of Config properties. All functions of this struct are thread-safe.
func (*ConfigProperties) AddSlackMessage ¶
func (c *ConfigProperties) AddSlackMessage(msg MessageConfig)
func (*ConfigProperties) AddTwitterFavorite ¶
func (c *ConfigProperties) AddTwitterFavorite(favorite FavoriteConfig)
func (*ConfigProperties) AddTwitterSearch ¶
func (c *ConfigProperties) AddTwitterSearch(search SearchConfig)
func (*ConfigProperties) AddTwitterTimeline ¶
func (c *ConfigProperties) AddTwitterTimeline(timeline TimelineConfig)
func (*ConfigProperties) GetPollingDuration ¶
func (c *ConfigProperties) GetPollingDuration() string
func (*ConfigProperties) GetProperties ¶
func (c *ConfigProperties) GetProperties() ConfigProperties
GetProperties returns a copy of ConfigProperties itself.
func (*ConfigProperties) GetSlackMessages ¶
func (c *ConfigProperties) GetSlackMessages() []MessageConfig
GetSlackMessages returns a copy of Slack message configuration list.
func (*ConfigProperties) GetTwitterFavorites ¶
func (c *ConfigProperties) GetTwitterFavorites() []FavoriteConfig
GetTwitterFavorites returns a copy of Twitter favorite configuration list.
func (*ConfigProperties) GetTwitterScreenNames ¶
func (c *ConfigProperties) GetTwitterScreenNames() []string
GetTwitterScreenNames returns a list of all screen names in Twitter configuration.
func (*ConfigProperties) GetTwitterSearches ¶
func (c *ConfigProperties) GetTwitterSearches() []SearchConfig
GetTwitterSearches returns a copy of Twitter search configuration list.
func (*ConfigProperties) GetTwitterTimelines ¶
func (c *ConfigProperties) GetTwitterTimelines() []TimelineConfig
GetTwitterTimelines returns a copy of Twitter timeline configuration list.
func (*ConfigProperties) GetTwitterTimelinesByScreenName ¶
func (c *ConfigProperties) GetTwitterTimelinesByScreenName(screenName string) []TimelineConfig
GetTwitterTimelinesByScreenName returns timeline configurations including a specified screen name.
func (*ConfigProperties) Marshal ¶
func (c *ConfigProperties) Marshal(ext string) ([]byte, error)
Marshal returns a configuration content as a toml text. If error occurs while encoding, this returns an empty string. This return value is not same as the source file's content.
func (*ConfigProperties) SetPollingDuration ¶
func (c *ConfigProperties) SetPollingDuration(dur string)
func (*ConfigProperties) SetSlackMessages ¶
func (c *ConfigProperties) SetSlackMessages(msgs []MessageConfig)
func (*ConfigProperties) SetTwitterFavorites ¶
func (c *ConfigProperties) SetTwitterFavorites(favorites []FavoriteConfig)
func (*ConfigProperties) SetTwitterSearches ¶
func (c *ConfigProperties) SetTwitterSearches(searches []SearchConfig)
func (*ConfigProperties) SetTwitterTimelines ¶
func (c *ConfigProperties) SetTwitterTimelines(timelines []TimelineConfig)
func (*ConfigProperties) Unmarshal ¶
func (c *ConfigProperties) Unmarshal(ext string, bytes []byte) error
TODO: Make error message clearer
func (*ConfigProperties) Validate ¶
func (c *ConfigProperties) Validate() error
Validate tries to validate the specified configuration. If invalid values are detected, this returns an error.
func (*ConfigProperties) ValidateWithAPI ¶
func (c *ConfigProperties) ValidateWithAPI(api models.TwitterAPI) error
ValidateWithAPI validates ConfigProperties with external API access. This function is exclusive with Validate function.
type DBConfig ¶
type DBConfig struct { ConfigProperties `yaml:",inline"` ID string `json:"id" toml:"id" bson:"id" yaml:"id"` // contains filtered or unexported fields }
func NewDBConfig ¶
func NewDBConfig(col models.MgoCollection, id string) (*DBConfig, error)
type FavoriteConfig ¶
type FavoriteConfig struct { Source `yaml:",inline"` models.SourceProperties `yaml:",inline"` models.AccountProperties `yaml:",inline"` models.FavoriteProperties `yaml:",inline"` }
FavoriteConfig is a configuration for Twitter favorites
func NewFavoriteConfig ¶
func NewFavoriteConfig() FavoriteConfig
NewFavoriteCnfig returns FavoriteConfig instance, which is empty but has a non-nil filter and action.
func (*FavoriteConfig) Validate ¶
func (c *FavoriteConfig) Validate() error
type FileConfig ¶
type FileConfig struct { ConfigProperties `yaml:",inline"` // source is a configuration file from which this was loaded. This is // needed to save the content to the same file. File string `json:"-" toml:"-" bson:"-" yaml:"-"` }
FileConfig is a root of the all configurations of this applciation.
func NewFileConfig ¶
func NewFileConfig(path string) (*FileConfig, error)
NewFileConfig takes the configuration file path and returns a configuration instance.
func NewTestFileConfig ¶
func NewTestFileConfig(path string, t *testing.T) *FileConfig
func (*FileConfig) Delete ¶
func (c *FileConfig) Delete() error
func (*FileConfig) Load ¶
func (c *FileConfig) Load() error
Load loads the configuration from the source file. If the specified source file doesn't exist, this method does nothing and returns nil.
func (*FileConfig) Save ¶
func (c *FileConfig) Save() error
Save saves the specified configuration to the source file.
type Filter ¶
type Filter struct { models.FilterProperties `yaml:",inline"` Patterns []string `json:"patterns,omitempty" toml:"patterns,omitempty" bson:"patterns,omitempty" yaml:"patterns,omitempty"` URLPatterns []string `json:"url_patterns,omitempty" toml:"url_patterns,omitempty" bson:"url_patterns,omitempty" yaml:"url_patterns,omitempty"` Vision models.VisionCondition `json:"vision,omitempty" toml:"vision,omitempty" bson:"vision,omitempty" yaml:"vision,omitempty"` Language models.LanguageCondition `json:"language,omitempty" toml:"language,omitempty" bson:"language,omitempty" yaml:"language,omitempty"` }
Filter is a configuration to filter out tweets
func (Filter) CheckSlackMsg ¶
func (c Filter) CheckSlackMsg( ev *slack.MessageEvent, v VisionMatcher, l LanguageMatcher, cache data.Cache, ) (bool, error)
func (Filter) CheckTweet ¶
func (c Filter) CheckTweet( t anaconda.Tweet, v VisionMatcher, l LanguageMatcher, cache data.Cache, ) (bool, error)
func (Filter) ShouldRepeat ¶
type LanguageAPI ¶
type LanguageAPI struct {
// contains filtered or unexported fields
}
func (*LanguageAPI) Enabled ¶
func (a *LanguageAPI) Enabled() bool
func (*LanguageAPI) MatchText ¶
func (a *LanguageAPI) MatchText( text string, cond models.LanguageCondition, ) (string, bool, error)
type LanguageMatcher ¶
type LanguageMatcher interface { MatchText(string, models.LanguageCondition) (string, bool, error) Enabled() bool }
func NewLanguageMatcher ¶
func NewLanguageMatcher(file string) (LanguageMatcher, error)
type MessageConfig ¶
type MessageConfig struct { Source `yaml:",inline"` Channels []string `json:"channels" toml:"channels" bson:"channels" yaml:"channels"` }
func NewMessageConfig ¶
func NewMessageConfig() MessageConfig
func (MessageConfig) Validate ¶
func (c MessageConfig) Validate() error
type ReceivedEvent ¶
func NewReceivedEvent ¶
func NewReceivedEvent(typ, name string, data interface{}) ReceivedEvent
func (ReceivedEvent) String ¶
func (e ReceivedEvent) String() string
type SearchConfig ¶
type SearchConfig struct { Source `yaml:",inline"` models.SourceProperties `yaml:",inline"` models.SearchProperties `yaml:",inline"` }
SearchConfig is a configuration for Twitter searches
func NewSearchConfig ¶
func NewSearchConfig() SearchConfig
NewSearchConfig returns SearchConfig instance, which is empty but has a non-nil filter and action.
func (*SearchConfig) Validate ¶
func (c *SearchConfig) Validate() error
type SlackAPI ¶
type SlackAPI struct {
// contains filtered or unexported fields
}
func NewSlackAPIWithAuth ¶
func (*SlackAPI) Listen ¶
func (a *SlackAPI) Listen(vis VisionMatcher, lang LanguageMatcher, twitterAPI *TwitterAPI) *SlackListener
type SlackConfig ¶
type SlackConfig struct {
Messages []MessageConfig `json:"messages" toml:"messages" bson:"messages" yaml:"messages"`
}
func NewSlackConfig ¶
func NewSlackConfig() SlackConfig
type SlackListener ¶
type SlackListener struct {
// contains filtered or unexported fields
}
type Source ¶
type Source struct { // Name is a label to identify each source Name string `json:"name,omitempty" toml:"name,omitempty" bson:"name,omitempty" yaml:"name,omitempty"` // Filter filters out incoming data from sources. Filter Filter `json:"filter" toml:"filter" bson:"filter" yaml:"filter"` // Action defines actions for data passing through filters. Action data.Action `json:"action" toml:"action" bson:"action" yaml:"action"` }
Source is a configuration for common data sources such as Twitter's timelines, favorites and searches. Sources should have filters and actions.
type TimelineConfig ¶
type TimelineConfig struct { Source `yaml:",inline"` models.SourceProperties `yaml:",inline"` models.AccountProperties `yaml:",inline"` models.TimelineProperties `yaml:",inline"` }
TimelineConfig is a configuration for Twitter timelines
func NewTimelineConfig ¶
func NewTimelineConfig() TimelineConfig
NewTimelineConfig returns TimelineConfig instance, which is empty but has a non-nil filter and action.
func (*TimelineConfig) Validate ¶
func (c *TimelineConfig) Validate() error
type TweetChecker ¶
type TweetChecker interface { CheckTweet(t anaconda.Tweet, v VisionMatcher, l LanguageMatcher, c data.Cache) (bool, error) ShouldRepeat() bool }
TweetChecker function checks if the specified tweet is acceptable, which means it should be retweeted.
type TwitterAPI ¶
type TwitterAPI struct {
// contains filtered or unexported fields
}
TwitterAPI is a wrapper of anaconda.TwitterApi.
func NewTwitterAPI ¶
func NewTwitterAPI(api models.TwitterAPI, config Config, cache data.Cache) *TwitterAPI
func NewTwitterAPIWithAuth ¶
func NewTwitterAPIWithAuth(auth oauth.OAuthCreds, config Config, cache data.Cache) *TwitterAPI
NewTwitterAPIWithAuth takes a user's authentication, cache and configuration and returns TwitterAPI instance for that user
func (*TwitterAPI) BaseAPI ¶
func (a *TwitterAPI) BaseAPI() models.TwitterAPI
func (*TwitterAPI) CheckUser ¶
CheckUser cheks if user is matched for the given allowSelf and users arguments.
func (*TwitterAPI) Enabled ¶
func (a *TwitterAPI) Enabled() bool
func (*TwitterAPI) GetFavorites ¶
func (*TwitterAPI) GetSearch ¶
func (a *TwitterAPI) GetSearch(query string, url url.Values) (anaconda.SearchResponse, error)
func (*TwitterAPI) GetSelf ¶
func (a *TwitterAPI) GetSelf() (anaconda.User, error)
GetSelf gets the authenticated user's information and stores it as a cache, then returns it.
func (*TwitterAPI) GetUserSearch ¶
func (*TwitterAPI) ListenMyself ¶
func (a *TwitterAPI) ListenMyself(v url.Values) (*TwitterDMListener, error)
ListenMyself listens to the authenticated user by Twitter's User Streaming API and reacts with direct messages.
func (*TwitterAPI) ListenUsers ¶
func (a *TwitterAPI) ListenUsers( v url.Values, vis VisionMatcher, lang LanguageMatcher, slack *SlackAPI, cache data.Cache, ) (*TwitterUserListener, error)
ListenUsers listens timelines of the friends
func (*TwitterAPI) PostSlackMsg ¶
func (a *TwitterAPI) PostSlackMsg(text string, atts []slack.Attachment) (anaconda.Tweet, error)
func (*TwitterAPI) ProcessFavorites ¶
func (a *TwitterAPI) ProcessFavorites( name string, v url.Values, c TweetChecker, vision VisionMatcher, lang LanguageMatcher, slack *SlackAPI, action data.Action, ) ([]anaconda.Tweet, []data.Action, error)
ProcessFavorites gets tweets from the specified user's favorite list and do action for tweets filtered by c.
func (*TwitterAPI) ProcessSearch ¶
func (a *TwitterAPI) ProcessSearch( query string, v url.Values, c TweetChecker, vision VisionMatcher, lang LanguageMatcher, slack *SlackAPI, action data.Action, ) ([]anaconda.Tweet, []data.Action, error)
ProcessSearch gets tweets from search result by the specified query and do action for tweets filtered by c.
func (*TwitterAPI) VerifyCredentials ¶
func (a *TwitterAPI) VerifyCredentials() (bool, error)
type TwitterConfig ¶
type TwitterConfig struct { // no usage but keep this due to backward compatibility Debug bool `json:"debug" toml:"debug" bson:"debug" yaml:"debug"` Timelines []TimelineConfig `json:"timelines" toml:"timelines" bson:"timelines" yaml:"timelines"` Favorites []FavoriteConfig `json:"favorites" toml:"favorites" bson:"favorites" yaml:"favorites"` Searches []SearchConfig `json:"searches" toml:"searches" bson:"searches" yaml:"searches"` }
TwitterConfig is a configuration related to Twitter.
func NewTwitterConfig ¶
func NewTwitterConfig() TwitterConfig
func (TwitterConfig) GetScreenNames ¶
func (tc TwitterConfig) GetScreenNames() []string
GetScreenNames returns all screen names in the TwitterConfig instance. This is useful to do something for all related users.
type TwitterDMListener ¶
type TwitterDMListener struct {
// contains filtered or unexported fields
}
func (*TwitterDMListener) Listen ¶
func (l *TwitterDMListener) Listen(ctx context.Context, outChan chan<- interface{}) error
func (*TwitterDMListener) Stop ¶
func (l *TwitterDMListener) Stop()
type TwitterPostProcessor ¶
type TwitterPostProcessorEach ¶
type TwitterPostProcessorEach struct {
// contains filtered or unexported fields
}
type TwitterPostProcessorTop ¶
type TwitterPostProcessorTop struct {
// contains filtered or unexported fields
}
type TwitterUserListener ¶
type TwitterUserListener struct {
// contains filtered or unexported fields
}
func (*TwitterUserListener) Listen ¶
func (l *TwitterUserListener) Listen(ctx context.Context, outChan chan<- interface{}) error
func (*TwitterUserListener) Stop ¶
func (l *TwitterUserListener) Stop()
type VisionAPI ¶
type VisionAPI struct {
// contains filtered or unexported fields
}
VisionAPI is a wrapper of vision.Service.
func (*VisionAPI) MatchImages ¶
func (a *VisionAPI) MatchImages( urls []string, cond models.VisionCondition, imgCaches []models.ImageCacheData, ) ([]string, []bool, error)
MatchImages takes image URLs and a Vision condition and returns whether the specified images match or not.
type VisionMatcher ¶
type VisionMatcher interface { MatchImages([]string, models.VisionCondition, []models.ImageCacheData) ([]string, []bool, error) Enabled() bool }
func NewVisionMatcher ¶
func NewVisionMatcher(file string) (VisionMatcher, error)
NewVisionMatcher takes a path of a user's google-cloud credential file and returns a VisionAPI instance for that user.