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%20@%20NB%20猛當機...%20該不會是在討錢了吧%20orz 2789003308
DEBUG:Transport:<<< RNG 1983480976 207.46.26.47:1863 CKI 84735.18013320 [email protected] *9mil%20Hina::Cain%20@%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%20@%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 去自己實作囉。