【QQ/微信个人号变身机器人】炸群+远程监控个人PC的尝试

最近简直惰怠。公众号的粉丝都开始负增长了。

其实一直没有闲着,只不过没写成文字。大家可以在优酷关注我的账号:不二小段,我会把日常一些探索录屏给大家。

今天来简单谈谈有关QQ机器人和微信机器人一些玩法。视频已经录过了,所以我就不写太详细了。

目录的话大概是 →做个QQ机器人扔群里和小冰炸群 →使用QQ消息控制自己电脑的网易云音乐 →微信个人号变身机器人

关键词:QQ/微信机器人;Python模拟鼠标、键盘输入;Python调用系统命令 环境:Windows、Python 3.5、网易云音乐桌面版 :qqbot、itchat、wxpy、pyuserinput、subprocess 基础:不需要什么基础,最好了解图灵机器人的API接口调用

◆1

之前我们谈过几次微信公众号的自动回复功能,其实用的都是图灵语料库的

API。最近我发现QQ群里也有机器人,分别是小冰和小Q,其中小Q也是用的图灵机器人,但是一个QQ群里不能同时存在两个官方机器人,那么我们有没有办法把自己的QQ号打造成机器人,然后让它在群里和小冰尬聊呢?

自然是可以的,这也是我们今天这篇文章的开端。

我们首先来到qqbot。

具体的文档详见 https://github.com/pandolia/qqbot

直接 pip install qqbot 安装后,大家可以按照官方样例做一个最简单的登陆和内容返回。

我这边直接按照官方提供的样例进行消息的注册。之后我们通过之前做过的图灵机器人API,将消息内容和联系人QQ号传至图灵API后,把返回内容发送回去即可。

首先是我自己写的对图灵机器人消息处理的函数。(talk.py)

import requests
import json
def talk(content, userid):
    url = 'http://www.tuling123.com/openapi/api'
    s = requests.session()
    d = {"key": "", "info": content, "userid": userid} #填写自己申请的key
    data = json.dumps(d)
    r = s.post(url, data=data)
    text = json.loads(r.text)
    code = text["code"]    
      if code == 100000:
        result = text["text"]    
      elif code == 200000:
        result = text["text"] + '\n' + text["url"]    
      elif code == 302000:
        result = text["text"] + '\n' + text["list"][0]["article"] + text["list"][0]["detailurl"]    
      elif code == 308000:
        result = text["text"] + '\n' + text["list"][0]["info"] + text["list"][0]["detailurl"]    
      return result

然后是qqbot这边的操作。

import talk
from qqbot import QQBotSlot as qqbotslot, RunBot@qqbotslot

def onQQMessage(bot, contact, member, content):
    if '@ME' in content:
        result = talk.talk(content, contact.qq)
        bot.SendTo(contact, '@' + member.name + ' '  + result)

if __name__ == '__main__':
    RunBot()

代码应该是十分好理解的。十分方便就可以把自己的QQ号变身机器人了。

这边有一个不方便的地方。因为qqbot是封装了网页QQ的接口,而网页QQ并不支持文件、语音或者@别人的功能。所以在QQ群里,我自己的机器人总是@不到小冰。后面还是通过酷Q+图灵实现的炸群。

详见 http://www.tuling123.com/help/h_centqq_robot.jhtml?nav=doc

第一部分的视频(里面有两个机器人炸群的内容): http://v.youku.com/v_show/id_XMjc0MzU3NzI0OA==

◆2 ◆

群机器人最终的解决方案居然是酷Q+图灵,这让我感觉自己写代码毫无意义,十分尴尬。于是我就在想,这个机器人还可以做更多事情吗?

我们设想一下,既然机器人可以接受来自QQ的消息,又可以对消息内容进行判断后进行后续操作,那么我们能否通过它来对自己的PC电脑做监控或者控制的功能?

于是我尝试了一个相对简单的想法:控制我电脑的网易云音乐。

有了这个想法之后我在思考实现的方式。网易云显然是没有给我们预留和Python交互的接口的。但是我想起之前踩过的一个深坑,那就是网易云的全局快捷键和PyCharm的快捷键发生了冲突,导致我PyCharm格式化代码的功能不能正常使用。那么我们能否通过模拟全局快捷键的按键来实现对网易云音乐的控制。

于是开始寻找Python模拟键盘的库,找到了pyuserinput,可以很方便地模拟鼠标和键盘的输入内容(包括多按键组合快捷键)。

详细内容可以看 https://github.com/SavinaRoja/PyUserInput

网易云音乐的快捷键可以在设置里看到。

(空的那里就是我之前提到的快捷键冲突的坑)

下面直接给代码:

import talk
from qqbot import QQBotSlot as qqbotslot, RunBot
from pykeyboard import PyKeyboard

k = PyKeyboard()

@qqbotslot
def onQQMessage(bot, contact, member, content):
    if content == '播放':
        k.press_keys([k.control_key, k.alt_key, 'p'])
        bot.SendTo(contact, '开始播放')    
    elif content == '暂停':
        k.press_keys([k.control_key, k.alt_key, 'p'])
        bot.SendTo(contact, '暂停播放')    
    elif content == '上一首':
        k.press_keys([k.control_key, k.alt_key, k.left_key])
        bot.SendTo(contact, '切换上一首')    
    elif content == '下一首':
        k.press_keys([k.control_key, k.alt_key, k.right_key])
        bot.SendTo(contact, '切换下一首')

if __name__ == '__main__':
    RunBot()

使用自己的QQ小号扫描二维码登陆之后,发送相应消息就可以实现网易云的播放/暂停/切歌功能。

第二部分的视频(可以看到切歌的效果): http://v.youku.com/v_show/id_XMjc0NDc4NTQ0NA==

◆3

来到第三部分。

第三部分里面其实已经没有什么新鲜内容了,前面已经把大块需要做的功能实现了,只需要把QQbot做好的东西迁移到我们的微信上就可以了。

微信这边推荐给大家两个库,一个是itchat,一个是wxpy。 详见: https://github.com/littlecodersh/ItChat https://github.com/youfou/wxpy

我写完QQbot控制网易云音乐之后,有小伙伴说这样需要网易云音乐已经打开的状态下,能否添加打开/关闭网易云的功能。

这样的操作其实已经涉及到一些系统命令了。于是我们尝试使用subprocess的Popen函数调用系统命令。

大家可以自己去了解Popen函数,我这边直接给出打开/关闭的操作。

打开网易云音乐的操作是很简单的,在Windows的CMD里直接输入相应路径的exe就可以了,比如我本地的: C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe

关闭的操作稍微麻烦一点。我们可以通过tasklist /svc来查看电脑上正在运行的进程。

然后我们发现网易云音乐打开了三个进程。

想要关闭网易云音乐要求我们将三个进程关掉,需要用到命令 taskkill /im cloudmusic.exe /f /t

下面直接放代码了。比之前的QQbot多了打开/关闭操作。

import itchat, time
from itchat.content import *
from pykeyboard import PyKeyboard
import subprocess

k = PyKeyboard()

@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
    content = msg['Content']
    print(content)    
    if content == '播放':
        k.press_keys([k.control_key, k.alt_key, 'p'])        # bot.SendTo(contact, '开始播放')
    elif content == '暂停':
        k.press_keys([k.control_key, k.alt_key, 'p'])        # bot.SendTo(contact, '暂停播放')
    elif content == '上一首':
        k.press_keys([k.control_key, k.alt_key, k.left_key])        # bot.SendTo(contact, '切换上一首')
    elif content == '下一首':
        k.press_keys([k.control_key, k.alt_key, k.right_key])        # bot.SendTo(contact, '切换下一首')
        # print(msg['Content'])
    elif content == '打开音乐':
        subprocess.Popen(r'C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe')    
    elif content == '关闭音乐':
        subprocess.Popen(r'taskkill /im cloudmusic.exe /f /t')        
      # print(msg)
        # msg.user.send('%s: %s' % (msg.type, msg.text))itchat.auto_login(True)
itchat.run(True)

第三部分的视频: http://v.youku.com/v_show/id_XMjc1MTA2MzEwNA==

最后需要点出的几个小问题:

0、公众号代码排版要用markdown排,总是出错…可能会有缩进没对齐的情况,希望不影响大家阅读。总比贴图片好一些。

1、测试时图方便,并没有加对消息来源的判断,也就是说…只要任何一个人给我发 播放、暂停、打开、关闭、上一首、下一首这样的内容,都可以控制我的网易云…当然我相信你们不会那么无聊的…自己用的时候加一步判断就好了。 2、通过pyuserinput似乎是不能模拟一些系统级危险操作的组合键的(比如Crtl+Alt+Del),应该是安全限制。 3、之后会尝试添加微信消息的语音识别功能。QQ的话不支持。 4、taskkill的关闭功能是强制杀进程,不是正常关闭操作。 5、希望对大家有所启发,可以通过bot+Popen做更多对电脑的远程控制操作。 最后,这篇文章提到的内容和详细的教程视频在我的优酷都可以找到,点击阅读原文去往我的优酷个人主页。

如果有所帮助也希望大家不吝转发到朋友圈。谢谢大家。有疑问可以在后台留言交流。

原文发布于微信公众号 - 不二小段(rose-fun)

原文发表时间:2017-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏韩伟的专栏

帧同步游戏开发基础指南

最近一个月休了个假,体验了一下类似欧洲的田园生活。所以更新几乎荒废了,但是总结和积累是一直持续着的。根据前一阶段对于实时对战游戏的开发思考,写了这一篇入门级的文...

83870
来自专栏更流畅、简洁的软件开发方式

自然框架的声明

1、 自然框架是由控件、类库、思路构成的,他不是生成器! 2、 自然框架不是平台。 3、 自然框架不想干掉写代码的程序员,而是想把大家从繁复的代码中解脱出来,把...

25580
来自专栏一枝花算不算浪漫

[Java面试一]面试复习大纲.

36890
来自专栏老九学堂

终极版全栈工程师学习路线图

全栈工程师因为丰厚的待遇与较好的发展前景,一直是互联网行业较为热捧的岗位,因此有很多做前端、后端的程序员想要向全栈工程师方向转! ? 如果小伙伴想成为一个全栈 ...

1K100
来自专栏Timhbw博客

《Pro Git》学习笔记连载(一.起因)

2016-11-1619:39:45 发表评论 299℃热度 《Pro Git》这本书可谓是学习进阶Git的最好材料了,之所以阅读这本书,是因为虽然用Git,...

316110
来自专栏CSDN技术头条

雅虎PB级云对象存储COS实践:选择Ceph,放弃Swift

面对庞大的数据量和飞快的增长速度,雅虎对象存储需要在保证耐用性和延迟的基础上发挥存储成本效益,雅虎选择了软件定义的存储。本文介绍了雅虎PB级云对象存储COS解决...

48550
来自专栏游戏杂谈

苹果商店近期审核的问题

近期苹果审核有些诡异了,之前每次审核都正常的。最近一次提交后,等待大概十天后开始进入审核状态,一天以后收到被拒绝的邮件(上面写着是元数据被拒绝 - 以前也遇到过...

32110
来自专栏互联网杂技

苹果的设计中是如何应用 “施奈德曼 黄金准则”的?

苹果公司,作为一家科技巨头,其大量的设计思想非常恰当的反映了Shneiderman(施奈德曼)的8条黄金准则是如何创建出优秀成功的产品的。他们也一直骄傲于自己出...

357100
来自专栏更流畅、简洁的软件开发方式

【自然框架.重新开始】总体设计

  好久都没写博客了,出去体验了一下人生,呵呵。   最近加入了一个团队,打算把自然框架重新设计一下,以适应更广阔的需求。   首先是UI。UI一直是弱项,这个...

20750
来自专栏知晓程序

小程序间可以互相跳转了!这 2 个使用场景,你一定要知道

下面,知晓程序(微信号 zxcx0101)就逐一跟大家解析,这三个新能力究竟能做什么?

10930

扫码关注云+社区

领取腾讯云代金券