lib/cinch/plugins/links-titles.rb in cinch-links-titles-1.0.1 vs lib/cinch/plugins/links-titles.rb in cinch-links-titles-1.0.2
- old
+ new
@@ -3,116 +3,117 @@
require 'cinch'
require 'cinch/toolbox'
require 'cinch/storage'
require 'time-lord'
-module Cinch::Plugins
- # Plugin to print URL titles in the channel.
- class LinksTitles
- include Cinch::Plugin
- attr_accessor :storage
+module Cinch
+ module Plugins
+ # Plugin to print URL titles in the channel.
+ class LinksTitles
+ include Cinch::Plugin
+ attr_accessor :storage
- # Simple struct object for tracking Links.
- class Link < Struct.new(:nick, :title, :count, :short_url, :url, :time)
- def to_yaml
- { nick: nick, title: title, count: count, short_url: short_url,
- url: url, time: time }
+ # Simple struct object for tracking Links.
+ class Link < Struct.new(:nick, :title, :count, :short_url, :url, :time)
+ def to_yaml
+ { nick: nick, title: title, count: count, short_url: short_url,
+ url: url, time: time }
+ end
end
- end
- listen_to :channel
+ listen_to :channel
- def initialize(*args)
- super
- @storage = Cinch::Storage.new(config[:filename] ||
- 'yaml/links-titles.yaml')
- @storage.data[:history] ||= {}
- @post_stats = config[:stats].nil? ? false : config[:stats]
- end
+ def initialize(*args)
+ super
+ @storage = Cinch::Storage.new(config[:filename] ||
+ 'yaml/links-titles.yaml')
+ @storage.data[:history] ||= {}
+ @post_stats = config[:stats].nil? ? false : config[:stats]
+ end
- def listen(m)
- urls = URI.extract(m.message, %w(http https))
- urls.each do |url|
- # Ensure we have a Channel Object in the History to dump links into.
- @storage.data[:history][m.channel.name] ||= Hash.new
+ def listen(m)
+ urls = URI.extract(m.message, %w(http https))
+ urls.each do |url|
+ # Ensure we have a Channel Object in the History to dump links into.
+ @storage.data[:history][m.channel.name] ||= Hash.new
- # Process link
- link = process_link(url, m.channel.name, m.user.nick)
+ # Process link
+ link = process_link(url, m.channel.name, m.user.nick)
- # Send link title to channel
- post_title(m, link)
+ # Send link title to channel
+ post_title(m, link)
- # Send link stats to channel
- post_stats(m, link)
+ # Send link stats to channel
+ post_stats(m, link)
+ end
+
+ # Don't save unless we found some urls to process
+ @storage.synced_save(@bot) if urls
end
- # Don't save unless we found some urls to process
- @storage.synced_save(@bot) if urls
- end
+ private
- private
-
- def process_link(url, channel, nick)
- # Make sure it conforms to white/black lists before bothering.
- if whitelisted?(url) && !blacklisted?(url)
- return get_or_query_link(url, channel, nick)
- else
- if blacklisted?(url)
- debug "Blacklisted URL was not logged #{url}"
+ def process_link(url, channel, nick)
+ # Make sure it conforms to white/black lists before bothering.
+ if whitelisted?(url) && !blacklisted?(url)
+ return get_or_query_link(url, channel, nick)
else
- debug "Domain not Whitelisted #{url}"
+ if blacklisted?(url)
+ debug "Blacklisted URL was not logged #{url}"
+ else
+ debug "Domain not Whitelisted #{url}"
+ end
+ return nil
end
- return nil
end
- end
- def get_or_query_link(url, channel, nick)
- # If the link was posted already, get the old info
- if @storage.data[:history][channel].key?(url)
- @storage.data[:history][channel][url][:count] += 1
- link = @storage.data[:history][channel][url]
- else
- link = Link.new(nick, Cinch::Toolbox.get_page_title(url) || nil,
- 1, Cinch::Toolbox.shorten(url), url, Time.now)
- @storage.data[:history][channel][url] = link
+ def get_or_query_link(url, channel, nick)
+ # If the link was posted already, get the old info
+ if @storage.data[:history][channel].key?(url)
+ @storage.data[:history][channel][url][:count] += 1
+ link = @storage.data[:history][channel][url]
+ else
+ link = Link.new(nick, Cinch::Toolbox.get_page_title(url) || nil,
+ 1, Cinch::Toolbox.shorten(url), url, Time.now)
+ @storage.data[:history][channel][url] = link
+ end
+ link
end
- link
- end
- def post_title(m, link)
- # Only spam the channel if you have a title
- unless link.nil? || link.title.nil?
+ def post_title(m, link)
+ # Only spam the channel if you have a title
+ return if link.nil? || link.title.nil?
m.reply "#{link.short_url || link.url} ∴ #{link.title}"
end
- end
- def post_stats(m, link)
- # Check to see if we should post stats and if it's been linked
- # more than once.
- if config[:stats]
- if link.count > 1
- # No stats if this person was the first one to link it
- unless link.nick == m.user.nick
- m.reply "That was already linked by #{link.nick} " +
- "#{link.time.ago.to_words}.", true
- end
- end
+ def post_stats(m, link)
+ # Check to see if we should post stats
+ return unless config.key?(:stats)
+
+ # Check to see if it's been linked more than once.
+ return unless link.count > 1
+
+ # No stats if this person was the first one to link it
+ return if link.nick == m.user.nick
+
+ m.reply "That was already linked by #{link.nick} " \
+ "#{link.time.ago.to_words}.", true
end
- end
- def whitelisted?(url)
- return true unless config[:whitelist]
- debug "Checking Whitelist! #{config[:whitelist]} url: #{url}"
- return true if url.match(
- Regexp.new("https?:\/\/.*\.?#{config[:whitelist].join('|')}\."))
- false
- end
+ def whitelisted?(url)
+ return true unless config[:whitelist]
+ debug "Checking Whitelist! #{config[:whitelist]} url: #{url}"
+ return true if url.match(
+ Regexp.new("https?:\/\/.*\.?#{config[:whitelist].join('|')}\."))
+ false
+ end
- def blacklisted?(url)
- return false unless config[:blacklist]
- debug "Checking Blacklist! #{config[:blacklist]} url: #{url}"
- return true if url.match(
- Regexp.new("https?:\/\/.*\.?#{config[:blacklist].join('|')}\."))
- false
+ def blacklisted?(url)
+ return false unless config[:blacklist]
+ debug "Checking Blacklist! #{config[:blacklist]} url: #{url}"
+ return true if url.match(
+ Regexp.new("https?:\/\/.*\.?#{config[:blacklist].join('|')}\."))
+ false
+ end
end
end
end