这下谁敢和我比熬夜

终于放假了,竟然有同学想和我比赛熬夜,方法是在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
5 条评论
  1. 膜拜ing,表示Python也能做这个哦

  2. 墨色是猪,不解释!

      1. 我们商量了一下,漏斗妹妹给你考前指导,我帮你复习,流光光帮你心里辅导,肿么样?

        1. 好给力的阵营!!快帮我咨询流光,还几天就高考了我还一点不紧张怎么办 ╯▂╰

发表一条评论