/ Work

[Python tech.] pyMSN 大蛇版 MSN 撞牆初探

http://telepathy.freedesktop.org/wiki/Pymsn

update, 這個 Python 實在是大的要命,測試過後發現以下問題:

  • notification.py 裡面少一個 event handler,會讓執行過程中跳出 WARNING。
  • 如果對話視窗沒有被使用者關閉,當 pymsn 重新登入的時候,使用者的控制項會失效。原因在於 msnp 再重新登入之後,查到使用者的對話視窗,會送一次 RNG,而這個 RNG 會重新對 switchboard server 申請一個新的 session 來給 Client 端使用。然而,pymsn 在送回 RNG 之後,使用 ANS IRO 的 transaction_id 被重新歸零了,所以會導致同一個 Client 端有兩個 session,造成無法對應到使用者而失效。

解決的辦法是:

把它(event handler)加回去,打開 pymsn/msnp/notificatoin.py 檔案。

我在 --- Presence & Privacy --- 的底下加入:

def _handle_GCF(self, command):
   pass

另外一個 event 錯誤的問題目前尚無解答,這個 transaction_id 為什麼會被歸零,還是要查看原始碼才知道問題出在哪裡。不過,因為 Python 我實在是太不熟了,等我看懂我想這個問題應該就有人會解決了吧。

INFO:protocol:switchboard_manager:requesting new switchboard

/// 這裡的 SB 的 transaction_id 是 12

DEBUG:Transport:>>> XFR 12 SB
DEBUG:Transport:<<< XFR 12 SB 207.46.26.159:1863 CKI 355252581.3720.42179215 U messenger.msn.com 1
DEBUG:Transport:<-> Connecting to 207.46.26.159:1863
DEBUG:Transport:>>> USR 0 [email protected] 355252581.3720.42179215
DEBUG:Transport:<<< USR 0 OK [email protected] Python%20MSN%20Bot
INFO:protocol:switchboard_manager:New switchboard attached
DEBUG:Transport:>>> CAL 1 [email protected]
DEBUG:Transport:<<< CAL 1 RINGING 355252581
DEBUG:Transport:<<< JOI [email protected] *9mil%20Hina::Cain%[email protected]%20NB%20猛當機...%20該不會是在討錢了吧%20orz 2789003308
DEBUG:Transport:<<< RNG 1983480976 207.46.26.47:1863 CKI 84735.18013320 [email protected] *9mil%20Hina::Cain%[email protected]%20NB%20猛當機...%20該不會是在討錢了吧%20orz U messenger.msn.com 1
DEBUG:Transport:<-> Connecting to 207.46.26.47:1863

/// 這裡送出了 RNG 並且連線到 switchboard server

DEBUG:Transport:>>> ANS 0 [email protected] 84735.18013320 1983480976

/// 拿回來的 ANS 的 transaction_id 是 0,但是這裡的 transaction_id 應該是接續 XFR 的 trid+1="13" 才是正確的

DEBUG:Transport:<<< IRO 0 1 1 [email protected] *9mil%20Hina::Cain%[email protected]%20NB%20猛當機...%20該不會是在討錢了吧%20orz 2789003308

/// 既然 transcation_id 都不對了,IRO 自然也就不是原來的 Client 了。

DEBUG:Transport:<<< ANS 0 OK

/// 這裡 ANS OK 沒錯,但是 ANS 的對象已經不是原來的 Client 了。

以上就是他的錯誤,至於怎麼解,目前傷腦筋中。

在 FreeBSD 裡面測試了一下,需要安裝:

  • python(廢話)。
  • py-gobject,路徑在 /usr/ports/devel/py-gobject/
  • ElementTree,路徑在 /usr/ports/devel/py-elementtree/
  • pyOpenSSL,路徑在 /usr/ports/security/py-openssl/
  • pyCrypto,路徑在 /usr/ports/security/py-pycrypto
  • epydoc,路徑在 /usr/ports/devel/epydoc/,產生 api-doc 要用的。

然後就可以 python test.py 測試了。

test [/home/hinablue/pymsn-0.3.3] -hinablue-> python test.py
Account: (打入帳號)
Password: (打入密碼)
DEBUG:Transport:<-> Connecting to messenger.hotmail.com:1863
DEBUG:Transport:>>> VER 0 MSNP15 MSNP14 MSNP13 CVR0
DEBUG:Transport:<<< VER 0 MSNP15
...(後略)

按下 Ctrl+C 就可以離開了。至於互動上,要參考 user-api-doc 去自己實作囉。