mirror of
https://github.com/thewesker/ebooks_example.git
synced 2025-12-20 12:21:16 -05:00
♫ Clean up, clean up, everybody, everywhere ♫
This commit is contained in:
40
bots.rb
40
bots.rb
@@ -15,7 +15,7 @@ class UserInfo
|
|||||||
end
|
end
|
||||||
|
|
||||||
class CloneBot < Ebooks::Bot
|
class CloneBot < Ebooks::Bot
|
||||||
attr_accessor :original, :model_path
|
attr_accessor :original, :model, :model_path
|
||||||
|
|
||||||
def configure
|
def configure
|
||||||
# Configuration for all CloneBots
|
# Configuration for all CloneBots
|
||||||
@@ -24,17 +24,10 @@ class CloneBot < Ebooks::Bot
|
|||||||
self.blacklist = ['kylelehk', 'friedrichsays', 'Sudieofna', 'tnietzschequote', 'NerdsOnPeriod', 'FSR', 'BafflingQuotes', 'Obey_Nxme']
|
self.blacklist = ['kylelehk', 'friedrichsays', 'Sudieofna', 'tnietzschequote', 'NerdsOnPeriod', 'FSR', 'BafflingQuotes', 'Obey_Nxme']
|
||||||
|
|
||||||
@userinfo = {}
|
@userinfo = {}
|
||||||
|
|
||||||
|
load_model!
|
||||||
end
|
end
|
||||||
|
|
||||||
def model
|
|
||||||
@model_path ||= "model/#{original}.model"
|
|
||||||
if @model.nil?
|
|
||||||
log "Loading model #{model_path}"
|
|
||||||
@model = Ebooks::Model.load(model_path)
|
|
||||||
else
|
|
||||||
@model
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def top100; @top100 ||= model.keywords.take(100); end
|
def top100; @top100 ||= model.keywords.take(100); end
|
||||||
def top20; @top20 ||= model.keywords.take(20); end
|
def top20; @top20 ||= model.keywords.take(20); end
|
||||||
@@ -45,23 +38,22 @@ class CloneBot < Ebooks::Bot
|
|||||||
end
|
end
|
||||||
|
|
||||||
def on_startup
|
def on_startup
|
||||||
model
|
|
||||||
|
|
||||||
scheduler.cron '0 0 * * *' do
|
scheduler.cron '0 0 * * *' do
|
||||||
# Each day at midnight, post a single tweet
|
# Each day at midnight, post a single tweet
|
||||||
tweet model.make_statement
|
tweet(model.make_statement)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def on_direct_message(dm)
|
def on_direct_message(dm)
|
||||||
delay do
|
delay do
|
||||||
reply dm, model.make_response(dm.text)
|
reply(dm, model.make_response(dm.text))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def on_mention(tweet)
|
def on_mention(tweet)
|
||||||
# Become more inclined to pester a user when they talk to us
|
# Become more inclined to pester a user when they talk to us
|
||||||
userinfo(tweet.user.screen_name).pesters_left += 1
|
userinfo(tweet.user.screen_name).pesters_left += 1
|
||||||
|
|
||||||
delay do
|
delay do
|
||||||
reply(tweet, model.make_response(meta(tweet).mentionless, meta(tweet).limit))
|
reply(tweet, model.make_response(meta(tweet).mentionless, meta(tweet).limit))
|
||||||
end
|
end
|
||||||
@@ -69,13 +61,13 @@ class CloneBot < Ebooks::Bot
|
|||||||
|
|
||||||
def on_timeline(tweet)
|
def on_timeline(tweet)
|
||||||
return if tweet.retweeted_status?
|
return if tweet.retweeted_status?
|
||||||
|
return unless can_pester?(tweet.user.screen_name)
|
||||||
|
|
||||||
tokens = Ebooks::NLP.tokenize(tweet.text)
|
tokens = Ebooks::NLP.tokenize(tweet.text)
|
||||||
|
|
||||||
interesting = tokens.find { |t| top100.include?(t.downcase) }
|
interesting = tokens.find { |t| top100.include?(t.downcase) }
|
||||||
very_interesting = tokens.find_all { |t| top20.include?(t.downcase) }.length > 2
|
very_interesting = tokens.find_all { |t| top20.include?(t.downcase) }.length > 2
|
||||||
|
|
||||||
return unless can_pester?(tweet.user.screen_name)
|
|
||||||
|
|
||||||
delay do
|
delay do
|
||||||
if very_interesting
|
if very_interesting
|
||||||
favorite(tweet) if rand < 0.5
|
favorite(tweet) if rand < 0.5
|
||||||
@@ -109,11 +101,11 @@ class CloneBot < Ebooks::Bot
|
|||||||
end
|
end
|
||||||
|
|
||||||
def favorite(tweet)
|
def favorite(tweet)
|
||||||
if !can_follow?(tweet.user.screen_name)
|
if can_follow?(tweet.user.screen_name)
|
||||||
|
super(tweet)
|
||||||
|
else
|
||||||
log "Unfollowing @#{tweet.user.screen_name}"
|
log "Unfollowing @#{tweet.user.screen_name}"
|
||||||
twitter.unfollow(tweet.user.screen_name)
|
twitter.unfollow(tweet.user.screen_name)
|
||||||
else
|
|
||||||
super(tweet)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -124,6 +116,16 @@ class CloneBot < Ebooks::Bot
|
|||||||
log "Not following @#{user.screen_name}"
|
log "Not following @#{user.screen_name}"
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
CloneBot.new("abby_ebooks") do |bot|
|
CloneBot.new("abby_ebooks") do |bot|
|
||||||
|
|||||||
Reference in New Issue
Block a user