mirror of
https://github.com/thewesker/ebooks_example.git
synced 2025-12-20 12:21:16 -05:00
Fix unfollow, add block, fix missing interval assignments
This commit is contained in:
19
boodoo.rb
19
boodoo.rb
@@ -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
24
bots.rb
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user