用wxBot和图灵机器人API实现微信群聊机器人

来源:互联网 发布:自建app软件 编辑:程序博客网 时间:2024/05/22 13:51

1 实现方案

wxBot登录微信,接收、发送微信消息。

图灵机器人 API对消息作回复。

2 实现效果

群聊效果

机器人会回复来自联系人的消息,以及群里@此账号的消息。

注意要将对应的群保存到联系人。

3 运行方法

  1. 下载wxBot, 安装python的依赖包。
  2. 在图灵机器人官网注册账号,申请图灵key: 图灵key申请地址
  3. 在bot.py文件所在目录下新建conf.ini文件,内容为(key字段内容为申请到的图灵key):

    [main]key=1d2678900f734aa0a23734ace8aec5b1
  4. 运行bot.py

4 完整代码

bot.py

#!/usr/bin/env python# coding: utf-8from wxbot import *import ConfigParserimport jsonclass TulingWXBot(WXBot):    def __init__(self):        WXBot.__init__(self)        self.tuling_key = ""        try:            cf = ConfigParser.ConfigParser()            cf.read('conf.ini')            self.tuling_key = cf.get('main', 'key')        except Exception:            pass        print 'tuling_key:', self.tuling_key    def tuling_auto_reply(self, uid, msg):        if self.tuling_key:            url = "http://www.tuling123.com/openapi/api"            user_id = uid.replace('@', '')[:30]            body = {'key': self.tuling_key, 'info': msg.encode('utf8'), 'userid': user_id}            r = requests.post(url, data=body)            respond = json.loads(r.text)            result = ''            if respond['code'] == 100000:                result = respond['text'].replace('<br>', '  ')            elif respond['code'] == 200000:                result = respond['url']            else:                result = respond['text'].replace('<br>', '  ')            return result        else:            return u"知道啦"    def handle_msg_all(self, msg):        if msg['msg_type_id'] == 4 and msg['content']['type'] == 0:  # text message from contact            self.send_msg_by_uid(self.tuling_auto_reply(msg['user']['id'], msg['content']['data']), msg['user']['id'])        elif msg['msg_type_id'] == 3:  # group message            if msg['content']['data'].find('@') >= 0:  # someone @ another                my_names = self.get_group_member_name(msg['user']['id'], self.user['UserName'])                if my_names is None:                    my_names = {}                if 'NickName' in self.user and len(self.user['NickName']) > 0:                    my_names['nickname2'] = self.user['NickName']                if 'RemarkName' in self.user and len(self.user['RemarkName']) > 0:                    my_names['remark_name2'] = self.user['RemarkName']                is_at_me = False                text_msg = ''                for _ in my_names:                    if msg['content']['data'].find('@'+my_names[_]) >= 0:                        is_at_me = True                        text_msg = msg['content']['data'].replace('@'+my_names[_], '').strip()                        break                if is_at_me:  # someone @ me                    snames = self.get_group_member_name(msg['user']['id'], msg['content']['user']['id'])                    src_name = ''                    if 'display_name' in snames:                        src_name = snames['display_name']                    elif 'nickname' in snames:                        src_name = snames['nickname']                    elif 'remark_name' in snames:                        src_name = snames['remark_name']                    if src_name != '':                        reply = '@' + src_name + ' '                        if msg['content']['type'] == 0:  # text message                            reply += self.tuling_auto_reply(msg['content']['user']['id'], text_msg)                        else:                            reply += u"对不起,只认字,其他杂七杂八的我都不认识,,,Ծ‸Ծ,,"                        self.send_msg_by_uid(reply, msg['user']['id'])def main():    bot = TulingWXBot()    bot.DEBUG = True    bot.conf['qr'] = 'png'    bot.run()if __name__ == '__main__':    main()
3 0
原创粉丝点击