From 24e8ce5ae327203eca4f7b8dfc0be95cb0d5e2e6 Mon Sep 17 00:00:00 2001 From: Jaiden Mispy <^_^@mispy.me> Date: Tue, 18 Nov 2014 14:31:59 +1100 Subject: [PATCH] Block blacklisted users on contact --- lib/twitter_ebooks/bot.rb | 18 +++++++++--------- spec/bot_spec.rb | 8 ++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/twitter_ebooks/bot.rb b/lib/twitter_ebooks/bot.rb index 442a0d3..62a67a8 100755 --- a/lib/twitter_ebooks/bot.rb +++ b/lib/twitter_ebooks/bot.rb @@ -178,6 +178,11 @@ module Ebooks meta = calc_meta(ev) + if blacklisted?(ev.user.screen_name) + log "Blocking blacklisted user @#{ev.user.screen_name}" + @twitter.block(ev.user.screen_name) + end + if meta[:mentions_bot] log "Mention from @#{ev.user.screen_name}: #{ev.text}" interaction(ev.user.screen_name).receive(ev) @@ -186,7 +191,8 @@ module Ebooks fire(:timeline, ev, meta) end - elsif ev.is_a? Twitter::Streaming::DeletedTweet + elsif ev.is_a?(Twitter::Streaming::DeletedTweet) || + ev.is_a?(Twitter::Streaming::Event) # pass else log ev @@ -223,16 +229,13 @@ module Ebooks end end - # Wrapper for EM.add_timer - # Delays add a greater sense of humanity to bot behaviour def delay(&b) time = @delay.to_a.sample unless @delay.is_a? Integer - EM.add_timer(time, &b) + sleep time end def blacklisted?(username) if @blacklist.include?(username) - log "Saw scary blacklisted user @#{username}" true else false @@ -250,10 +253,7 @@ module Ebooks elsif ev.is_a? Twitter::Tweet meta = calc_meta(ev) - if blacklisted?(ev.user.screen_name) - log "Not replying to blacklisted user @#{ev.user.screen_name}" - return - elsif !interaction(ev.user.screen_name).continue? + if !interaction(ev.user.screen_name).continue? log "Not replying to suspected bot @#{ev.user.screen_name}" return end diff --git a/spec/bot_spec.rb b/spec/bot_spec.rb index 594b601..9a18dd3 100644 --- a/spec/bot_spec.rb +++ b/spec/bot_spec.rb @@ -148,4 +148,12 @@ describe Ebooks::Bot do expect(bot.twitter).to_not have_received(:update) end end + + it "blocks blacklisted users on contact" do + simulate(bot) do + bot.blacklist = ["spammer"] + bot.receive_event(mock_tweet("spammer", "@test_ebooks @m1sp 7")) + expect(bot.twitter).to have_received(:block).with("spammer") + end + end end