qq机器人的一次尝试

想法

刚开始这个想法来自于Vidar-Team招新群的一只小兔子。

感觉挺有意思的,我也想实现一个。

我的思路大概是登录一个qq号,然后读取电脑中的文件,然后利用窗口句柄发送消息,构成一个简单的io。

问题

然而,我想的太简单了,电脑存储的qq聊天记录往往是利用账号密码加密过的,一般只有这个qq号用客户端登录的时候才能显示在客户端了,而琢磨加密算法似乎不太实际。我只能改变我的思路,利用模拟键鼠操作:ctrl+a,ctrl+c复制到剪贴板再读取剪贴板,但这个看似蠢萌无赖的方法居然也遇到了问题:

复制下来的并不是文本,而是这种特殊格式的东西,不利于我的读取操作。

很显然,这是qq为了方便转发聊天记录加的新功能,我只要找到几个版本之前的qq就一定可以了。

又试了一下Tim,发现Tim还没有这种功能,于是就决定用Tim作为登录客户端了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def get_Mess(hwnd):
mouse_move(40, 160)
mouse_left_click()
win32api.keybd_event(17, 0, 0, 0) # ctrl
time.sleep(0.2)
win32api.keybd_event(65, 0, 0, 0) # a
time.sleep(0.2)
win32api.keybd_event(65, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(0.2)
win32api.keybd_event(17, 0, 0, 0) # ctrl
time.sleep(0.2)
win32api.keybd_event(67, 0, 0, 0) # c
time.sleep(0.2)
win32api.keybd_event(67, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
return pyperclip.paste()

读取了消息,再经过一系列的字符串处理,就能拿来用了~

然后再用模拟按键的方法发送消息

1
2
3
4
5
6
7
8
9
10
11
def send_Mess(hwnd):
win32api.keybd_event(17, 0, 0, 0) # ctrl
time.sleep(0.2)
win32api.keybd_event(86, 0, 0, 0) # v
time.sleep(0.2)
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)
time.sleep(0.2)
win32api.keybd_event(13, 0, 0, 0) # enter
time.sleep(0.2)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键

io部分完成了

完善

弄好了io部分,这个qq聊天窗口就成为了类似命令行的东西,我想这个qq机器人总要能做点什么

比如访问百度百科、百度翻译等,这些也是比较简单,类似一个简单的爬虫,当然一些网站有相应的加密手段,这里附上百度翻译的加密学习仅供参考 https://blog.csdn.net/QYmufeng/article/details/84068710

之后我又为这个机器人添加了一个文字解谜小游戏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class game1():
def __init__(self):
self.item = ['乌鸦面具', '电线', '钥匙', '电话号码纸条', '染血的小刀', '一幅挂画', '名片']
self.end = 0
self.now_room = 1
self.now_item = ''
self.now_funiture = ''
self.item_have = [0, 0, 0, 0, 0, 0, 0]
self.room0 = 0
self.tele = 0
self.chest = 0
self.inputing = 0
self.note = 0
self.picture = 0
self.output = '欢迎来到谜之间1, 发送游戏指令请在字母或数字后加一个感叹号, 祝你玩的开心.\n你醒来了, 发现自己被困在一个屋子里, 你得逃出去.\n'
self.output += '你现在在房间1\n'
self.output += 'a)原地找找线索\n'
self.output += 'b)去上个房间\n'
self.output += 'c)去下个房间\n'
self.output += 'd)查看家具\n'
self.output += 'f)查看手中的物品'
self.sent = 1

部分代码如上,能大概看出这大概是一个怎样的小游戏了,把机器人放到过几个群里,大家也感觉挺有意思,特别是好几个人一起游玩解谜的感觉。

未完善的部分

我还没有研究管理员ban的部分,讲道理用模拟键鼠操作原理上一定可以。

之后还想实现的比如说现在的回复仅限于文字,是否可以用图像形式上传,甚至以qq视频的形式直播……

感觉能够做到的事还算挺多的,不过太多冗余的功能可能也没有必要,大费周章地在qq群里下象棋为什么不去qq游戏大厅开一把呢?

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信