campfire-bot 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,54 +0,0 @@
1
- require 'hpricot'
2
- require 'open-uri'
3
- require 'ostruct'
4
- require 'time'
5
- require 'htmlentities'
6
-
7
- # The workings of this plugin are based on http://github.com/paulca/twitter2campfire
8
- # Thanks to Paul Campbell and Contrast! <http://www.contrast.ie/>
9
-
10
- class TwitterEcho < CampfireBot::Plugin
11
-
12
- at_interval 2.minutes, :echo_tweets
13
-
14
- def initialize
15
- @feed = bot.config['twitter_feed']
16
- @hide_replies = bot.config.key?('twitter_hide_replies') ? bot.config['twitter_hide_replies'] : false
17
- @latest = Time.now
18
- end
19
-
20
- def echo_tweets(msg = nil)
21
- recent_tweets.reverse.each do |tweet|
22
- msg.speak("#{coder.decode(tweet.from)}: #{coder.decode(tweet.text)} #{tweet.link}") unless (tweet.text =~ /^@/ && @hide_replies)
23
- end
24
- @latest = latest_tweet.date # next time, only print tweets newer than this
25
- @doc = nil # reset the feed so that next time we can actually any new tweets
26
- end
27
-
28
- protected
29
-
30
- def raw_feed
31
- @doc ||= Hpricot(open(@feed))
32
- end
33
-
34
- def all_tweets
35
- (raw_feed/'entry').map { |e| OpenStruct.new(
36
- :from => (e/'name').inner_html,
37
- :text => (e/'title').inner_html,
38
- :link => (e/'link').first['href'],
39
- :date => Time.parse((e/'published').inner_html)
40
- )}
41
- end
42
-
43
- def latest_tweet
44
- all_tweets.first
45
- end
46
-
47
- def recent_tweets
48
- all_tweets.reject { |e| e.date.to_i <= @latest.to_i }
49
- end
50
-
51
- def coder
52
- HTMLEntities.new
53
- end
54
- end
@@ -1,69 +0,0 @@
1
- # Unfuddle RSS echo plugin. Uses the following config.yml settings:
2
- #
3
- # unfuddle:
4
- # domain: you.unfuddle.com
5
- # rss_path: "/account/activity.rss?aak=aaaaaaaaaaaaabbbbbbbbccccccccddddddeeee0000"
6
- # port: 443
7
- # msg_filters:
8
- # - reassigned
9
- # - closed
10
- # - commented
11
- # - resolved
12
-
13
- require 'rubygems'
14
- require 'simple-rss'
15
- require 'net/https'
16
-
17
- class Unfuddle < CampfireBot::Plugin
18
- at_interval 2.minutes, :fetch_rss
19
- on_command 'unfuddle', :fetch_rss
20
-
21
- def initialize
22
- @last_item = 12.hours.ago
23
- @http = Net::HTTP.new(bot.config['unfuddle']['domain'], bot.config['unfuddle']['port'])
24
-
25
- if bot.config['unfuddle']['port'] == 443
26
- @http.use_ssl = true
27
- @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
28
- end
29
- end
30
-
31
- def fetch_rss(msg)
32
- feed = SimpleRSS.parse(@http.get(bot.config['unfuddle']['rss_path']).body)
33
-
34
- feed.items.each do |item|
35
- msg.speak "#{item.title} #{item.link}" if published?(item) && !filtered?(item.title)
36
- end
37
-
38
- @last_item = feed.items.first.pubDate
39
- rescue => e
40
- msg.speak e
41
- end
42
-
43
- def published?(item)
44
- item.pubDate > @last_item
45
- end
46
-
47
- def filtered?(title)
48
- bot.config['unfuddle']['msg_filters'].each do |msg_filter|
49
- return true if send("#{msg_filter}?", title)
50
- end
51
- return false
52
- end
53
-
54
- def closed?(title)
55
- (title =~ /Closed Ticket:/) != nil
56
- end
57
-
58
- def reassigned?(title)
59
- (title =~ /Reassigned Ticket:/) != nil
60
- end
61
-
62
- def commented?(title)
63
- (title =~ /Created Ticket Comment:/) != nil
64
- end
65
-
66
- def resolved?(title)
67
- (title =~ /Resolved Ticket:/) != nil
68
- end
69
- end
@@ -1,25 +0,0 @@
1
- require 'yahoo-weather'
2
-
3
- class Weather < CampfireBot::Plugin
4
- on_command 'weather', :weather
5
-
6
- def weather(msg)
7
- cities = {
8
- 'adelaide' => '1099805',
9
- 'brisbane' => '1100661',
10
- 'canberra' => '1100968',
11
- 'darwin' => '1101597',
12
- 'hobart' => '1102670',
13
- 'melbourne' => '1103816',
14
- 'perth' => '1098081',
15
- 'sydney' => '1105779'
16
- }
17
-
18
- city_id = cities[(msg[:message]).downcase] # select city, or
19
- city_id ||= cities['canberra'] # use default if no matches
20
-
21
- data = YahooWeather::Client.new.lookup_by_woeid(city_id, 'c')
22
-
23
- msg.speak("#{data.title} - #{data.condition.text}, #{data.condition.temp} deg C (high #{data.forecasts.first.high}, low #{data.forecasts.first.low})")
24
- end
25
- end
@@ -1,43 +0,0 @@
1
- require 'open-uri'
2
- require 'hpricot'
3
- require 'tempfile'
4
-
5
- class Xkcd < CampfireBot::Plugin
6
- BASE_URL = 'http://xkcd.com/'
7
-
8
- on_command 'xkcd', :xkcd
9
-
10
- def xkcd(msg)
11
- # Get the comic info
12
- comic = case msg[:message].split(/\s+/)[0]
13
- when 'latest'
14
- fetch_latest
15
- when 'random'
16
- fetch_random
17
- when /d+/
18
- fetch_comic(msg[:message].split(/\s+/)[0])
19
- else
20
- fetch_random
21
- end
22
-
23
- msg.speak comic['src']
24
- msg.speak comic['title']
25
- end
26
-
27
- private
28
-
29
- def fetch_latest
30
- fetch_comic
31
- end
32
-
33
- def fetch_random
34
- # Fetch the latest page and then find the link to the previous comic.
35
- # This will give us a number to work with (that of the penultimate strip).
36
- fetch_comic(rand((Hpricot(open(BASE_URL))/'//*[@accesskey="p"]').first['href'].gsub(/\D/, '').to_i + 1))
37
- end
38
-
39
- def fetch_comic(id = nil)
40
- # Rely on the comic being the last image on the page with a title attribute
41
- (Hpricot(open("#{BASE_URL}#{id.to_s + '/' if id}"))/'img[@title]').last
42
- end
43
- end