一、介绍
QQBot 是一个用 python 实现的、基于腾讯 SmartQQ 协议的简单 QQ 机器人,可运行在 Linux 和 Windows 平台下,所有代码均集成在一个 qqbot.py 文件中,代码量仅 400 多行(不包括注释)。程序采用单线程的方式运行,且尽可能的减少了网络和登录错误(特别是所谓的 103 error )发生的概率。
你可以用 QQBot 来实现:
监控、收集 QQ 消息
自动消息推送
聊天机器人
通过 QQ 远程控制电脑、智能家电
二.安装方法
可用 pip 安装,安装命令:
$ pip install qqbot
也可以直接下载qqbot.py运行,但需先安装requests库。
1. 启动 QQBot
在命令行输入:qqbot,或直接运行qqbot.py:python qqbot.py。启动过程中会自动弹出二维码图片(Linux下需安装有 gvfs ,否则需要手动打开图片),需要用手机 QQ 客户端扫码并授权登录。启动成功后,会将本次登录信息保存到本地文件中,下次启动时,可以输入:qqbot qq号码,或:python qqbot.py qq号码,先尝试从本地文件中恢复登录信息(不需要手动扫码),只有恢复不成功或登录信息已过期时才会需要手动扫码登录。
- 我在这里是重新打开的一个窗口,直接输入qqbot 回车
然后出现二维码图
显示登陆成功
注意,扫完以后,当前的CMD窗口是不可以再操作的了,我们需要重新打开一个窗口。直接输入命令,就可以显示出来了。
常用的操作,我附在这里,大家可以自己尝试一下:
QQBot 启动后,在另一个控制台窗口使用 qq 命令操作 QQBot ,目前提供以下命令:
1) 帮助、停机和重启命令
qq help|stop|restart|fresh-restart
2) 联系人查询、搜索命令
qq list buddy|group|discuss [$cinfo|$clike]
( $cinfo --> $qq|$name|$key=$val )
( $clike --> :like:$qq|:like:$name|$key:like:$name )
qq list group-member|discuss-member $oinfo|$olike [$cinfo|$clike]
( $oinfo --> $oqq|$oname|$okey=$oval )
( $cinfo --> $qq|$name|$key=$val )
( $olike --> :like:$oqq|:like:$oname|$okey:like:$oname )
( $clike --> :like:$qq|:like:$name|$key:like:$name )
3) 联系人更新命令
qq update buddy|group|discuss
qq update group-member|discuss-member $ginfo
4) 消息发送命令
qq send buddy|group|discuss $rinfo $message
5) 群管理命令: 设置/取消管理员 、 设置/删除群名片 、 群成员禁言 以及 踢除群成员
qq group-set-admin $ginfo $minfo1,$minfo2,...
qq group-unset-admin $ginfo $minfo1,$minfo2,...
qq group-set-card $ginfo $minfo1,$minfo2,... card
qq group-unset-card $ginfo $minfo1,$minfo2,...
qq group-shut $ginfo $minfo1,$minfo2,... [t]
qq group-kick $ginfo $minfo1,$minfo2,...
6) 加载/卸载/显示插件
qq plug/unplug myplugin
qq plugins
list 命令提供强大的联系人查询和搜索功能,用法示例如下:
列出所有好友
qq list buddy
列出 QQ 为 123456 的群
qq list group 123456
列出备注名为 jack 的好友
qq list buddy mark=jack
列出 群“456班” 的所有成员
qq list group-member 456班
列出 群“456班” 中名片为 “mike” 的成员
qq list group-member 456班 card=mike
列出 讨论组“XX小组” 中名为 jack 的好友
qq list discuss-member XX小组 jack
其中第三、四个参数如果是 key=val 的格式,则应为 name=xx|nick=xx|mark=xx|card=xx|qq=xx 的格式,如果不是 key=val 的格式,则按以下原则进行处理:若是一串数字,则按 QQ 号进行查询,否则,按名称进行查询。
如果存在重名现象,会列出所有重名的联系人。如:
qq list group 机器人测试
将列出所有名为 “机器人测试” 的群。
如果在 list 命令的第三、四个参数中加入 “:like:” ,则会按部分匹配的模式进行搜索,用法示例如下:
列出名称中含有 “李” 的好友
qq list buddy :like:李
列出 QQ 中含有 “234” 的群
qq list group :like:234
列出备注名中含有 jack 的好友
qq list buddy mark:like:jack
列出 群“456班” 的中名称中含有 “李” 的成员
qq list group-member 456班 :like:李
列出 群“456班” 中名片中含有 “mike” 的成员
qq list group-member 456班 card:like:mike
列出的 讨论组“xx小组” 中名为 jack 的好友
qq list discuss-member :like:小组 jack
从 v2.2.5 版开始, list 命令采用表格的形式输出联系人列表,其输出样式示例如下:
为保证表格在终端中的显示效果,建议将终端的输出字体设置为 consolas 、且每行可打印的最大字符数大于 120 。另外需要注意:为保证表格的显示效果,当联系人的名称、名片等属性的长度太长或含有特殊字符时,将对这些属性进行截断或过滤后再输出至终端。
update 命令更新指定的联系人列表,其参数含义和 list 命令相同,如:
更新好友列表
qq update buddy
更新群列表
qq update group
更新 群“456班” 的成员列表
qq update group-member 456班
send 命令中第三个参数和 list 命令中的第三个参数格式一致。要注意,如果有重名现象,会给所有重名的联系人发信息。 另外要注意,第二个参数只能是 buddy/group/discuss ,不能是 group-member/discuss-member 。示例:
给 好友“jack” 发消息 “你好”
qq send buddy jack 你好
给 群“198班” 发消息 “大家好”
qq send group 198班 大家好
给 QQ 为 12345 的好友发消息
qq send buddy 12345 xxx
给讨论组发消息
qq send discuss MyDiscuss hello
可以在消息内容中嵌入“/可爱”等表情关键词来向对方发送表情,详见facemap.py。还可以在消息内容中使用\n,\t这两个转义字符(如: send buddy jack 第一行\n第二行)。
群管理命令中的 $ginfo 和 $minfo 和 list 命令中的第三、四个参数格式一致。例如:
禁止 群“456班” 中的 jack,mike,jim 发言( 2 分钟)
qq group-shut 456班 jack,mike,jm 120
四.实现我们自己的群发信息功能
我们打开Eclipse 编辑环境,这里我用的是Python 3.5的IDLE。创建好项目和PyDev文件以后。我们开始用代码来实现群发
from qqbot import _bot as bot
#先导入包
bot.Login(['-q', '37654234'])
#这里第二个参数是你自己的QQ号
my_bol = []
#我们先得到好友列表
bol=bot.List('buddy')
#用切片复制到新的列表中
my_bol=bol[0:]
#遍历好友列表
for my_k in my_bol:
if my_k:
#向好友发送消息
bot.SendTo(my_k,':Good Morning/早上好!')
效果图如下
注意如果,你的好友比较多的话,不要都发一样的。可以用一下随机数,提前存储一些句子在列表里,然后用随机数来控制。
到此就结束了,小伙伴们,赶紧试一试吧!!!
注:以上内容有参考互联网大神的帖子,如果没有事先声明,引用了。请私下联系我。
QQ邮箱:99260040@qq.com