前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【QQ/微信个人号变身机器人】炸群+远程监控个人PC的尝试

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

作者头像
不二小段
发布2018-04-08 11:24:33
3.9K0
发布2018-04-08 11:24:33
举报
文章被收录于专栏:不二小段不二小段

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

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

今天来简单谈谈有关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)

代码语言:javascript
复制
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这边的操作。

代码语言:javascript
复制
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

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

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

下面直接给代码:

代码语言:javascript
复制
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多了打开/关闭操作。

代码语言:javascript
复制
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做更多对电脑的远程控制操作。 最后,这篇文章提到的内容和详细的教程视频在我的优酷都可以找到,点击阅读原文去往我的优酷个人主页。

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不二小段 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档