bot.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. from __future__ import print_function
  4. import logging
  5. from wxbot import *
  6. import ConfigParser
  7. import json
  8. class TulingWXBot(WXBot):
  9. def __init__(self):
  10. WXBot.__init__(self)
  11. self.tuling_key = ""
  12. self.robot_switch = True
  13. try:
  14. cf = ConfigParser.ConfigParser()
  15. cf.read('conf.ini')
  16. self.tuling_key = cf.get('main', 'key')
  17. except Exception:
  18. pass
  19. print('tuling_key:', self.tuling_key)
  20. def tuling_auto_reply(self, uid, msg):
  21. if self.tuling_key:
  22. url = "http://www.tuling123.com/openapi/api"
  23. user_id = uid.replace('@', '')[:30]
  24. body = {'key': self.tuling_key, 'info': msg.encode('utf8'), 'userid': user_id}
  25. r = requests.post(url, data=body)
  26. respond = json.loads(r.text)
  27. result = ''
  28. if respond['code'] == 100000:
  29. result = respond['text'].replace('<br>', ' ')
  30. result = result.replace(u'\xa0', u' ')
  31. elif respond['code'] == 200000:
  32. result = respond['url']
  33. elif respond['code'] == 302000:
  34. for k in respond['list']:
  35. result = result + u"【" + k['source'] + u"】 " +\
  36. k['article'] + "\t" + k['detailurl'] + "\n"
  37. else:
  38. result = respond['text'].replace('<br>', ' ')
  39. result = result.replace(u'\xa0', u' ')
  40. print(' ROBOT:', result)
  41. return result
  42. else:
  43. return u"知道啦"
  44. def auto_switch(self, msg):
  45. msg_data = msg['content']['data']
  46. stop_cmd = [u'退下', u'走开', u'关闭', u'关掉', u'休息', u'滚开']
  47. start_cmd = [u'出来', u'启动', u'工作']
  48. if self.robot_switch:
  49. for i in stop_cmd:
  50. if i == msg_data:
  51. self.robot_switch = False
  52. self.send_msg_by_uid(u'[Robot]' + u'机器人已关闭!', msg['to_user_id'])
  53. else:
  54. for i in start_cmd:
  55. if i == msg_data:
  56. self.robot_switch = True
  57. self.send_msg_by_uid(u'[Robot]' + u'机器人已开启!', msg['to_user_id'])
  58. def handle_msg_all(self, msg):
  59. if not self.robot_switch and msg['msg_type_id'] != 1:
  60. return
  61. if msg['msg_type_id'] == 1 and msg['content']['type'] == 0: # reply to self
  62. self.auto_switch(msg)
  63. elif msg['msg_type_id'] == 4 and msg['content']['type'] == 0: # text message from contact
  64. self.send_msg_by_uid(self.tuling_auto_reply(msg['user']['id'], msg['content']['data']), msg['user']['id'])
  65. elif msg['msg_type_id'] == 3 and msg['content']['type'] == 0: # group text message
  66. if 'detail' in msg['content']:
  67. my_names = self.get_group_member_name(msg['user']['id'], self.my_account['UserName'])
  68. if my_names is None:
  69. my_names = {}
  70. if 'NickName' in self.my_account and self.my_account['NickName']:
  71. my_names['nickname2'] = self.my_account['NickName']
  72. if 'RemarkName' in self.my_account and self.my_account['RemarkName']:
  73. my_names['remark_name2'] = self.my_account['RemarkName']
  74. is_at_me = False
  75. for detail in msg['content']['detail']:
  76. if detail['type'] == 'at':
  77. for k in my_names:
  78. if my_names[k] and my_names[k] == detail['value']:
  79. is_at_me = True
  80. break
  81. if is_at_me:
  82. src_name = msg['content']['user']['name']
  83. reply = 'to ' + src_name + ': '
  84. if msg['content']['type'] == 0: # text message
  85. reply += self.tuling_auto_reply(msg['content']['user']['id'], msg['content']['desc'])
  86. else:
  87. reply += u"对不起,只认字,其他杂七杂八的我都不认识,,,Ծ‸Ծ,,"
  88. self.send_msg_by_uid(reply, msg['user']['id'])
  89. def main():
  90. bot = TulingWXBot()
  91. bot.DEBUG = True
  92. logging.basicConfig(level=logging.DEBUG)
  93. bot.conf['qr'] = 'png'
  94. bot.run()
  95. if __name__ == '__main__':
  96. main()