| CODENOTIFIER | HelpYou are not signed inSign in |
Project: Lingr tools
Revision: 35
Author: dburkes
Date: 02 May 2007 14:41:25
Changes:added support for private messaging
Files:| ... | ...@@ -47,5 +47,5 @@ | |
| 47 | 47 | @counter = resp[:response]["room"]["counter"] if resp[:response]["room"]["counter"] |
| 48 | 48 | @me = resp[:response]["occupant_id"] |
| 49 | @roster = [] | |
| 49 | @roster = {} | |
| 50 | 50 | @high_counter = 0 |
| 51 | 51 | @room_observe_thread = Thread.new { room_observe_loop(cmd[1]) } |
| ... | ...@@ -72,4 +72,11 @@ | |
| 72 | 72 | end |
| 73 | 73 | |
| 74 | when "pmx" | |
| 75 | if cmd.length > 2 and (occupant_id = @roster.index(cmd[1])) | |
| 76 | resp = @c.say(@ticket, cmd[2..-1].join(' '), occupant_id) | |
| 77 | else | |
| 78 | puts "must supply a valid nickname and message" | |
| 79 | end | |
| 80 | ||
| 74 | 81 | when "get_messages" |
| 75 | 82 | resp = @c.get_messages @ticket, @counter |
| ... | ...@@ -123,19 +130,21 @@ | |
| 123 | 130 | updated = false |
| 124 | 131 | |
| 125 | messages_present = response["messages"] and !response["messages"].empty? | |
| 126 | ||
| 127 | if messages_present | |
| 132 | if response["messages"] and response["messages"].length > 0 | |
| 128 | 133 | response["messages"].each do |m| |
| 129 | next if m["id"].to_i <= @high_counter | |
| 134 | next if m["id"] and m["id"].to_i <= @high_counter | |
| 130 | 135 | |
| 131 | 136 | text = m["text"] |
| 132 | 137 | type = m["type"] |
| 133 | 138 | |
| 134 | if type == 'user' | |
| 139 | if type == 'user' or type == 'private' | |
| 135 | 140 | occupant_id = m["occupant_id"] |
| 136 | if occupant_id != @me | |
| 141 | if occupant_id != @me or type == 'private' | |
| 137 | 142 | updated = true |
| 138 | 143 | nickname = m["nickname"] |
| 139 | puts "#{nickname} says: #{text}" | |
| 144 | if type == 'private' | |
| 145 | puts "PRIVATE MESSAGE from #{nickname}: #{text}" | |
| 146 | else | |
| 147 | puts "#{nickname} says: #{text}" | |
| 148 | end | |
| 140 | 149 | end |
| 141 | 150 | elsif type.index('system:') == 0 |
| ... | ...@@ -146,5 +155,5 @@ | |
| 146 | 155 | end |
| 147 | 156 | |
| 148 | @high_counter = m["id"].to_i | |
| 157 | @high_counter = m["id"].to_i if m["id"] | |
| 149 | 158 | end |
| 150 | 159 | else |
| ... | ...@@ -153,5 +162,5 @@ | |
| 153 | 162 | |
| 154 | 163 | roster_present = !response["occupants"].nil? |
| 155 | new_roster = [] | |
| 164 | new_roster = {} | |
| 156 | 165 | |
| 157 | 166 | observers = 0 |
| ... | ...@@ -160,7 +169,7 @@ | |
| 160 | 169 | if roster_present |
| 161 | 170 | response["occupants"].each do |o| |
| 171 | new_roster[o["id"]] = o["nickname"] | |
| 162 | 172 | if !o["nickname"].nil? |
| 163 | 173 | named += 1 |
| 164 | new_roster.push o["nickname"] | |
| 165 | 174 | else |
| 166 | 175 | observers += 1 |
| ... | ...@@ -168,7 +177,5 @@ | |
| 168 | 177 | end |
| 169 | 178 | |
| 170 | new_roster.push "#{named > 0 ? "And " : ""}#{observers} anonymous observer#{observers > 1 ? "s" : ""}" if observers > 0 | |
| 171 | ||
| 172 | if roster_present and ((@roster <=> new_roster) != 0) | |
| 179 | if roster_present and @roster != new_roster | |
| 173 | 180 | updated = true |
| 174 | 181 | @roster = new_roster |
| ... | ...@@ -178,5 +185,6 @@ | |
| 178 | 185 | puts "Room Occupants" |
| 179 | 186 | puts "==============" |
| 180 | puts @roster.join("\n") | |
| 187 | @roster.each_value {|n| puts n if n } | |
| 188 | puts "#{named > 0 ? "And " : ""}#{observers} anonymous observer#{observers > 1 ? "s" : ""}" if observers > 0 | |
| 181 | 189 | end |
| 182 | 190 | end |
| ... | ...@@ -241,4 +249,5 @@ | |
| 241 | 249 | puts "set_nickname <nickname>" |
| 242 | 250 | puts "say <message>" |
| 251 | puts "pmx <nickname> <message>" | |
| 243 | 252 | puts "get_messages" |
| 244 | 253 | puts "exit" |
| ... | ...@@ -199,8 +199,11 @@ | |
| 199 | 199 | end |
| 200 | 200 | |
| 201 | # Say something in a chatroom | |
| 201 | # Say something in a chatroom. If target_occupant_id is not nil, a private message | |
| 202 | # is sent to the indicated occupant. | |
| 202 | 203 | # |
| 203 | def say(ticket, msg) | |
| 204 | do_api :post, 'room/say', { :session => @session, :ticket => ticket, :message => msg } | |
| 204 | def say(ticket, msg, target_occupant_id = nil) | |
| 205 | params = { :session => @session, :ticket => ticket, :message => msg } | |
| 206 | params.merge!({ :occupant_id => target_occupant_id}) if target_occupant_id | |
| 207 | do_api :post, 'room/say', params | |
| 205 | 208 | end |
| 206 | 209 |