翼度科技»论坛 编程开发 python 查看内容

【Python微信机器人】第六篇:优化使用方式,可pip安装

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
优化内容

这篇不聊技术点,说一下优化后的Python机器人代码怎么使用,优化内容如下:

  • 将hook库独立成一个库,发布到pypi,可使用pip安装
  • 将微信相关的代码发布成另一个库,也可以pip安装
  • git仓库统一,以后都在这个仓库更新,不再一篇文章一个仓库
  • 开始建群,根据群里反馈增加功能和修复bug
使用教程

当前支持的微信版本

32位:

  • 3.9.8.12
64位:

  • 3.9.8.15
等这个系列教程结束再更新最新版本。其实hook库和主动调用都已经说完了,也可以等群友提pr来更新。
当前支持功能


  • 发送文本消息
  • 发送图片消息
  • hook微信日志输出
  • hook接收消息(下篇更新)
  • 防撤回(下篇更新)
准备环境


  • 安装支持的版本微信 (下载链接: https://www.123pan.com/s/ihEKVv-XcWx.html 提取码: 5WLu)
  • 安装32位或64位Python(取决于你安装的微信是32位还是64位),版本大于等于3.7
  • pip install --upgrade wechat_pyrobot
后续如果要更新代码都需要执行一遍: pip install --upgrade wechat_pyrobot
使用

首先创建一个目录,例如robot_code,再创建一个main.py(名称随意)写入以下代码:
  1. from py_process_hooker import inject_python_and_monitor_dir
  2. if __name__ == "__main__":
  3.     process_name = "WeChat.exe"
  4.     open_console = True
  5.     inject_python_and_monitor_dir(process_name, __file__, open_console=open_console)
复制代码
启动并登录微信,执行这个main.py就会把Python注入到微信并且打开控制台,你也可以将open_console设置成False,就不会打开控制台,不过这样就不方便调试了

接着你在当前目录创建的任何代码保存后,都会被自动加载到微信并执行(注意创建的带代码文件名不能以数字开头)
发送消息

例如 创建一个sendmsg.py,写入以下代码后保存:
  1. import time
  2. from module import SendMsg
  3. st = SendMsg()
  4. st.send_text("filehelper", "测试消息!")
  5. # 注意发送消息之间要间隔时间
  6. time.sleep(1)
  7. st.send_image("filehelper", r"D:\a.png")
复制代码
第一个参数是wxid,获取方式后面再讲,或者下篇接收消息也能获取到好友的wxid,第二个参数是消息内容
发送消息时不要使用死循环,会阻塞Python进程,如果想定时发送消息,可以使用Python的定时器threading.Timer或者多线程threading.Thread
定时发消息
  1. import time
  2. from threading import Timer
  3. from module import SendMsg
  4. st = SendMsg()
  5. def send_timer(n: int):
  6.     global msg_timer
  7.     t = time.strftime("%Y-%m-%d")
  8.     msg_text = f"{t}: {n}"
  9.     st.send_text("filehelper", msg_text)
  10.     # 10秒后再执行一次
  11.     msg_timer = Timer(10, send_timer, (n+1, ))
  12.     msg_timer.start()
  13. # 2秒后执行send_timer
  14. msg_timer = Timer(2, send_timer, (1, ))
  15. msg_timer.start()
  16. # timer.cancel()#取消执行
复制代码
如果想定点发消息,可以每隔一秒开启一个定时器,判断时间是否是符合要求,符合就发送,不符合就继续。
取消定时器(解释见下面的骚操作):
  1. import sys
  2. sendmsg_timer = sys.modules["sendmsg_timer"]
  3. msg_timer = sendmsg_timer.msg_timer
  4. msg_timer.cancel()
复制代码
hook日志

例如创建一个hooklog.py,写入以下代码后保存:
  1. from module import HookLog
  2. hooker = HookLog()
  3. hooker.hook()
复制代码
日志就会打印在控制台。hook不会阻塞进程,因为回调函数是在微信内部被调用,所以不需要使用多线程
骚操作

之前说了加载模块都会被保存在sys.modules这个字典里,而这个热加载就是以模块形式加载代码
所以你可以在新文件里引用之前文件的变量和方法,例如我新建一个unhooklog.py, 写入如下代码:
  1. import sys
  2. # 获取robot.py模块
  3. robot = sys.modules["robot"]
  4. # 获取robot模块中的hooker变量
  5. hooker = robot.hooker
  6. # 取消hook
  7. hooker.unhook()
复制代码
这在使用定时器和多线程时很有用,hook类已经被定义成了单例模式,不需要这样操作,你新建一个文件在实例化一个也是一样的效果
  1. from module import HookLog
  2. hooker = HookLog()
  3. hooker.unhook()
复制代码
接收消息

待更新
防撤回

待更新

来源:https://www.cnblogs.com/kanadeblisst/p/17915515.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具