termtter 1.0.3 → 1.0.4
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.
- data/Rakefile +1 -1
 - data/lib/plugins/bomb.rb +9 -12
 - data/lib/plugins/expand-tinyurl.rb +12 -3
 - data/lib/plugins/group.rb +10 -6
 - data/lib/plugins/history.rb +21 -10
 - data/lib/plugins/log.rb +10 -10
 - data/lib/plugins/msagent.rb +23 -11
 - data/lib/plugins/notify-send.rb +17 -12
 - data/lib/plugins/say.rb +8 -6
 - data/lib/plugins/scrape.rb +1 -1
 - data/lib/plugins/screen-notify.rb +17 -10
 - data/lib/plugins/standard_plugins.rb +29 -17
 - data/lib/plugins/stdout.rb +35 -54
 - data/lib/plugins/storage.rb +17 -23
 - data/lib/plugins/storage/status.rb +23 -20
 - data/lib/plugins/update_editor.rb +1 -1
 - data/lib/plugins/uri-open.rb +7 -5
 - data/lib/plugins/url_addspace.rb +2 -2
 - data/lib/termtter/api.rb +2 -1
 - data/lib/termtter/client.rb +88 -108
 - data/lib/termtter/command.rb +1 -0
 - data/lib/termtter/hook.rb +5 -0
 - data/lib/termtter/system_extensions.rb +13 -3
 - data/lib/termtter/version.rb +1 -1
 - data/spec/{plugin → plugins}/cool_spec.rb +0 -0
 - data/spec/{plugin → plugins}/english_spec.rb +0 -0
 - data/spec/{plugin → plugins}/favorite_spec.rb +0 -0
 - data/spec/{plugin → plugins}/fib_spec.rb +0 -0
 - data/spec/{plugin → plugins}/filter_spec.rb +0 -0
 - data/spec/{plugin → plugins}/pause_spec.rb +0 -0
 - data/spec/{plugin → plugins}/plugin_spec.rb +0 -0
 - data/spec/{plugin → plugins}/primes_spec.rb +0 -0
 - data/spec/{plugin → plugins}/shell_spec.rb +0 -0
 - data/spec/{plugin → plugins}/sl_spec.rb +0 -0
 - data/spec/{plugin → plugins}/spam_spec.rb +0 -0
 - data/spec/{plugin → plugins}/standard_plugins_spec.rb +0 -0
 - data/spec/{plugin → plugins}/storage/DB_spec.rb +0 -0
 - data/spec/{plugin → plugins}/storage/status_spec.rb +1 -1
 - data/spec/termtter/client_spec.rb +1 -4
 - metadata +17 -17
 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -26,7 +26,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       26 
26 
     | 
    
         
             
              s.add_dependency("json_pure", ">= 1.1.3")
         
     | 
| 
       27 
27 
     | 
    
         
             
              s.add_dependency("highline", ">= 1.5.0")
         
     | 
| 
       28 
28 
     | 
    
         
             
              s.add_dependency("termcolor", ">= 0.3.1")
         
     | 
| 
       29 
     | 
    
         
            -
              s.add_dependency("rubytter", ">= 0. 
     | 
| 
      
 29 
     | 
    
         
            +
              s.add_dependency("rubytter", ">= 0.5.0")
         
     | 
| 
       30 
30 
     | 
    
         
             
              s.add_dependency("sqlite3-ruby", ">= 1.2.4")
         
     | 
| 
       31 
31 
     | 
    
         
             
              s.authors = %w(jugyo ujihisa)
         
     | 
| 
       32 
32 
     | 
    
         
             
              s.email = 'jugyo.org@gmail.com'
         
     | 
    
        data/lib/plugins/bomb.rb
    CHANGED
    
    | 
         @@ -1,24 +1,21 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'enumerator'
         
     | 
| 
       2 
3 
     | 
    
         | 
| 
       3 
4 
     | 
    
         
             
            module Termtter
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
5 
     | 
    
         
             
              module Client
         
     | 
| 
       6 
     | 
    
         
            -
                config.plugins.bomb. 
     | 
| 
       7 
     | 
    
         
            -
                config.plugins.bomb.color.set_default :background, 'red'
         
     | 
| 
      
 6 
     | 
    
         
            +
                config.plugins.bomb.set_default :format, "<on_red><white>%s</white></on_red>"
         
     | 
| 
       8 
7 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
                   
     | 
| 
       11 
     | 
    
         
            -
                   
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                    bg = config.plugins.bomb.color.background
         
     | 
| 
       14 
     | 
    
         
            -
                    statuses = [statuses] unless statuses.instance_of? Array
         
     | 
| 
      
 8 
     | 
    
         
            +
                register_hook(
         
     | 
| 
      
 9 
     | 
    
         
            +
                  :name => :bomb,
         
     | 
| 
      
 10 
     | 
    
         
            +
                  :points => [:post_filter],
         
     | 
| 
      
 11 
     | 
    
         
            +
                  :exec_proc => lambda{|statuses, event|
         
     | 
| 
       15 
12 
     | 
    
         
             
                    statuses.each do |status|
         
     | 
| 
       16 
13 
     | 
    
         
             
                      if /爆発|bomb/ =~ status.text
         
     | 
| 
       17 
     | 
    
         
            -
                        status.text =  
     | 
| 
      
 14 
     | 
    
         
            +
                        status.text = config.plugins.bomb.format % status.text
         
     | 
| 
       18 
15 
     | 
    
         
             
                      end
         
     | 
| 
       19 
16 
     | 
    
         
             
                    end
         
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
                 
     | 
| 
      
 17 
     | 
    
         
            +
                  }
         
     | 
| 
      
 18 
     | 
    
         
            +
                )
         
     | 
| 
       22 
19 
     | 
    
         | 
| 
       23 
20 
     | 
    
         
             
                register_command(
         
     | 
| 
       24 
21 
     | 
    
         
             
                  :name => :bomb, :aliases => [],
         
     | 
| 
         @@ -1,17 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            URL_SHORTTERS = [
         
     | 
| 
      
 4 
     | 
    
         
            +
              { :host => "tinyurl.com", :pattern => %r'(http://tinyurl\.com(/[\w/]+))' },
         
     | 
| 
      
 5 
     | 
    
         
            +
              { :host => "is.gd", :pattern => %r'(http://is\.gd(/[\w/]+))' },
         
     | 
| 
      
 6 
     | 
    
         
            +
            #  { :host => "bit.ly", :pattern => %r'(http://bit\.ly(/[\w/]+))' }
         
     | 
| 
      
 7 
     | 
    
         
            +
            ]
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       3 
9 
     | 
    
         
             
            module Termtter::Client
         
     | 
| 
       4 
10 
     | 
    
         
             
              add_filter do |statuses, event|
         
     | 
| 
       5 
11 
     | 
    
         
             
                statuses.each do |s|
         
     | 
| 
       6 
     | 
    
         
            -
                   
     | 
| 
       7 
     | 
    
         
            -
                     
     | 
| 
      
 12 
     | 
    
         
            +
                  URL_SHORTTERS.each do |site|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    s[:text].gsub!(site[:pattern]) do |m|
         
     | 
| 
      
 14 
     | 
    
         
            +
                      expand_url(site[:host], $2) || $1
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
       8 
16 
     | 
    
         
             
                  end
         
     | 
| 
       9 
17 
     | 
    
         
             
                end
         
     | 
| 
       10 
18 
     | 
    
         
             
                statuses
         
     | 
| 
       11 
19 
     | 
    
         
             
              end
         
     | 
| 
       12 
20 
     | 
    
         
             
            end
         
     | 
| 
       13 
21 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            def  
     | 
| 
      
 22 
     | 
    
         
            +
            def expand_url(host, path)
         
     | 
| 
       15 
23 
     | 
    
         
             
              http_class = Net::HTTP
         
     | 
| 
       16 
24 
     | 
    
         
             
              unless config.proxy.host.nil? or config.proxy.host.empty?
         
     | 
| 
       17 
25 
     | 
    
         
             
                http_class = Net::HTTP::Proxy(config.proxy.host,
         
     | 
| 
         @@ -20,5 +28,6 @@ def expand_tinyurl(path) 
     | 
|
| 
       20 
28 
     | 
    
         
             
                                              config.proxy.password)
         
     | 
| 
       21 
29 
     | 
    
         
             
              end
         
     | 
| 
       22 
30 
     | 
    
         
             
              res = http_class.new('tinyurl.com').head(path)
         
     | 
| 
      
 31 
     | 
    
         
            +
              return nil unless res.code == "301" or res.code == "302"
         
     | 
| 
       23 
32 
     | 
    
         
             
              res['Location']
         
     | 
| 
       24 
33 
     | 
    
         
             
            end
         
     | 
    
        data/lib/plugins/group.rb
    CHANGED
    
    | 
         @@ -22,6 +22,10 @@ module Termtter::Client 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  map {|u| b % u }
         
     | 
| 
       23 
23 
     | 
    
         
             
              end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
              def self.get_group_of(screen_name)
         
     | 
| 
      
 26 
     | 
    
         
            +
                config.plugins.group.groups.select{ |k, v| v.include? screen_name}.map{|a| a.first}
         
     | 
| 
      
 27 
     | 
    
         
            +
              end    
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       25 
29 
     | 
    
         
             
              register_command(
         
     | 
| 
       26 
30 
     | 
    
         
             
               :name => :group,
         
     | 
| 
       27 
31 
     | 
    
         
             
               :aliases => [:g],
         
     | 
| 
         @@ -29,14 +33,14 @@ module Termtter::Client 
     | 
|
| 
       29 
33 
     | 
    
         
             
                 unless arg.empty?
         
     | 
| 
       30 
34 
     | 
    
         
             
                   group_name = arg.to_sym
         
     | 
| 
       31 
35 
     | 
    
         
             
                   if group_name == :all
         
     | 
| 
       32 
     | 
    
         
            -
                      
     | 
| 
      
 36 
     | 
    
         
            +
                     targets = config.plugins.group.groups.values.flatten.uniq
         
     | 
| 
       33 
37 
     | 
    
         
             
                   else
         
     | 
| 
       34 
     | 
    
         
            -
                      
     | 
| 
      
 38 
     | 
    
         
            +
                     targets = config.plugins.group.groups[group_name]
         
     | 
| 
       35 
39 
     | 
    
         
             
                   end
         
     | 
| 
       36 
     | 
    
         
            -
                   statuses =  
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    
     | 
| 
      
 40 
     | 
    
         
            +
                   statuses = targets ? targets.map { |target|
         
     | 
| 
      
 41 
     | 
    
         
            +
                      public_storage[:tweet][target]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    }.flatten.uniq.compact.sort_by{ |s| s[:id]} : []
         
     | 
| 
      
 43 
     | 
    
         
            +
                   output(statuses, :search)
         
     | 
| 
       40 
44 
     | 
    
         
             
                 else
         
     | 
| 
       41 
45 
     | 
    
         
             
                   config.plugins.group.groups.each_pair do |key, value|
         
     | 
| 
       42 
46 
     | 
    
         
             
                     puts "#{key}: #{value.join(',')}"
         
     | 
    
        data/lib/plugins/history.rb
    CHANGED
    
    | 
         @@ -3,9 +3,9 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require 'zlib'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            config.plugins.history.
         
     | 
| 
       6 
     | 
    
         
            -
              set_default(:filename, ' 
     | 
| 
      
 6 
     | 
    
         
            +
              set_default(:filename, Termtter::CONF_DIR + '/history')
         
     | 
| 
       7 
7 
     | 
    
         
             
            config.plugins.history.
         
     | 
| 
       8 
     | 
    
         
            -
              set_default(:keys, [: 
     | 
| 
      
 8 
     | 
    
         
            +
              set_default(:keys, [:users, :status_ids])
         
     | 
| 
       9 
9 
     | 
    
         
             
            config.plugins.history.
         
     | 
| 
       10 
10 
     | 
    
         
             
              set_default(:max_of_history, 100)
         
     | 
| 
       11 
11 
     | 
    
         
             
            config.plugins.history.
         
     | 
| 
         @@ -51,14 +51,17 @@ module Termtter::Client 
     | 
|
| 
       51 
51 
     | 
    
         
             
                puts "history saved(#{File.size(filename)/1000}kb)"
         
     | 
| 
       52 
52 
     | 
    
         
             
              end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
               
     | 
| 
       55 
     | 
    
         
            -
                 
     | 
| 
       56 
     | 
    
         
            -
                 
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 55 
     | 
    
         
            +
                :name => :history_initialize,
         
     | 
| 
      
 56 
     | 
    
         
            +
                :points => [:initialize],
         
     | 
| 
      
 57 
     | 
    
         
            +
                :exec_proc => lambda { load_history; logger.debug('load_history') }
         
     | 
| 
      
 58 
     | 
    
         
            +
              )
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 61 
     | 
    
         
            +
                :name => :history_exit,
         
     | 
| 
      
 62 
     | 
    
         
            +
                :points => [:exit],
         
     | 
| 
      
 63 
     | 
    
         
            +
                :exec_proc => lambda { save_history; logger.debug('save_history') }
         
     | 
| 
      
 64 
     | 
    
         
            +
              )
         
     | 
| 
       62 
65 
     | 
    
         | 
| 
       63 
66 
     | 
    
         
             
              if config.plugins.history.enable_autosave
         
     | 
| 
       64 
67 
     | 
    
         
             
                Termtter::Client.add_task(:interval => config.plugins.history.autosave_interval,
         
     | 
| 
         @@ -75,6 +78,14 @@ module Termtter::Client 
     | 
|
| 
       75 
78 
     | 
    
         
             
               :help => ['save', 'Save hisory']
         
     | 
| 
       76 
79 
     | 
    
         
             
               )
         
     | 
| 
       77 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
              register_command(
         
     | 
| 
      
 82 
     | 
    
         
            +
               :name => :load,
         
     | 
| 
      
 83 
     | 
    
         
            +
               :exec_proc => lambda{|arg|
         
     | 
| 
      
 84 
     | 
    
         
            +
                 load_history
         
     | 
| 
      
 85 
     | 
    
         
            +
               },
         
     | 
| 
      
 86 
     | 
    
         
            +
               :help => ['load', 'Load hisory']
         
     | 
| 
      
 87 
     | 
    
         
            +
               )
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
       78 
89 
     | 
    
         | 
| 
       79 
90 
     | 
    
         
             
            end
         
     | 
| 
       80 
91 
     | 
    
         | 
    
        data/lib/plugins/log.rb
    CHANGED
    
    | 
         @@ -6,19 +6,19 @@ module Termtter::Client 
     | 
|
| 
       6 
6 
     | 
    
         
             
              config.plugins.log.set_default('max_size', 1/0.0)
         
     | 
| 
       7 
7 
     | 
    
         
             
              config.plugins.log.set_default('print_max_size', 30)
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
               
     | 
| 
       10 
     | 
    
         
            -
                 
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 10 
     | 
    
         
            +
                :name => :log,
         
     | 
| 
      
 11 
     | 
    
         
            +
                :points => [:pre_filter],
         
     | 
| 
      
 12 
     | 
    
         
            +
                :exec_proc => lambda {|statuses, event|
         
     | 
| 
       12 
13 
     | 
    
         
             
                  # log(sequential storage)
         
     | 
| 
       13 
14 
     | 
    
         
             
                  public_storage[:log] += statuses
         
     | 
| 
       14 
15 
     | 
    
         
             
                  max_size = config.plugins.log.max_size
         
     | 
| 
       15 
16 
     | 
    
         
             
                  if public_storage[:log].size > max_size
         
     | 
| 
       16 
17 
     | 
    
         
             
                    public_storage[:log] = public_storage[:log][-max_size..-1]
         
     | 
| 
       17 
18 
     | 
    
         
             
                  end
         
     | 
| 
       18 
     | 
    
         
            -
                  public_storage[:log] = public_storage[:log].uniq.sort_by{| 
     | 
| 
      
 19 
     | 
    
         
            +
                  public_storage[:log] = public_storage[:log].uniq.sort_by{|s| s.created_at} if statuses.first
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
                  # tweet(storage for each user)
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
22 
     | 
    
         
             
                  statuses.each do |s|
         
     | 
| 
       23 
23 
     | 
    
         
             
                    public_storage[:tweet][s.user.screen_name] = [] unless public_storage[:tweet][s.user.screen_name]
         
     | 
| 
       24 
24 
     | 
    
         
             
                    public_storage[:tweet][s.user.screen_name] << s
         
     | 
| 
         @@ -26,8 +26,8 @@ module Termtter::Client 
     | 
|
| 
       26 
26 
     | 
    
         
             
                      public_storage[:tweet] = public_storage[:tweet][-max_size..-1]
         
     | 
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
               
     | 
| 
      
 29 
     | 
    
         
            +
                }
         
     | 
| 
      
 30 
     | 
    
         
            +
              )
         
     | 
| 
       31 
31 
     | 
    
         | 
| 
       32 
32 
     | 
    
         
             
              register_command(
         
     | 
| 
       33 
33 
     | 
    
         
             
               :name => :log,
         
     | 
| 
         @@ -37,7 +37,7 @@ module Termtter::Client 
     | 
|
| 
       37 
37 
     | 
    
         
             
                   statuses = public_storage[:log]
         
     | 
| 
       38 
38 
     | 
    
         
             
                   print_max = config.plugins.log.print_max_size
         
     | 
| 
       39 
39 
     | 
    
         
             
                   print_max = 0 if statuses.size < print_max
         
     | 
| 
       40 
     | 
    
         
            -
                    
     | 
| 
      
 40 
     | 
    
         
            +
                   output(statuses[-print_max..-1], :search)
         
     | 
| 
       41 
41 
     | 
    
         
             
                 else
         
     | 
| 
       42 
42 
     | 
    
         
             
                   # log (user) (max)
         
     | 
| 
       43 
43 
     | 
    
         
             
                   vars = arg.split(' ')
         
     | 
| 
         @@ -45,7 +45,7 @@ module Termtter::Client 
     | 
|
| 
       45 
45 
     | 
    
         
             
                   id = vars
         
     | 
| 
       46 
46 
     | 
    
         
             
                   statuses = id.first ? public_storage[:log].select{ |s| id.include? s.user.screen_name} : public_storage[:log]
         
     | 
| 
       47 
47 
     | 
    
         
             
                   print_max = 0 if statuses.size < print_max
         
     | 
| 
       48 
     | 
    
         
            -
                    
     | 
| 
      
 48 
     | 
    
         
            +
                   output(statuses[-print_max..-1], :search)
         
     | 
| 
       49 
49 
     | 
    
         
             
                 end
         
     | 
| 
       50 
50 
     | 
    
         
             
               },
         
     | 
| 
       51 
51 
     | 
    
         
             
               :completion_proc => lambda {|cmd, arg|
         
     | 
| 
         @@ -60,7 +60,7 @@ module Termtter::Client 
     | 
|
| 
       60 
60 
     | 
    
         
             
                unless arg.strip.empty?
         
     | 
| 
       61 
61 
     | 
    
         
             
                  pat = Regexp.new arg
         
     | 
| 
       62 
62 
     | 
    
         
             
                  statuses = public_storage[:log].select { |s| s.text =~ pat }
         
     | 
| 
       63 
     | 
    
         
            -
                   
     | 
| 
      
 63 
     | 
    
         
            +
                  output(statuses, :search)
         
     | 
| 
       64 
64 
     | 
    
         
             
                 end
         
     | 
| 
       65 
65 
     | 
    
         
             
               },
         
     | 
| 
       66 
66 
     | 
    
         
             
               :help => [ 'search_log WORD', 'Search log for WORD' ]
         
     | 
    
        data/lib/plugins/msagent.rb
    CHANGED
    
    | 
         @@ -11,16 +11,28 @@ achar = agent.characters.character("Merlin") 
     | 
|
| 
       11 
11 
     | 
    
         
             
            achar.languageID = 0x411
         
     | 
| 
       12 
12 
     | 
    
         
             
            achar.show
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
            Termtter::Client. 
     | 
| 
       15 
     | 
    
         
            -
               
     | 
| 
      
 14 
     | 
    
         
            +
            Termtter::Client.register_hook(
         
     | 
| 
      
 15 
     | 
    
         
            +
              :name => :msagent,
         
     | 
| 
      
 16 
     | 
    
         
            +
              :points => [:post_filter],
         
     | 
| 
      
 17 
     | 
    
         
            +
              :exec_proc => lambda {|statuses, event|
         
     | 
| 
      
 18 
     | 
    
         
            +
                if !statuses.empty? && event == :update_friends_timeline
         
     | 
| 
      
 19 
     | 
    
         
            +
                  Thread.start do
         
     | 
| 
      
 20 
     | 
    
         
            +
                    statuses.reverse.each do |s|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      req = achar.speak("#{s[:screen_name]}: #{s[:post_text]}".tosjis)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      sleep 1
         
     | 
| 
      
 23 
     | 
    
         
            +
                      WIN32OLE_EVENT.message_loop
         
     | 
| 
      
 24 
     | 
    
         
            +
                      achar.stop(req)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              }
         
     | 
| 
      
 29 
     | 
    
         
            +
            )
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            Termtter::Client.register_hook(
         
     | 
| 
      
 32 
     | 
    
         
            +
              :name => :msagent_exit,
         
     | 
| 
      
 33 
     | 
    
         
            +
              :points => [:exit],
         
     | 
| 
      
 34 
     | 
    
         
            +
              :exec_proc => lambda {
         
     | 
| 
       16 
35 
     | 
    
         
             
                achar.hide   
         
     | 
| 
       17 
36 
     | 
    
         
             
                GC.start
         
     | 
| 
       18 
     | 
    
         
            -
               
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  req = achar.speak("#{s.user.screen_name}: #{s.text}".tosjis)
         
     | 
| 
       21 
     | 
    
         
            -
                  sleep 3
         
     | 
| 
       22 
     | 
    
         
            -
                  WIN32OLE_EVENT.message_loop
         
     | 
| 
       23 
     | 
    
         
            -
                  achar.stop(req)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
            end
         
     | 
| 
      
 37 
     | 
    
         
            +
              }
         
     | 
| 
      
 38 
     | 
    
         
            +
            )
         
     | 
    
        data/lib/plugins/notify-send.rb
    CHANGED
    
    | 
         @@ -1,17 +1,22 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- coding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            Termtter::Client. 
     | 
| 
       4 
     | 
    
         
            -
               
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            Termtter::Client.register_hook(
         
     | 
| 
      
 4 
     | 
    
         
            +
              :name => :notify_send,
         
     | 
| 
      
 5 
     | 
    
         
            +
              :points => [:post_filter],
         
     | 
| 
      
 6 
     | 
    
         
            +
              :exec_proc => lambda {|statuses, event|
         
     | 
| 
      
 7 
     | 
    
         
            +
                if event == :update_friends_timeline
         
     | 
| 
      
 8 
     | 
    
         
            +
                  max = 10
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
                  text = statuses.take(max).map {|s|
         
     | 
| 
      
 11 
     | 
    
         
            +
                    status_text = CGI.escapeHTML(s[:post_text])
         
     | 
| 
      
 12 
     | 
    
         
            +
                    status_text.gsub!(%r{https?://[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+},'<a href="\0">\0</a>')
         
     | 
| 
      
 13 
     | 
    
         
            +
                    "<b>#{s[:screen_name]}:</b> <span font=\"9.0\">#{status_text}</span>"
         
     | 
| 
      
 14 
     | 
    
         
            +
                  }.join("\n")
         
     | 
| 
       12 
15 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                  text << %Q|\n<a href="http://twitter.com/">more...</a>| if statuses.size > max
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  system 'notify-send', 'Termtter', text, '-t', '60000'
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              }
         
     | 
| 
      
 21 
     | 
    
         
            +
            )
         
     | 
| 
       14 
22 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                system 'notify-send', 'Termtter', text, '-t', '60000'
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/plugins/say.rb
    CHANGED
    
    | 
         @@ -10,14 +10,16 @@ def say(who, what) 
     | 
|
| 
       10 
10 
     | 
    
         
             
            end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            module Termtter::Client
         
     | 
| 
       13 
     | 
    
         
            -
               
     | 
| 
       14 
     | 
    
         
            -
                 
     | 
| 
      
 13 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 14 
     | 
    
         
            +
                :name => :say,
         
     | 
| 
      
 15 
     | 
    
         
            +
                :points => [:post_filter],
         
     | 
| 
      
 16 
     | 
    
         
            +
                :exec_proc => lambda {|statuses, event|
         
     | 
| 
       15 
17 
     | 
    
         
             
                  statuses.reverse.each do |s|
         
     | 
| 
       16 
     | 
    
         
            -
                    text_without_uri = s. 
     | 
| 
       17 
     | 
    
         
            -
                    say s 
     | 
| 
      
 18 
     | 
    
         
            +
                    text_without_uri = s[:post_text].gsub(%r|https?://[^\s]+|, 'U.R.I.')
         
     | 
| 
      
 19 
     | 
    
         
            +
                    say s[:screen_name], text_without_uri
         
     | 
| 
       18 
20 
     | 
    
         
             
                  end
         
     | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
       20 
     | 
    
         
            -
               
     | 
| 
      
 21 
     | 
    
         
            +
                }
         
     | 
| 
      
 22 
     | 
    
         
            +
              )
         
     | 
| 
       21 
23 
     | 
    
         
             
            end
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
25 
     | 
    
         
             
            # KNOWN BUG:
         
     | 
    
        data/lib/plugins/scrape.rb
    CHANGED
    
    | 
         @@ -29,7 +29,7 @@ module Termtter::Client 
     | 
|
| 
       29 
29 
     | 
    
         
             
                                   members += config.plugins.group.groups[group]
         
     | 
| 
       30 
30 
     | 
    
         
             
                                 end
         
     | 
| 
       31 
31 
     | 
    
         
             
                                 statuses = scrape_members(members.uniq.compact.sort)
         
     | 
| 
       32 
     | 
    
         
            -
                                  
     | 
| 
      
 32 
     | 
    
         
            +
                                 output(statuses_to_hash(statuses), :pre_filter)
         
     | 
| 
       33 
33 
     | 
    
         
             
                               },
         
     | 
| 
       34 
34 
     | 
    
         
             
                               :completion_proc => lambda {|cmd, args|
         
     | 
| 
       35 
35 
     | 
    
         
             
                                 arg = args.split(' ').last
         
     | 
| 
         @@ -1,13 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
       1 
2 
     | 
    
         | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              config.screen_notify.format = "[termtter] @%s"
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
      
 3 
     | 
    
         
            +
            config.screen_notify.set_default(:format, "[termtter] %s")
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            Termtter::Client 
     | 
| 
       7 
     | 
    
         
            -
               
     | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Termtter::Client
         
     | 
| 
      
 6 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 7 
     | 
    
         
            +
                :name => :screen_notify,
         
     | 
| 
      
 8 
     | 
    
         
            +
                :points => [:post_filter],
         
     | 
| 
      
 9 
     | 
    
         
            +
                :exec_proc => lambda{|statuses, event|
         
     | 
| 
      
 10 
     | 
    
         
            +
                  return unless event = :update_friends_timeline
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Thread.new(statuses) do |ss|
         
     | 
| 
      
 12 
     | 
    
         
            +
                    ss.each do |s|
         
     | 
| 
      
 13 
     | 
    
         
            +
                      msg = config.screen_notify.format % s.user.screen_name
         
     | 
| 
      
 14 
     | 
    
         
            +
                      system 'screen', '-X', 'eval', "bell_msg '#{msg}'", 'bell'
         
     | 
| 
      
 15 
     | 
    
         
            +
                      sleep 1
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                }
         
     | 
| 
      
 19 
     | 
    
         
            +
              )
         
     | 
| 
       13 
20 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2,6 +2,10 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'erb'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            config.plugins.standard.set_default(
         
     | 
| 
      
 6 
     | 
    
         
            +
             :limit_format,
         
     | 
| 
      
 7 
     | 
    
         
            +
             '<<%=remaining_color%>><%=limit.remaining_hits%></<%=remaining_color%>>/<%=limit.hourly_limit%> until <%=limit.reset_time%> (<%=remaining_time%> remaining)')
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       5 
9 
     | 
    
         
             
            module Termtter::Client
         
     | 
| 
       6 
10 
     | 
    
         | 
| 
       7 
11 
     | 
    
         
             
              # standard commands
         
     | 
| 
         @@ -10,8 +14,9 @@ module Termtter::Client 
     | 
|
| 
       10 
14 
     | 
    
         
             
                :name => :update, :aliases => [:u],
         
     | 
| 
       11 
15 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       12 
16 
     | 
    
         
             
                  unless arg =~ /^\s*$/
         
     | 
| 
      
 17 
     | 
    
         
            +
                    # TODO: Change to able to disable erb.
         
     | 
| 
       13 
18 
     | 
    
         
             
                    text = ERB.new(arg).result(binding).gsub(/\n/, ' ')
         
     | 
| 
       14 
     | 
    
         
            -
                    result = Termtter::API.twitter.update(text 
     | 
| 
      
 19 
     | 
    
         
            +
                    result = Termtter::API.twitter.update(text)
         
     | 
| 
       15 
20 
     | 
    
         
             
                    puts "=> #{text}"
         
     | 
| 
       16 
21 
     | 
    
         
             
                    result
         
     | 
| 
       17 
22 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -78,11 +83,14 @@ module Termtter::Client 
     | 
|
| 
       78 
83 
     | 
    
         
             
              register_command(
         
     | 
| 
       79 
84 
     | 
    
         
             
                :name => :list, :aliases => [:l],
         
     | 
| 
       80 
85 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       81 
     | 
    
         
            -
                   
     | 
| 
       82 
     | 
    
         
            -
                     
     | 
| 
      
 86 
     | 
    
         
            +
                  if arg.empty?
         
     | 
| 
      
 87 
     | 
    
         
            +
                    event = :list_friends_timeline
         
     | 
| 
      
 88 
     | 
    
         
            +
                    statuses = Termtter::API.twitter.friends_timeline()
         
     | 
| 
       83 
89 
     | 
    
         
             
                  else
         
     | 
| 
       84 
     | 
    
         
            -
                     
     | 
| 
      
 90 
     | 
    
         
            +
                    event = :list_user_timeline
         
     | 
| 
      
 91 
     | 
    
         
            +
                    statuses = Termtter::API.twitter.user_timeline(arg)
         
     | 
| 
       85 
92 
     | 
    
         
             
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  output(statuses, event)
         
     | 
| 
       86 
94 
     | 
    
         
             
                },
         
     | 
| 
       87 
95 
     | 
    
         
             
                :completion_proc => lambda {|cmd, arg|
         
     | 
| 
       88 
96 
     | 
    
         
             
                  find_user_candidates arg, "#{cmd} %s"
         
     | 
| 
         @@ -92,14 +100,15 @@ module Termtter::Client 
     | 
|
| 
       92 
100 
     | 
    
         
             
              register_command(
         
     | 
| 
       93 
101 
     | 
    
         
             
                :name => :search, :aliases => [:s],
         
     | 
| 
       94 
102 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       95 
     | 
    
         
            -
                   
     | 
| 
      
 103 
     | 
    
         
            +
                  statuses = Termtter::API.twitter.search(arg)
         
     | 
| 
      
 104 
     | 
    
         
            +
                  output(statuses, :search)
         
     | 
| 
       96 
105 
     | 
    
         
             
                }
         
     | 
| 
       97 
106 
     | 
    
         
             
              )
         
     | 
| 
       98 
107 
     | 
    
         | 
| 
       99 
108 
     | 
    
         
             
              register_command(
         
     | 
| 
       100 
109 
     | 
    
         
             
                :name => :replies, :aliases => [:r],
         
     | 
| 
       101 
110 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       102 
     | 
    
         
            -
                   
     | 
| 
      
 111 
     | 
    
         
            +
                  output(Termtter::API.twitter.replies(), :replies)
         
     | 
| 
       103 
112 
     | 
    
         
             
                }
         
     | 
| 
       104 
113 
     | 
    
         
             
              )
         
     | 
| 
       105 
114 
     | 
    
         | 
| 
         @@ -107,7 +116,7 @@ module Termtter::Client 
     | 
|
| 
       107 
116 
     | 
    
         
             
                :name => :show,
         
     | 
| 
       108 
117 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       109 
118 
     | 
    
         
             
                  id = arg.gsub(/.*:\s*/, '')
         
     | 
| 
       110 
     | 
    
         
            -
                   
     | 
| 
      
 119 
     | 
    
         
            +
                  output([Termtter::API.twitter.show(id)], :show)
         
     | 
| 
       111 
120 
     | 
    
         
             
                },
         
     | 
| 
       112 
121 
     | 
    
         
             
                :completion_proc => lambda {|cmd, arg|
         
     | 
| 
       113 
122 
     | 
    
         
             
                  case arg
         
     | 
| 
         @@ -128,7 +137,8 @@ module Termtter::Client 
     | 
|
| 
       128 
137 
     | 
    
         
             
                :name => :shows,
         
     | 
| 
       129 
138 
     | 
    
         
             
                :exec_proc => lambda {|arg|
         
     | 
| 
       130 
139 
     | 
    
         
             
                  id = arg.gsub(/.*:\s*/, '')
         
     | 
| 
       131 
     | 
    
         
            -
                   
     | 
| 
      
 140 
     | 
    
         
            +
                  # TODO: Implement
         
     | 
| 
      
 141 
     | 
    
         
            +
                  output([Termtter::API.twitter.show(id)], :show)
         
     | 
| 
       132 
142 
     | 
    
         
             
                },
         
     | 
| 
       133 
143 
     | 
    
         
             
                :completion_proc => get_command(:show).completion_proc
         
     | 
| 
       134 
144 
     | 
    
         
             
              )
         
     | 
| 
         @@ -176,7 +186,8 @@ module Termtter::Client 
     | 
|
| 
       176 
186 
     | 
    
         
             
                    when 0..0.2   then :red
         
     | 
| 
       177 
187 
     | 
    
         
             
                    else               :green
         
     | 
| 
       178 
188 
     | 
    
         
             
                    end
         
     | 
| 
       179 
     | 
    
         
            -
                   
     | 
| 
      
 189 
     | 
    
         
            +
                  erbed_text = ERB.new(config.plugins.standard.limit_format).result(binding)
         
     | 
| 
      
 190 
     | 
    
         
            +
                  puts TermColor.parse(erbed_text)
         
     | 
| 
       180 
191 
     | 
    
         
             
                },
         
     | 
| 
       181 
192 
     | 
    
         
             
                :help => ["limit,lm", "Show the API limit status"]
         
     | 
| 
       182 
193 
     | 
    
         
             
              )
         
     | 
| 
         @@ -229,7 +240,7 @@ module Termtter::Client 
     | 
|
| 
       229 
240 
     | 
    
         
             
                    ["list,l", "List the posts in your friends timeline"],
         
     | 
| 
       230 
241 
     | 
    
         
             
                    ["list,l USERNAME", "List the posts in the the given user's timeline"],
         
     | 
| 
       231 
242 
     | 
    
         
             
                    ["update,u TEXT", "Post a new message"],
         
     | 
| 
       232 
     | 
    
         
            -
                    ["direct,d  
     | 
| 
      
 243 
     | 
    
         
            +
                    ["direct,d USERNAME TEXT", "Send direct message"],
         
     | 
| 
       233 
244 
     | 
    
         
             
                    ["profile,p USERNAME", "Show user's profile"],
         
     | 
| 
       234 
245 
     | 
    
         
             
                    ["replies,r", "List the most recent @replies for the authenticating user"],
         
     | 
| 
       235 
246 
     | 
    
         
             
                    ["search,s TEXT", "Search for Twitter"],
         
     | 
| 
         @@ -272,17 +283,18 @@ module Termtter::Client 
     | 
|
| 
       272 
283 
     | 
    
         
             
              public_storage[:users] ||= Set.new
         
     | 
| 
       273 
284 
     | 
    
         
             
              public_storage[:status_ids] ||= Set.new
         
     | 
| 
       274 
285 
     | 
    
         | 
| 
       275 
     | 
    
         
            -
               
     | 
| 
       276 
     | 
    
         
            -
                 
     | 
| 
       277 
     | 
    
         
            -
                 
     | 
| 
      
 286 
     | 
    
         
            +
              register_hook(
         
     | 
| 
      
 287 
     | 
    
         
            +
                :name => :for_completion,
         
     | 
| 
      
 288 
     | 
    
         
            +
                :points => [:pre_filter],
         
     | 
| 
      
 289 
     | 
    
         
            +
                :exec_proc => lambda {|statuses, event|
         
     | 
| 
       278 
290 
     | 
    
         
             
                  statuses.each do |s|
         
     | 
| 
       279 
291 
     | 
    
         
             
                    public_storage[:users].add(s.user.screen_name)
         
     | 
| 
       280 
292 
     | 
    
         
             
                    public_storage[:users] += s.text.scan(/@([a-zA-Z_0-9]*)/).flatten
         
     | 
| 
       281 
     | 
    
         
            -
                    public_storage[:status_ids].add(s.id 
     | 
| 
       282 
     | 
    
         
            -
                    public_storage[:status_ids].add(s.in_reply_to_status_id 
     | 
| 
      
 293 
     | 
    
         
            +
                    public_storage[:status_ids].add(s.id)
         
     | 
| 
      
 294 
     | 
    
         
            +
                    public_storage[:status_ids].add(s.in_reply_to_status_id) if s.in_reply_to_status_id
         
     | 
| 
       283 
295 
     | 
    
         
             
                  end
         
     | 
| 
       284 
     | 
    
         
            -
                 
     | 
| 
       285 
     | 
    
         
            -
               
     | 
| 
      
 296 
     | 
    
         
            +
                }
         
     | 
| 
      
 297 
     | 
    
         
            +
              )
         
     | 
| 
       286 
298 
     | 
    
         | 
| 
       287 
299 
     | 
    
         
             
              def self.find_status_ids(text)
         
     | 
| 
       288 
300 
     | 
    
         
             
                public_storage[:status_ids].select{|id| id =~ /#{Regexp.quote(text)}/}
         
     |