当前位置:脚本大全 > > 正文

python微信自动化(python微信撤回监测代码)

时间:2021-10-11 00:57:12类别:脚本大全

python微信自动化

python微信撤回监测代码

 本文实例为大家分享了python微信撤回的监测代码,供大家参考,具体内容如下

注意:这里用了一个wechat库,当然,wechat库是基于微信提供的官方接口实现的。

这里的核心就是通过网页登陆微信的方式,然后获取各个通讯信息,然后存进内存,最后检测各种微信的操作,最后写入微信里面的文件传输助手即可。

直接看代码,然后运行,慢慢调试几次,就明白咋回事了。

  • ?
  • 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
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • #coding=utf8
  • import itchat
  • import requests
  • import time
  • import os
  • import re
  • import threading
  •  
  • #全局变量,对于每个用户的机器人开关
  • user_bot_control_flag = {}
  • #全局变量,我的昵称
  • mynickname = ''
  •  
  • def bot_chat_init():
  •   # 获取好友列表
  •   friends = itchat.get_friends(update=true)[0:]
  •   #将标志位置为0
  •   for i in friends[1:]:
  •     user_bot_control_flag[i["username"]] = 0
  •  
  •  
  • @itchat.msg_register(itchat.content.text)
  • def tuling_reply(msg):
  •   #  获取到发送消息者身份,如果身份匹配,就做对应的事
  •   # itchat.send_msg('已经收到了文本消息,消息内容为%s' % msg['text'], tousername=msg['fromusername'])
  •   # 如果图灵key出现问题,那么reply将会是none
  •   if msg['text']=='service crond start':
  •     return u'你一看就是个程序员'
  •   if msg['text'] == 'dididididi':
  •     return u'开车了'
  •   reply = get_response(msg['text'])
  •   if not msg['fromusername'] == myusername:
  •     pass
  •     # 发送一条提示给文件助手
  •     # itchat.send_msg(u"[%s]收到好友@%s 的信息:%s\n" %
  •     #         (time.strftime("%y-%m-%d %h:%m:%s", time.localtime(msg['createtime'])),
  •     #         msg['user']['nickname'],
  •     #         msg['text']), 'filehelper')
  •   # a or b的意思是,如果a有内容,那么返回a,否则返回b
  •   # 有内容一般就是指非空或者非none,你可以用`if a: print('true')`来测试
  •   return reply or u'[自动回复]您好,我现在有事不在,一会再和您联系。\n已经收到您的的信息:%s\n' % (msg['text'])
  •  
  •  
  • def friend():
  •   # 初始化计数器,有男有女,当然,有些人是不填的
  •   # 获取好友列表
  •   friends = itchat.get_friends(update=true)[0:]
  •   male = female = other = 0
  •  
  •   # 遍历这个列表,列表里第一位是自己,所以从"自己"之后开始计算
  •   # 1表示男性,2女性
  •   for i in friends[1:]:
  •     print (i)      #打印出签名
  •     sex = i["sex"]
  •     if sex == 1:
  •       male += 1
  •     elif sex == 2:
  •       female += 1
  •     else:
  •       other += 1
  •   # 总数算上,好计算比例啊~
  •   total = len(friends[1:])
  •   # 好了,打印结果
  •   print(u"共有好友:%d" % total)
  •   print (u"男性好友:%.2f%%" % (float(male) / total * 100))
  •   print (u"女性好友:%.2f%%" % (float(female) / total * 100))
  •   print (u"其他:%.2f%%" % (float(other) / total * 100))
  •  
  • def get_response(msg):
  •   # 这里我们就像在“3. 实现最简单的与图灵机器人的交互”中做的一样
  •   # 构造了要发送给服务器的数据
  •   apiurl = 'http://www.tuling123.com/openapi/api'
  •   data = {
  •     'key'  : key,
  •     'info'  : msg,
  •     'userid' : 'wechat-robot',
  •   }
  •   try:
  •     r = requests.post(apiurl, data=data).json()
  •     # 字典的get方法在字典没有'text'值的时候会返回none而不会抛出异常
  •     return r.get('text')+'----来自机器人小z的智能回复----'
  •   # 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常
  •   # 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return
  •   except:
  •     # 将会返回一个none
  •     return
  •  
  •  
  • @itchat.msg_register(itchat.content.text, isgroupchat=true) #msg['actualnickname'] 群里发消息的人名 #msg['user']['nickname'] 群名称
  • def text_reply(msg):
  •   # print (msg['user'])    #一个宏大的结构体
  •   # print ("群聊名字"+msg['user']['nickname']) #群聊名称
  •   # print (msg['fromusername'])
  •   #监控所有群的消息,后来做统计用,后面可以做关键词分析什么的
  •   file_object = open(mynickname+"群"+msg['user']['nickname'], 'a')
  •   write_data = ''.join(time.strftime("%y-%m-%d %h:%m:%s" , time.localtime(msg['createtime'])))+" "+msg['actualnickname']+": "+msg['text']+"\n"
  •   file_object.write(write_data)
  •   file_object.close()
  •   #指定群聊可以智能群聊
  •   if msg['user']['nickname'] == '184':
  •     print (" 184 ok")
  •     itchat.send(get_response(msg['text']),msg['fromusername'])
  •   #监控群聊内容发送到文件助手,已经被自己屏蔽掉了
  •   # itchat.send_msg(u"[%s]收到%s群 %s 的信息:%s\n" %
  •   #         (time.strftime("%y-%m-%d %h:%m:%s", time.localtime(msg['createtime']))
  •   #         ,msg['user']['nickname'],msg['actualnickname'],
  •   #         msg['text']), 'filehelper')
  •   # 判断是否有人@自己
  •   if (msg.isat):
  •    # 如果有人@自己,就发一个消息告诉对方我已经收到了信息
  •     itchat.send_msg("我已经收到了来自{0}的消息,实际内容为{1}".format(msg['actualnickname'], msg['text']),
  •       tousername=msg['fromusername'])
  •  
  • # def sendmsgtopsh():
  • #   while (true):
  • #     pass
  • #     # print ("123456")
  • #
  • # threads = []
  • # t1 = threading.thread(target=sendmsgtopsh())
  •  
  •  
  • # 说明:可以撤回的有文本文字、语音、视频、图片、位置、名片、分享、附件
  •  
  • # {msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)}
  • msg_dict = {}
  •  
  • # 文件存储临时目录
  • rev_tmp_dir = "/home/seen/pycharmprojects/code"
  • if not os.path.exists(rev_tmp_dir): os.mkdir(rev_tmp_dir)
  •  
  • # 表情有一个问题 | 接受信息和接受note的msg_id不一致 巧合解决方案
  • face_bug = none
  •  
  •  
  • # # 将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理 | 不接受不具有撤回功能的信息
  • # # [text, picture, map, card, sharing, recording, attachment, video, friends, note]
  • # @itchat.msg_register([itchat.content.text, itchat.content.picture, itchat.content.map, itchat.content.card, itchat.content.sharing,
  • #            itchat.content.recording,itchat.content. attachment, itchat.content.video],isgroupchat=true)
  • # def handler_receive_msg(msg):
  • #   #回复特定用户消息
  • #   # if msg['user']['nickname']=='yyyyy' or msg['user']['nickname']=='彭芊芊':
  • #   #   print ("yhj ok")
  • #   #   itchat.send_msg(get_response(msg['text']), tousername=msg['fromusername'])
  • #   # 先获取对方说来的话
  • #   # 下面一行是获取发送消息者昵称
  • #   send_user_name = itchat.search_friends(username=msg['fromusername'])['nickname']
  • #   file_object = open(mynickname + "&" + msg['user']['nickname'], 'a')
  • #   write_data = ''.join(time.strftime("%y-%m-%d %h:%m:%s", time.localtime(msg['createtime']))) + " " + \
  • #         send_user_name + ": " + msg['text'] + "\n"
  • #   file_object.write(write_data)
  • #   file_object.close()
  • #
  • #   #控制指令检测模块
  • #   if msg['text'] == 'service robot start':
  • #     user_bot_control_flag[msg['fromusername']]=1   #检测到开启指令后开启机器人
  • #     itchat.send_msg("robot small z started...waiting for your service", tousername=msg['fromusername'])
  • #   if msg['text'] == 'service robot stop':
  • #     user_bot_control_flag[msg['fromusername']]=0   #检测到开启指令后关闭机器人
  • #     itchat.send_msg("robot small z stoped...get 'service robot start' restarted", tousername=msg['fromusername'])
  • #   #在开关开启的情况下回复对方对话
  • #   if not msg['fromusername'] == myusername:
  • #     if user_bot_control_flag[msg['fromusername']]:
  • #       # 存储单人对话模块
  • #       # 下面一行是获取发送消息者昵称
  • #       reply = get_response(msg['text'])
  • #       file_object = open(mynickname + "&" + msg['user']['nickname'], 'a')
  • #       write_data = ''.join(time.strftime("%y-%m-%d %h:%m:%s", time.localtime(msg['createtime']))) + " " + \
  • #             mynickname + ": " + reply + "\n"
  • #       file_object.write(write_data)
  • #   

    猜您喜欢