子沐课堂——QQ聊天机器人

初识PyQQbot

QQBot 是一个用 python 实现的、基于腾讯 SmartQQ 协议的简单 QQ 机器人,可运行在 Linux 和 Windows 平台下,所有代码均集成在一个 [qqbot.py][code] 文件中,代码量仅 400 多行(不包括注释)。程序采用单线程的方式运行,且尽可能的减少了网络和登录错误(特别是所谓的 103 error )发生的概率。

PyQQbot的github项目地址为:https://github.com/pandolia/qqbot/

PyQQbot可以实现的功能:

1. 监控、收集QQ信息

2. 自动信息推送

3. 聊天机器人

4. 通过QQ远程控制电脑、智能家电

应用PyQQbot

1.安装

在 Python 2.7 下使用,用 pip 安装,安装命令:

$ pip install qqbot

验证是否安装成功,打开命令行输入qqbot -h

子沐课堂——QQ聊天机器人

2.启动QQbot

在命令行输入: qqbot 。启动过程中会自动弹出二维码图片,需要用手机 QQ 客户端扫码并授权登录。

启动成功后,会将本次登录信息保存到本地文件中,下次启动时,可以输入:

qqbot -q qq号码

先尝试从本地文件中恢复登录信息(不需要手动扫码),只有恢复不成功或登录信息已过期时才会需要手动扫码登录。一般来说,保存的登录信息将在 2 ~ 3 天之后过期。

3.操作QQBot

找到.qqbot-tmp下的v2.0.conf文件,修改这个配置文件。

配置用户信息,如此我们可以使用命令:qqbot -u somebody,他直接调用的就是用户somebody的配置。如此,可以实现自动登录。

大家可以自己增加自己的用户配置信息

子沐课堂——QQ聊天机器人

QQBot 启动后,会自动弹出一个控制台窗口( qterm 客户端)用来输入操作 QQBot 的命令,目前提供以下命令:

子沐课堂——QQ聊天机器人

1) 帮助

help

2) 列出所有 好友/群/讨论组

list buddy|group|discuss

3) 向 好友/群/讨论组 发送消息

send buddy|group|discuss x|uin=x|qq=x|name=x|nick=x|mark=x message

4) 获取 好友/群/讨论组 的信息

get buddy|group|discuss x|uin=x|qq=x|name=x|nick=x|mark=x

5) 获取 群/讨论组 的成员

member group|discuss x|uin=x|qq=x|name=x|mark=x

6) 停止 QQBot

stop

7) 退出QQbot shell

quit

在 send/get/member 命令中,第三个参数可以是 好友/群/讨论组 的 名称/昵称/备注名/qq/uin 。

注意:如果系统中没有图形界面,则不会自动弹出控制台窗口,需要手动在另外的控制台中输入 “qterm [port]” 命令来打开 qterm 客户端。

QQBot 启动后,用另外一个 QQ 向本 QQ 发送 “qqbot --version” ,则 QQBot 会自动回复: “QQBot-v2.x.x” 。(注:2.0.3之前的版本中,通过 QQ 消息发送以上 6 个命令也可以操作 QQBot , 2.0.4 版之后,为安全起见,去掉此功能,只保留一个 “qqbot --version” 的命令用来远程测试 QQBot 是否正常运行)。

私人订制QQ机器人

实现自己的 QQ 机器人非常简单,只需要生成一个 QQBot 对象并为其注册一个消息响应函数。

子沐课堂——QQ聊天机器人

以上代码运行后,用另外一个 QQ 向本 QQ 发送消息 “-hello”,则会自动回复 “你好,我是 QQ 机器人”,发送消息 “-stop” 则会关闭 QQ 机器人,发送信息”你好”,也会回复“你好,我是QQ机器人”。

QQBot 对象收到一条 QQ 消息时,会新建一个 QQMessage 对象,之后将这个 QQMessage 对象以及自身传递给消息响应函数。

消息响应函数中的第一个参数为传递来的 QQBot 对象,也就是 myqqbot ,第二个参数是传递来的 QQMessage 对象,该对象主要有以下四个属性:

l message.contact : QContact对象,消息发送者

l message.memberUin : str 对象,消息发送成员的 uin,仅在该消息为 群/讨论组 消息时有效

l message.memberName : str 对象,消息发送成员的昵称,仅在该消息为 群/讨论组 消息时有效

l message.content : str 对象,消息内容

QQMessage 对象还提供一个 Reply 接口,可以给消息发送者回复消息,如:

message.Reply('你好,我是QQ机器人') # 相当于 bot.SendTo(message.contact, '你好,我是QQ机器人')

message.contact 是一个 QContact 对象,该对象有以下属性:

l contact.ctype : str 对象,联系人类型,可以为 'buddy', 'group', 'discuss' ,代表 好友/群/讨论组

l contact.uin : str 对象,联系人的 uin ,底层发消息要使用本数值,每次登录本数值可能会改变

l contact.qq : str 对象,联系人的 qq

l contact.name : str 对象,联系人的名称

l contact.nick : str 对象,好友的昵称

l contact.mark : str 对象,好友或群的备注名

l contact.members : dict 对象,群或讨论组的成员字典

还提供一个 GetMemberName 接口,可以通过成员的 uin 查询成员的网名:

contact.GetMemberName(memberUin) --> memberName, str object

QQbot对象的接口

QQBot 对象调用其 Login 方法登录成功后,提供 List/Get/SendTo/Send/On 五个接口,一般来说,只需要调用这五个接口就可以了,不必关心 QQBot 的内部细节。

(1) bot.List(ctype) --> [contact0, contact1, ... ]

对应上面的 list 命令,示例:

>>> bot.List('buddy')

>>> bot.List('group')

>>> bot.List('discuss')

...

返回一个联系人对象(QContact对象)列表。

(2) bot.Get(ctype, *args, **kwargs) --> [contact0, contact1, ... ]

对应上面的 get 命令,示例:

>>> bot.Get('buddy', 'jack')

>>> bot.Get('group', '1234556')

>>> bot.Get('buddy', 'qq=1235778')

>>> bot.Get('buddy', uin='1234768')

>>> bot.Get('discuss', name='disc-name')

>>> bot.Get('buddy', mark='jack')

第二个参数可以为联系人的 名称/昵称/备注名/qq/uin ,注意,这里返回的是一个 QContact 对象的列表,而不是返回一个 QContact 对象。

3) bot.SendTo(contact, content) --> '向 xx 发消息成功'

向联系人发送消息。第一个参数为 QContact 对象,一般通过 Get 接口得到,第二个参数为消息内容。

(4) bot.Send(ctype, *args, **kwargs) --> ['向 xx 发消息成功', '向 xx 发消息成功...', ... ]

对应上面的 send 命令,示例:

>>> bot.Send('buddy', 'jack', 'hello')

>>> bot.Send('group', '1234556', 'hello')

>>> bot.Send('buddy', 'qq=1235778', 'hello')

>>> bot.Send('buddy', uin='1234768', content='hello')

>>> bot.Send('discuss', name='disc-name', content='hello')

Send 接口的第一、二个参数和 Get 接口的一样,第三个参数为消息内容。上面的第一条语句相当于:

result = []

for contact in bot.Get('buddy', 'jack'):

result.append(bot.SendTo(contact, 'hello'))

return result

(5) bot.On(mtype, callback) --> callback

注册消息响应函数。第一个参数 mtype 为需要响应的消息的类型,一般来说,只需要响应 QQ 消息和 qterm 客户端消息, mtype 分别为 'qqmessage' 和 'termmessage' 。第二个参数 callback 为消息响应函数。

当 QQBot 收到这两种消息时,会新建一个 QQMessage 对象或 TermMessage 对象,连同 QQBot 对象本身一起传递给 callback 。这两种消息对象都有 content 属性和 Reply 接口,content 代表消息内容, Reply 接口可以向消息的发送者回复消息,对于 TermMessage 对象,消息发送者就是 qterm 客户端,注意,对于所有 TermMessage ,都必须调用一次 Reply ,否则 qterm 客户端会一直等待此回复消息。

图灵机器人

http://www.tuling123.com/

中文语境下智能度最高的机器人大脑图灵机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

子沐课堂——QQ聊天机器人

接下来解释大家自由发挥的时间了

子沐课堂——QQ聊天机器人

在页面的最下面有个api接入,这是我们需要用到的内容。我们要使用这个api,来智能化我们之前私人订制的qq聊天机器人。

子沐课堂——QQ聊天机器人

Python代码如下所示

子沐课堂——QQ聊天机器人

请求方式

(1)接口地址

http://www.tuling123.com/openapi/api

(2)请求方式

HTTP POST

(3)请求参数

请求参数格式为 json

参数是否必须长度示例说明
key必须321ca8089********736b8ce41591426(32 位)注册之后在机器人接入页面获得
Info必须1-30打招呼“你好”查天气“北京今天天气”请求内容,编码方式为utf-8
Userid上下文必须1-32bc123(支持 0-9,a-z,A-Z组合,不能包含特殊字符)开发者给自己的用户分配的唯一标志(对应自己的每一个用户)
Loc非必须1-30北京市中关村位置信息,请求跟地理位置相关的内容时使用,编码方式 UTF-8

返回数据格式

Code说明
100000文本类
200000链接类
302000新闻类

(1)文本类

字段

说明

Code

文本类表示码

Text

结果

(2)链接类

字段说明
Code文本类表示码
Text提示语
url链接地址

(3)新闻类

字段说明
Code文本类表示码
Text提示语
List信息列表
List>article列表中具体数据的新闻标题
List>source列表中具体数据的新闻来源
List>icon列表中具体数据的新闻图片
List>detailurl列表中具体数据的新闻详情链接

详细内容可以参考:http://www.tuling123.com/doc/download/API-Guide

相关推荐