Python写的Msn机器人,几好玩的

Python写的Msn机器人,几好玩的, 需要Msnp.py这个python模块, 用Python开发msn机器人程式还是很快的, 资料参考自网上.

msn.py的代码

  1. #!/usr/local/bin/python
  2. # -*- coding: utf-8 -*-
  3. import msnp
  4. import time
  5. import string
  6.  
  7. def mytrim(zstr):
  8.   ystr=zstr.lstrip()
  9.   ystr=ystr.rstrip()
  10.   ystr=ystr.strip()
  11.   return ystr
  12.  
  13.  
  14. def findstr(fstr):
  15.   if fstr=="":
  16.     return ""
  17.  
  18.  
  19.   fstr=mytrim(fstr)
  20.   fstr=fstr.lower()
  21.  
  22.   j=0
  23.   try:
  24.     mystr=""
  25.     fd=file("talk.txt",'r')
  26.     m=fd.readlines()
  27.     k=0
  28.     while k<len (m):
  29.       aa=string.split(m[k].strip("\n"),'|=>|')
  30.       if len(aa) ==0:
  31.         break;
  32.       
  33.       if aa[0].lower()==fstr:
  34.         mystr=aa[1]
  35. mystr=mystr.decode('gb18030').encode('utf-8')
  36.         break;
  37.       
  38.       k=k+1
  39.     
  40.     fd.close()
  41.     return mystr
  42.   except Exception:
  43.     print 'no file or error'
  44.     return ""
  45.  
  46.  
  47. #print me
  48.  
  49. #text='我们'
  50.  
  51.  
  52. class MsnChatListener(msnp.ChatCallbacks):
  53.     def message_received(self, passport_id, display_name, text, charset):
  54. textx=text.decode('utf-8').encode('gb18030')
  55.         #print 'textx:'+textx
  56.         sss=findstr(textx)
  57.         #print 'sss:'+sss
  58.         if sss=='': 
  59.           #print '%s: %s' % (passport_id, textx)
  60.   wo="这是什么意思?"
  61.   wo=wo.decode('gb18030').encode('utf-8')
  62.  
  63.   sss='{ '+text+' } '+wo
  64.         
  65.         self.chat.send_message(sss, charset)
  66.  
  67. class MsnListener(msnp.SessionCallbacks):
  68.     def chat_started(self, chat):
  69.         callbacks = MsnChatListener()
  70.         chat.callbacks = callbacks
  71.         callbacks.chat = chat
  72.  
  73. while True:
  74.     try:
  75.       msn = msnp.Session(MsnListener()) #MsnListener里面是回调函数
  76.       msn.login('xxxx@live.cn', '123456789') # 申请的msn账号和密码
  77.       msn.sync_friend_list()
  78.       while True:
  79.         try:
  80.           msn.process(chats = True)
  81.           time.sleep(1)
  82.         except msnp.error.Error, e:
  83. #217 错误表示对方不在线,由于这个包判断好友状态不太准,所以我们不能先判断好友是否在线,然后再发消息,我的做法是不管在线离线,统统启动会话,如果对方不在线,MSN服务器会发217错误,msnp包会抛异常,不管就好了。其他的异常没有处理,出现了之后跳出内部循环,重新登陆。
  84.           if e.code == 217: 
  85.             print 'msn.process error', e.code, e.message
  86.             pass
  87.           else:
  88.             print 'msn.process error', e.code, e.message
  89.             break
  90.     except:
  91.       pass
  92.  
  93. </len>

在终端输入 nohup ./msn.py & 就可以在后台运作了,但要停下来的话,就先输入ps ax , 然后看见那个id 就 kill掉它

在以上脚本当前目录下建立talk.txt , 这个是对话的相对反应,你问:我们,答:怎样啊 .
内容格式

????|=>|I don’t understand
who are you|=>|I am Robot
我们|=>|怎样啊
what time is it|=>|I don’t know
who are you|=>|I am a Robot
你好|=>|你好啊
今天天气不错啊|=>|系啊
今天天气不错|=>|系啊
how are you|=>|fine thank you
电话格式|=>|电话:人名
天气不错啊|=>|系啊
天气不错|=>|系啊
你想点啊|=>|唔知想点啊
你是男还是女啊|=>|我是机器人,没性别的

用|=>|这个做分隔符号

其实在程序里加入执行命令,我想到用这个msn聊天机器人来打开或者关闭ssh , 这样ssh就应该比较安全了, 这只是想到的其中一个用途,暂时想不到其它应用.

留言