Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'twitter_ebooks'
- # Information about a particular Twitter user we know
- class UserInfo
- attr_reader :username
- # @return [Integer] how many times we can pester this user unprompted
- attr_accessor :pesters_left
- # @param username [String]
- def initialize(username)
- @username = username
- @pesters_left = 1
- end
- end
- class CloneBot < Ebooks::Bot
- attr_accessor :original, :model, :model_path
- def configure
- # Configuration for all CloneBots
- self.consumer_key = ""
- self.consumer_secret = ""
- self.blacklist = ['kylelehk', 'friedrichsays', 'Sudieofna', 'tnietzschequote', 'NerdsOnPeriod', 'FSR', 'BafflingQuotes', 'Obey_Nxme']
- self.delay_range = 1..6
- @userinfo = {}
- end
- def top100; @top100 ||= model.keywords.take(100); end
- def top20; @top20 ||= model.keywords.take(20); end
- # AddOn: don't use '#'
- def checkTweet(tweetText)
- if not tweetText =~ /#/
- return true
- end
- end
- def on_startup
- load_model!
- scheduler.cron '1h' do
- genTweet = true
- while genTweet do
- tweetText = model.make_statement
- if checkTweet(tweetText)
- genTweet = false
- end
- end;
- tweet(tweetText)
- end
- end
- def on_message(dm)
- delay do
- # AddOn: don't use '#'
- genTweet = true
- while genTweet do
- tweetText = model.make_response(dm.text)
- if checkTweet(tweetText)
- genTweet = false
- end
- end;
- reply(dm, tweetText)
- end
- end
- def on_mention(tweet)
- # Become more inclined to pester a user when they talk to us
- userinfo(tweet.user.screen_name).pesters_left += 1
- delay do
- # AddOn: don't use '#'
- genTweet = true
- while genTweet do
- tweetText = model.make_response(meta(tweet).mentionless, meta(tweet).limit)
- if checkTweet(tweetText)
- genTweet = false
- end
- end;
- reply(tweet, tweetText)
- end
- end
- def on_timeline(tweet)
- return if tweet.retweeted_status?
- return unless can_pester?(tweet.user.screen_name)
- tokens = Ebooks::NLP.tokenize(tweet.text)
- interesting = tokens.find { |t| top100.include?(t.downcase) }
- very_interesting = tokens.find_all { |t| top20.include?(t.downcase) }.length > 2
- delay do
- if very_interesting
- retweet(tweet) if rand < 0.1
- favorite(tweet) if rand < 0.5
- if rand < 0.01
- userinfo(tweet.user.screen_name).pesters_left -= 1
- # AddOn: don't use '#'
- genTweet = true
- while genTweet do
- tweetText = model.make_response(meta(tweet).mentionless, meta(tweet).limit)
- if checkTweet(tweetText)
- genTweet = true
- end
- end;
- reply(tweet, tweetText)
- end
- elsif interesting
- favorite(tweet) if rand < 0.05
- if rand < 0.001
- userinfo(tweet.user.screen_name).pesters_left -= 1
- # AddOn: don't use '#'
- genTweet = true
- while genTweet do
- tweetText = model.make_response(meta(tweet).mentionless, meta(tweet).limit)
- if checkTweet(tweetText)
- genTweet = true
- end
- end;
- reply(tweet, tweetText)
- end
- end
- end
- end
- # Find information we've collected about a user
- # @param username [String]
- # @return [Ebooks::UserInfo]
- def userinfo(username)
- @userinfo[username] ||= UserInfo.new(username)
- end
- # Check if we're allowed to send unprompted tweets to a user
- # @param username [String]
- # @return [Boolean]
- def can_pester?(username)
- userinfo(username).pesters_left > 0
- end
- # Only follow our original user or people who are following our original user
- # @param user [Twitter::User]
- def can_follow?(username)
- @original.nil? || username == @original || twitter.friendship?(username, @original)
- end
- def favorite(tweet)
- if can_follow?(tweet.user.screen_name)
- super(tweet)
- else
- log "Unfollowing @#{tweet.user.screen_name}"
- twitter.unfollow(tweet.user.screen_name)
- end
- end
- def on_follow(user)
- if can_follow?(user.screen_name)
- follow(user.screen_name)
- else
- log "Not following @#{user.screen_name}"
- end
- end
- private
- def load_model!
- return if @model
- @model_path ||= "model/#{original}.model"
- log "Loading model #{model_path}"
- @model = Ebooks::Model.load(model_path)
- end
- end
- CloneBot.new("xxx_ebooks") do |bot|
- bot.access_token = ""
- bot.access_token_secret = ""
- bot.original = "xxx_ebooks"
- end
Advertisement
Add Comment
Please, Sign In to add comment