Fix unfollow, add block, fix missing interval assignments

This commit is contained in:
Joel McCoy
2015-01-02 18:05:36 -05:00
parent dc3ec3ac89
commit 03e7d4e28f
3 changed files with 31 additions and 13 deletions

View File

@@ -63,6 +63,13 @@ class Ebooks::Boodoo::BoodooBot < Ebooks::Bot
'access_token', 'access_token_secret', 'access_token', 'access_token_secret',
'bot_name', 'original'] 'bot_name', 'original']
# Unfollow a user -- OVERRIDE TO FIX TYPO
# @param user [String] username or user id
def unfollow(user, *args)
log "Unfollowing #{user}"
twitter.unfollow(user, *args)
end
# A rough error-catch/retry for rate limit, dupe fave, server timeouts # A rough error-catch/retry for rate limit, dupe fave, server timeouts
def catch_twitter def catch_twitter
begin begin
@@ -127,6 +134,16 @@ class Ebooks::Boodoo::BoodooBot < Ebooks::Bot
@archive = Archive.new(@original, @archive_path, make_client).sync @archive = Archive.new(@original, @archive_path, make_client).sync
end end
def block(targets)
if targets.kind_of? String
targets = parse_array(targets)
end
targets.each do |target|
log "Blocking @#{target}"
Twitter::REST::Request.new(@twitter, :post, "1.1/blocks/create.json", {:screen_name => target}).perform
end
end
def make_model! def make_model!
log "Updating model: #{@model_path}" log "Updating model: #{@model_path}"
Ebooks::Model.consume(@archive_path).save(@model_path) Ebooks::Model.consume(@archive_path).save(@model_path)
@@ -140,7 +157,7 @@ class Ebooks::Boodoo::BoodooBot < Ebooks::Bot
def missing_fields def missing_fields
$required_fields.select { |field| $required_fields.select { |field|
p "#{field} = #{send(field)}" # p "#{field} = #{send(field)}"
send(field).nil? || send(field).empty? send(field).nil? || send(field).empty?
} }
end end

24
bots.rb
View File

@@ -37,11 +37,13 @@ class BoodooBot
@access_token = SETTINGS['ACCESS_TOKEN'] @access_token = SETTINGS['ACCESS_TOKEN']
@access_token_secret =SETTINGS['ACCESS_TOKEN_SECRET'] @access_token_secret =SETTINGS['ACCESS_TOKEN_SECRET']
@tweet_interval = SETTINGS['TWEET_INTERVAL'] @tweet_interval = SETTINGS['TWEET_INTERVAL']
@update_follows_interval = SETTINGS['UPDATE_FOLLOWS_INTERVAL']
@refresh_model_interval = SETTINGS['REFRESH_MODEL_INTERVAL']
# @pester_period = SETTINGS['PESTER_PERIOD'] # @pester_period = SETTINGS['PESTER_PERIOD']
# String fields forced to downcase: # String fields forced to downcase:
@bot_name = SETTINGS['BOT_NAME'].downcase @bot_name = SETTINGS['BOT_NAME']
@original = SETTINGS['SOURCE_USERNAME'].downcase @original = SETTINGS['SOURCE_USERNAME']
# Array fields are CSV or SSV # Array fields are CSV or SSV
@blacklist = parse_array(SETTINGS['BLACKLIST']) @blacklist = parse_array(SETTINGS['BLACKLIST'])
@@ -109,23 +111,21 @@ class BoodooBot
end end
end end
def on_direct_message(dm) def on_message(dm)
from_owner = dm.user.screen_name.downcase == @original from_owner = dm.sender.screen_name.downcase == @original.downcase
log "[DM from owner? #{from_owner}]"
if from_owner if from_owner
action = dm.text.split.first.downcase action = dm.text.split.first.downcase
strip_re = Regexp.new("^#{command}\s*", "i") strip_re = Regexp.new("^#{action}\s*", "i")
payload = dm.text.sub(strip_re, "") payload = dm.text.sub(strip_re, "")
#TODO: Add blacklist/whitelist/reject(banned phrase) #TODO: Add blacklist/whitelist/reject(banned phrase)
#TODO? Move this into a DMController class or equivalent? #TODO? Move this into a DMController class or equivalent?
case action case action
when "tweet" when "tweet"
tweet model.make_response(payload, 140) tweet model.make_response(payload, 140)
when "follow" when "follow", "unfollow", "block"
follow payload payload = parse_array(payload.gsub("@", ''), / *[,; ]+ */) # Strip @s and make array
when "unfollow" send(action.to_sym, payload)
unfollow payload
when "block"
block payload
when "mention" when "mention"
pre = payload + " " pre = payload + " "
limit = 140 - pre.size limit = 140 - pre.size
@@ -134,7 +134,7 @@ class BoodooBot
when "cheating" when "cheating"
tweet payload tweet payload
else else
log "Don't have behavior for command: #{command}" log "Don't have behavior for action: #{action}"
reply(dm, model.make_response(dm.text)) reply(dm, model.make_response(dm.text))
end end
else else

View File

@@ -16,3 +16,4 @@ TIMELINE_DELAY=10..600
TIMEOUT_SLEEP=5 TIMEOUT_SLEEP=5
MAX_ERROR_RETRIES=10 MAX_ERROR_RETRIES=10
UPDATE_FOLLOWS_INTERVAL=90m UPDATE_FOLLOWS_INTERVAL=90m
REFRESH_MODEL_INTERVAL=8h