Changeset 0bcb22bf7f4574a9697dddbacc0a23dae618b5a0
- Timestamp:
- 08/11/08 10:49:35
(3 months ago)
- Author:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
- git-committer:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1218437375 +0200
- git-parent:
[0a900b044b1920942ef99be800d7cd9bd8b60f5c]
- git-author:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1218437375 +0200
- Message:
rfc2812: create channels and users for al commands when needed
Always create a user or channel when we receive information about it.
This makes server message parsing much more robust (no more crashes
about NilClass? not having user/channel methods) but has a few subtle
implications about the server state: for example, channels may exist in
the Server object even when the bot is not in the channel itself.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| reebdc69 |
r0bcb22b |
|
| 1156 | 1156 | data[:channel] = argv[2] |
|---|
| 1157 | 1157 | |
|---|
| 1158 | | chan = @server.get_channel(data[:channel]) |
|---|
| 1159 | | unless chan |
|---|
| 1160 | | warning "Received names #{data[:topic].inspect} for channel #{data[:channel].inspect} I was not on" |
|---|
| 1161 | | return |
|---|
| 1162 | | end |
|---|
| | 1158 | chan = @server.channel(data[:channel]) |
|---|
| 1163 | 1159 | |
|---|
| 1164 | 1160 | users = [] |
|---|
| … | … | |
| 1248 | 1244 | data[:nick] = argv[1] |
|---|
| 1249 | 1245 | data[:message] = argv[-1] |
|---|
| 1250 | | user = @server.get_user(data[:nick]) |
|---|
| | 1246 | user = @server.user(data[:nick]) |
|---|
| 1251 | 1247 | user.away = data[:message] |
|---|
| 1252 | 1248 | handle(:away, data) |
|---|
| … | … | |
| 1269 | 1265 | data[:hopcount], data[:real_name] = argv[7].split(" ", 2) |
|---|
| 1270 | 1266 | |
|---|
| 1271 | | user = @server.get_user(data[:nick]) |
|---|
| | 1267 | user = @server.user(data[:nick]) |
|---|
| 1272 | 1268 | |
|---|
| 1273 | 1269 | user.user = data[:user] |
|---|
| … | … | |
| 1279 | 1275 | user.real_name = data[:real_name] |
|---|
| 1280 | 1276 | |
|---|
| 1281 | | channel = @server.get_channel(data[:channel]) |
|---|
| | 1277 | channel = @server.channel(data[:channel]) |
|---|
| 1282 | 1278 | |
|---|
| 1283 | 1279 | channel.add_user(user, :silent=>true) |
|---|
| … | … | |
| 1296 | 1292 | @whois[:real_name] = argv[-1] |
|---|
| 1297 | 1293 | |
|---|
| 1298 | | user = @server.get_user(@whois[:nick]) |
|---|
| | 1294 | user = @server.user(@whois[:nick]) |
|---|
| 1299 | 1295 | user.user = @whois[:user] |
|---|
| 1300 | 1296 | user.host = @whois[:host] |
|---|
| … | … | |
| 1314 | 1310 | @whois ||= Hash.new |
|---|
| 1315 | 1311 | @whois[:nick] = argv[1] |
|---|
| 1316 | | user = @server.get_user(@whois[:nick]) |
|---|
| | 1312 | user = @server.user(@whois[:nick]) |
|---|
| 1317 | 1313 | @whois[:idle] = argv[2].to_i |
|---|
| 1318 | 1314 | user.idle_since = Time.now - @whois[:idle] |
|---|
| … | … | |
| 1331 | 1327 | @whois[:nick] = argv[1] |
|---|
| 1332 | 1328 | @whois[:channels] = [] |
|---|
| 1333 | | user = @server.get_user(@whois[:nick]) |
|---|
| | 1329 | user = @server.user(@whois[:nick]) |
|---|
| 1334 | 1330 | argv[-1].split.each do |prechan| |
|---|
| 1335 | 1331 | pfx = prechan.scan(/[#{@server.supports[:prefix][:prefixes].join}]/) |
|---|
| … | … | |
| 1337 | 1333 | chan = prechan[pfx.length..prechan.length] |
|---|
| 1338 | 1334 | |
|---|
| 1339 | | channel = @server.get_channel(chan) |
|---|
| 1340 | | if channel |
|---|
| 1341 | | channel.add_user(user, :silent => true) |
|---|
| 1342 | | modes.map { |mode| channel.mode[mode].set(user) } |
|---|
| 1343 | | end |
|---|
| | 1335 | channel = @server.channel(chan) |
|---|
| | 1336 | channel.add_user(user, :silent => true) |
|---|
| | 1337 | modes.map { |mode| channel.mode[mode].set(user) } |
|---|
| 1344 | 1338 | |
|---|
| 1345 | 1339 | @whois[:channels] << [chan, modes] |
|---|
| … | … | |
| 1351 | 1345 | data[:channel] = argv[1] |
|---|
| 1352 | 1346 | data[:time] = Time.at(argv[2].to_i) |
|---|
| 1353 | | @server.get_channel(data[:channel]).creation_time=data[:time] |
|---|
| | 1347 | @server.channel(data[:channel]).creation_time=data[:time] |
|---|
| 1354 | 1348 | handle(:creationtime, data) |
|---|
| 1355 | 1349 | when RPL_CHANNEL_URL |
|---|
| 1356 | 1350 | data[:channel] = argv[1] |
|---|
| 1357 | 1351 | data[:url] = argv[2] |
|---|
| 1358 | | @server.get_channel(data[:channel]).url=data[:url].dup |
|---|
| | 1352 | @server.channel(data[:channel]).url=data[:url].dup |
|---|
| 1359 | 1353 | handle(:channel_url, data) |
|---|
| 1360 | 1354 | else |
|---|