realtime-slackbot 0.1.1 → 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.
- checksums.yaml +4 -4
- data/lib/slack/channel.rb +46 -0
- data/lib/slack/message.rb +14 -16
- data/lib/slack/slack.rb +54 -10
- data/lib/slack/user.rb +20 -31
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a79b3cf82fbab72c62706f8a80b4e6412b4f7a64
         | 
| 4 | 
            +
              data.tar.gz: 25d33eb53caf8fd8b6583141b26398a844f6829e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 6c5b65cf27eeee8b1fad311404703fadc0266de28fb6ecfda1a48d4d094183598aa348cb5d6f66d85963d542bd03bf80326ed64e71f73c0e8e3db2d6bfa0b927
         | 
| 7 | 
            +
              data.tar.gz: 06e51f1d0bf0badad597d7929baa0e40c927a9db141803a9b368baca2c8e46fe14612e9b77a675ff495b7bb3f5b9c03e6dcbfcd780df30f7646320deafdc861d
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            module SlackBot
         | 
| 2 | 
            +
              class Channel
         | 
| 3 | 
            +
                def initialize(info, bot)
         | 
| 4 | 
            +
                  @data = info
         | 
| 5 | 
            +
                  @bot = bot
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
                
         | 
| 8 | 
            +
                def [](key)
         | 
| 9 | 
            +
                  @data[key]
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                # Helpers!
         | 
| 13 | 
            +
                def creator
         | 
| 14 | 
            +
                  @bot.user @data['creator']
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                def id; @data['id'] end
         | 
| 17 | 
            +
                def name; @data['name'] end
         | 
| 18 | 
            +
                def user; @bot.user @data['user'] end
         | 
| 19 | 
            +
                def channel?; @data['is_channel'] end
         | 
| 20 | 
            +
                def user_channel?; @data['is_im'] end
         | 
| 21 | 
            +
                def archived?; @data['is_archived'] end
         | 
| 22 | 
            +
                def members
         | 
| 23 | 
            +
                  if user_channel?
         | 
| 24 | 
            +
                    return [self.user]
         | 
| 25 | 
            +
                  else
         | 
| 26 | 
            +
                    return @data['members'].map { |id| @bot.user id }
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                def purpose
         | 
| 30 | 
            +
                  p = @data['purpose']
         | 
| 31 | 
            +
                  p && p['value']
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                def topic
         | 
| 34 | 
            +
                  p = @data['topic']
         | 
| 35 | 
            +
                  p && p['value']
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                def to_s
         | 
| 39 | 
            +
                  if user_channel?
         | 
| 40 | 
            +
                    user.to_s
         | 
| 41 | 
            +
                  else
         | 
| 42 | 
            +
                    "##{name}"
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
    
        data/lib/slack/message.rb
    CHANGED
    
    | @@ -1,10 +1,9 @@ | |
| 1 1 | 
             
            require 'json'
         | 
| 2 | 
            -
            require_relative 'matchers/matcher'
         | 
| 3 2 |  | 
| 4 3 | 
             
            module SlackBot
         | 
| 5 4 | 
             
              class Message
         | 
| 6 | 
            -
                 | 
| 7 | 
            -
             | 
| 5 | 
            +
                attr_reader :user
         | 
| 6 | 
            +
                
         | 
| 8 7 | 
             
                def initialize(data, bot)
         | 
| 9 8 | 
             
                  @data = data
         | 
| 10 9 | 
             
                  @bot = bot
         | 
| @@ -16,11 +15,7 @@ module SlackBot | |
| 16 15 | 
             
                end
         | 
| 17 16 |  | 
| 18 17 | 
             
                def to_s
         | 
| 19 | 
            -
                  "#{@user.name}: #{ | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
                
         | 
| 22 | 
            -
                def user
         | 
| 23 | 
            -
                  @bot.user(@data['user'])
         | 
| 18 | 
            +
                  "#{@user.name}: #{self.text}"
         | 
| 24 19 | 
             
                end
         | 
| 25 20 |  | 
| 26 21 | 
             
                def [](key)
         | 
| @@ -30,14 +25,17 @@ module SlackBot | |
| 30 25 | 
             
                def []=(key, val)
         | 
| 31 26 | 
             
                  @data[key] = val
         | 
| 32 27 | 
             
                end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                 | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                   | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 28 | 
            +
                
         | 
| 29 | 
            +
                # Helpers!
         | 
| 30 | 
            +
                def id; @data['id'] end
         | 
| 31 | 
            +
                def text; @data['text'] end
         | 
| 32 | 
            +
                def time
         | 
| 33 | 
            +
                  ts = @data['ts']
         | 
| 34 | 
            +
                  ts && Time.at(ts.to_i)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
                def channel
         | 
| 37 | 
            +
                  chan = @data['channel']
         | 
| 38 | 
            +
                  @bot.channel chan
         | 
| 41 39 | 
             
                end
         | 
| 42 40 | 
             
              end
         | 
| 43 41 | 
             
            end
         | 
    
        data/lib/slack/slack.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require_relative 'user'
         | 
| 2 2 | 
             
            require_relative 'message'
         | 
| 3 | 
            +
            require_relative 'channel'
         | 
| 3 4 | 
             
            require_relative 'matchers/matcher_group'
         | 
| 4 5 | 
             
            require 'net/http'
         | 
| 5 6 | 
             
            require 'faye/websocket'
         | 
| @@ -83,23 +84,64 @@ module SlackBot | |
| 83 84 | 
             
              end
         | 
| 84 85 |  | 
| 85 86 | 
             
              def post(channel, message)
         | 
| 87 | 
            +
                if channel.is_a? String
         | 
| 88 | 
            +
                  chan = channel
         | 
| 89 | 
            +
                elsif channel.is_a? Channel
         | 
| 90 | 
            +
                  chan = channel.id
         | 
| 91 | 
            +
                else
         | 
| 92 | 
            +
                  raise "Not a valid channel: #{channel}"
         | 
| 93 | 
            +
                end
         | 
| 86 94 | 
             
                data = {
         | 
| 87 95 | 
             
                  id: 1,
         | 
| 88 96 | 
             
                  type: 'message',
         | 
| 89 | 
            -
                  channel:  | 
| 90 | 
            -
                  text: message
         | 
| 97 | 
            +
                  channel: chan,
         | 
| 98 | 
            +
                  text: message.to_s
         | 
| 91 99 | 
             
                }
         | 
| 92 100 | 
             
                @socket.send data.to_json
         | 
| 93 101 | 
             
              end
         | 
| 94 102 |  | 
| 95 | 
            -
              def reply_to( | 
| 96 | 
            -
                post( | 
| 103 | 
            +
              def reply_to(msg, text)
         | 
| 104 | 
            +
                post(msg['channel'], text)
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
              
         | 
| 107 | 
            +
              def load_channels
         | 
| 108 | 
            +
                channels = Hash.new
         | 
| 109 | 
            +
                @team_info['channels'].each do |chan|
         | 
| 110 | 
            +
                  channels[chan['id']] = Channel.new chan, self
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
                channels
         | 
| 113 | 
            +
              end
         | 
| 114 | 
            +
              
         | 
| 115 | 
            +
              def channels
         | 
| 116 | 
            +
                @channels ||= load_channels
         | 
| 97 117 | 
             
              end
         | 
| 98 118 |  | 
| 99 119 | 
             
              def channel(id)
         | 
| 100 | 
            -
                 | 
| 120 | 
            +
                channels[id]
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
              
         | 
| 123 | 
            +
              def load_user_channels
         | 
| 124 | 
            +
                channels = Hash.new
         | 
| 125 | 
            +
                @team_info['ims'].each do |chan|
         | 
| 126 | 
            +
                  channels[chan['user']] = Channel.new chan, self
         | 
| 127 | 
            +
                end
         | 
| 128 | 
            +
                channels
         | 
| 101 129 | 
             
              end
         | 
| 102 130 |  | 
| 131 | 
            +
              def user_channels
         | 
| 132 | 
            +
                @user_channels ||= load_user_channels
         | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
              
         | 
| 135 | 
            +
              def user_channel(user)
         | 
| 136 | 
            +
                if user.is_a? User
         | 
| 137 | 
            +
                  id = user.id
         | 
| 138 | 
            +
                else
         | 
| 139 | 
            +
                  id = user
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
                user_channels[id]
         | 
| 142 | 
            +
              end
         | 
| 143 | 
            +
                  
         | 
| 144 | 
            +
              
         | 
| 103 145 | 
             
              def load_users
         | 
| 104 146 | 
             
                users = Hash.new
         | 
| 105 147 | 
             
                (@team_info['users'] + @team_info['bots']).map do |info| 
         | 
| @@ -110,16 +152,18 @@ module SlackBot | |
| 110 152 |  | 
| 111 153 | 
             
              def users
         | 
| 112 154 | 
             
                @users ||= load_users
         | 
| 113 | 
            -
                @users.values
         | 
| 114 155 | 
             
              end
         | 
| 115 156 |  | 
| 116 157 | 
             
              def user(id)
         | 
| 117 | 
            -
                 | 
| 118 | 
            -
             | 
| 158 | 
            +
                users[id]
         | 
| 159 | 
            +
              end
         | 
| 160 | 
            +
              
         | 
| 161 | 
            +
              def me
         | 
| 162 | 
            +
                @team_info['self']
         | 
| 119 163 | 
             
              end
         | 
| 120 164 |  | 
| 121 | 
            -
              def  | 
| 122 | 
            -
                @team_info[ | 
| 165 | 
            +
              def [](key)
         | 
| 166 | 
            +
                @team_info[key]
         | 
| 123 167 | 
             
              end
         | 
| 124 168 |  | 
| 125 169 | 
             
              def log(type, message)
         | 
    
        data/lib/slack/user.rb
    CHANGED
    
    | @@ -1,32 +1,11 @@ | |
| 1 1 | 
             
            module SlackBot
         | 
| 2 | 
            -
              DEFAULT_ATTRS = [
         | 
| 3 | 
            -
                :id,
         | 
| 4 | 
            -
                :team_id,
         | 
| 5 | 
            -
                :name,
         | 
| 6 | 
            -
                :deleted,
         | 
| 7 | 
            -
                :status,
         | 
| 8 | 
            -
                :color,
         | 
| 9 | 
            -
                :real_name,
         | 
| 10 | 
            -
                :tz,
         | 
| 11 | 
            -
                :tz_label,
         | 
| 12 | 
            -
                :tz_offset,
         | 
| 13 | 
            -
                :profile,
         | 
| 14 | 
            -
                :is_admin,
         | 
| 15 | 
            -
                :is_owner,
         | 
| 16 | 
            -
                :is_primary_owner,
         | 
| 17 | 
            -
                :is_restricted,
         | 
| 18 | 
            -
                :is_ultra_restricted,
         | 
| 19 | 
            -
                :is_bot,
         | 
| 20 | 
            -
                :presence
         | 
| 21 | 
            -
              ]
         | 
| 22 2 | 
             
              class User
         | 
| 23 | 
            -
                
         | 
| 24 3 | 
             
                def initialize(data)
         | 
| 25 4 | 
             
                  @data = data
         | 
| 26 5 | 
             
                end
         | 
| 27 6 |  | 
| 28 7 | 
             
                def to_s
         | 
| 29 | 
            -
                  " | 
| 8 | 
            +
                  "@#{name}"
         | 
| 30 9 | 
             
                end
         | 
| 31 10 |  | 
| 32 11 | 
             
                def pretty_name
         | 
| @@ -34,17 +13,27 @@ module SlackBot | |
| 34 13 | 
             
                end
         | 
| 35 14 |  | 
| 36 15 | 
             
                def pretty_first_name
         | 
| 37 | 
            -
                   | 
| 16 | 
            +
                  first_name || name
         | 
| 38 17 | 
             
                end
         | 
| 39 18 |  | 
| 40 | 
            -
                def  | 
| 41 | 
            -
                   | 
| 42 | 
            -
                    return @data[sym.to_s]
         | 
| 43 | 
            -
                  elsif DEFAULT_ATTRS.include? sym.to_sym
         | 
| 44 | 
            -
                    return nil
         | 
| 45 | 
            -
                  else
         | 
| 46 | 
            -
                    super
         | 
| 47 | 
            -
                  end
         | 
| 19 | 
            +
                def [](key)
         | 
| 20 | 
            +
                  @data[key]
         | 
| 48 21 | 
             
                end
         | 
| 22 | 
            +
                
         | 
| 23 | 
            +
                # Helper methods for getting info
         | 
| 24 | 
            +
                def profile; @data['profile'] || {} end
         | 
| 25 | 
            +
                def real_name; profile['real_name'] end
         | 
| 26 | 
            +
                def first_name; profile['first_name'] end
         | 
| 27 | 
            +
                def last_name; profile['last_name'] end
         | 
| 28 | 
            +
                
         | 
| 29 | 
            +
                def id; @data['id'] end
         | 
| 30 | 
            +
                def name; @data['name'] end
         | 
| 31 | 
            +
                def deleted; @data['deleted'] end
         | 
| 32 | 
            +
                def admin?; @data['admin'] end
         | 
| 33 | 
            +
                def owner?; @data['owner'] end
         | 
| 34 | 
            +
                def primary_owner?; @data['primary_owner'] end
         | 
| 35 | 
            +
                def bot?; @data['is_bot'] end
         | 
| 36 | 
            +
                def presence; @data['presence'] end
         | 
| 37 | 
            +
                def user_channel; @bot.user_channel self end
         | 
| 49 38 | 
             
              end
         | 
| 50 39 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: realtime-slackbot
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Will Richardson
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-03- | 
| 11 | 
            +
            date: 2016-03-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faye-websocket
         | 
| @@ -46,6 +46,7 @@ extra_rdoc_files: [] | |
| 46 46 | 
             
            files:
         | 
| 47 47 | 
             
            - lib/realtime-slackbot.rb
         | 
| 48 48 | 
             
            - lib/slack/bot.rb
         | 
| 49 | 
            +
            - lib/slack/channel.rb
         | 
| 49 50 | 
             
            - lib/slack/matchers/matcher.rb
         | 
| 50 51 | 
             
            - lib/slack/matchers/matcher_group.rb
         | 
| 51 52 | 
             
            - lib/slack/message.rb
         | 
| @@ -76,3 +77,4 @@ signing_key: | |
| 76 77 | 
             
            specification_version: 4
         | 
| 77 78 | 
             
            summary: Slackbot realtime API
         | 
| 78 79 | 
             
            test_files: []
         | 
| 80 | 
            +
            has_rdoc: 
         |