campfire-bot 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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