终于放假了,竟然有同学想和我比赛熬夜,方法是在QQ随便说一句话,对方必须在10分钟内回复,否则就输了。嘿嘿,一个几十行的软件轻松搞定,于是我爽快的答应了~
没想到该同学后来却似乎想起了什么,又跑来告诉我,绝对不能开挂,不能只回答“嗯、哦”之类的,他会提问题来验证是不是我本人。。
虽然说他无压力熬夜到5点,但我当然不会临阵脱逃,不过既然如此,就必须设计一个超高AI的机器人了!这种难度,堪比图灵验证码,不过我还是搞定了!用按键精灵实现。
软件功能:
1、智能识别“还在吗”或类似的语句,自动回复“当然还在”或类似的语句。
2、智能识别用于验证是否是机器人的疑问句,自动回复“你知道的”或类似的语句。
3、每一次回复延迟5~8分钟,并且10分钟内收到多条信息,只进行一次回复。防止被识破。
4、20分钟内未收到信息,发送“你还在不”或类似文字,10分钟内无回复,则发送“你输了”,并结束脚本。(收到对方第一条消息后,才会开始此20分钟倒计时)
5、前台随机移动鼠标,防止系统休眠或屏幕保护。
6、所有的回复均进行字符串加工,每一句回复都不相同。(fix函数)
使用方法:
把按键精灵脚本启动快捷键设置为F10,打开目标QQ聊天窗口(不能为多人标签模式),然后F10启动。
我的QQ版本:QQ5.0(9857),其他版本未测试。
实现原理:
1、获取QQ是否有信息发来,懒得读内存,直接检测图色变化。清屏后的QQ界面一旦收到来信,会在第一排固定位置显示出来,图色则会发生变化。
2、纯前台,运行后自动获取当前窗口句柄,调节窗口大小及位置。
3、获取QQ发来的信息内容,当然不可能去读内存,想也知道QQ做了这么多年不可能让其他软件这么容易就读取到聊天内容的,也不可能去用Orc,效率低,准确率也低。我的方法是点击QQ空白处,Ctrl+A全选,再Ctrl+C复制,然后读取剪贴板内容。
4、识别消息是否为问句。将之前获取到的内容进行检测,如果存在“吗”、“呢”就是疑问句,特殊处理。PS. 专门百度的汉语疑问词,一共有11个。
5、每次发完信息,都进行一次清屏(过程clear),理由见1。
6、使用按键精灵提供的API:Plugin.GetSysInfo.GetTime来返回操作系统启动后所经历的时间,以此进行时间的相关记录,但该函数返回的是毫秒级别的时间。
然后下面是我的代码,没有注释,不过理解的难点都在上面的“实现原理”里面了,需要的同学请拿走,有问题可以留言问我。
代码不能直接复制到按键精灵,请先粘贴到word,在复制粘贴到按键精灵。
很销魂的190行,算是个工程了,不过离聊天机器人还差得远。。。
可是最伤心的是那个同学居然喝了点酒,12点就熬不住了,都还没开我的软件就over了,悲剧 T.T
希望这个奇葩物下回能派上用场!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
qq = Plugin.Window.Foreground() Call Plugin.Window.Move(qq, 9, 5) Call Plugin.Window.Size(qq, 564, 545) Randomize Delay 500 Call clear() c0 = GetPixelColor(35, 139) wen0 = "谁、何、什么、哪、几、多少、吗、吧、呢、啊、?" Dim wenhui(7), wen wen = split(wen0, "、" ) wenhui(0) = "你猜" wenhui(6) = "不用问了,我在的" wenhui(2) = "我不晓得" wenhui(3) = "你又不是不晓得" wenhui(4) = "不给你讲" wenhui(5) = "废话少问,我在打游戏" wenhui(1) = "你这是在验证我是不是机器人?" wenhui(7) = "你喊我说我就要说啊?" zaima0 = "在吗、在不、在?、在?、睡没、在干" Dim wozai(5), zaima zaima = split(zaima0, "、" ) wozai(0) = "放心我在的" wozai(1) = "呃,我还没睡" wozai(2) = "在跑跑" wozai(4) = "我在打游戏" wozai(3) = "我在学习!" wozai(5) = "不可能睡的" Dim qita(8) qita(0) = "。。。。" qita(1) = "123" qita(2) = "=======" qita(3) = "===,在跑跑" qita(4) = "/kb" qita(5) = "/hq" qita(6) = "/lengh" qita(7) = "/shuai" qita(8) = "/kl" Dim hui(9) hui(0) = "在?" hui(1) = "睡没?" hui(2) = "速度回复" hui(3) = "!!" hui(4) = "睡了?" hui(5) = "还没睡?" hui(6) = "睡吧" hui(7) = "。。" hui(8) = " " hui(9) = "?" noneed = 0 begin = 0 gongt=0 While 1 If c0 <> GetPixelColor(35, 139) Then Rem finddiff begin = 1 gongt=Plugin.GetSysInfo.GetTime+20*60*1000 MoveTo 343, 247 LeftClick 1 KeyDown 17, 1 KeyPress 65, 1 Delay 500 KeyPress 67, 1 KeyUp 17, 1 Delay 500 LeftClick 1 Call clear() gethua=Plugin.Sys.GetCLB() If Plugin.GetSysInfo.GetTime > noneed Then If iswen(gethua) Then ask wenhui(int(rnd*8)) ElseIf iszai(gethua) Then ask wozai(int(rnd*6)) Else ask qita(int(rnd*9)) End If End If End If Delay 5000 MoveTo 800+ int(rnd * 100), int(rnd * 100) If begin Then If Plugin.GetSysInfo.GetTime > gongt Then SayString hui(int(rnd*10)) Delay 500 KeyPress "enter" , 1 Delay 500 noneed = Plugin.GetSysInfo.GetTime + 9 * 60 * 1000 tmp = 0 While c0 = GetPixelColor(35, 139) Delay 5000 tmp = tmp + 1 If tmp = 120 Then SayString "你输了!" Delay 500 KeyPress "enter" , 1 Delay 500 End If EndScript Wend Goto finddiff End If End If Wend Function ask(str) sleept =(int(rnd * 4) + 5) * 12 For sleept Delay 5000 MoveTo 800+int(rnd * 100), int(rnd * 100) Next SayString fix(str) Delay 500 KeyPress "enter" , 1 Delay 500 noneed = Plugin.GetSysInfo.GetTime + 9 * 60 * 1000 Call clear() End Function Function iswen(str) iswen=0 For i = 0 To 10 If instr(str, wen(i)) Then iswen = 1 Goto endfuniswen End If Next Rem endfuniswen End Function Function iszai(str) iszai=0 For i = 0 To 5 If instr(str, zaima(i)) Then iszai = 1 Goto endfuniszai End If Next Rem endfuniszai End Function Function fix(str) tmp2 = rnd fix=str If tmp < 0.2 Then fix = str & "!!" ElseIf tmp < 0.4 Then fix = str & "...." ElseIf tmp < 0.6 Then fix = str & "/bu" ElseIf tmp < 0.8 Then fix = ",," & str Else fix = str & "!!!!" End If If rnd < 0.15 Then fix = fix(fix) End If End Function Sub clear() MoveTo 550, 114 RightClick 1 Delay 500 MoveTo 600, 247 LeftClick 1 Delay 500 MoveTo 117, 458 LeftClick 1 Delay 300 End Sub |
膜拜ing,表示Python也能做这个哦
墨色是猪,不解释!
心禾是猪不解释! ●︿●
我们商量了一下,漏斗妹妹给你考前指导,我帮你复习,流光光帮你心里辅导,肿么样?
好给力的阵营!!快帮我咨询流光,还几天就高考了我还一点不紧张怎么办 ╯▂╰