【Python微信机器人】第六篇:优化使用方式,可pip安装
優(yōu)化內(nèi)容
這篇不聊技術(shù)點(diǎn),說(shuō)一下優(yōu)化后的Python機(jī)器人代碼怎么使用,優(yōu)化內(nèi)容如下:
- 將hook庫(kù)獨(dú)立成一個(gè)庫(kù),發(fā)布到pypi,可使用pip安裝
- 將微信相關(guān)的代碼發(fā)布成另一個(gè)庫(kù),也可以pip安裝
- git倉(cāng)庫(kù)統(tǒng)一,以后都在這個(gè)倉(cāng)庫(kù)更新,不再一篇文章一個(gè)倉(cāng)庫(kù)
- 開(kāi)始建群,根據(jù)群里反饋增加功能和修復(fù)bug
使用教程
當(dāng)前支持的微信版本
32位:
3.9.8.12
64位:
3.9.8.15
等這個(gè)系列教程結(jié)束再更新最新版本。其實(shí)hook庫(kù)和主動(dòng)調(diào)用都已經(jīng)說(shuō)完了,也可以等群友提pr來(lái)更新。
當(dāng)前支持功能
- 發(fā)送文本消息
- 發(fā)送圖片消息
- hook微信日志輸出
- hook接收消息(下篇更新)
- 防撤回(下篇更新)
準(zhǔn)備環(huán)境
- 安裝支持的版本微信 (下載鏈接:
https://www.123pan.com/s/ihEKVv-XcWx.html提取碼:5WLu) - 安裝32位或64位Python(取決于你安裝的微信是32位還是64位),版本大于等于3.7
pip install --upgrade wechat_pyrobot
后續(xù)如果要更新代碼都需要執(zhí)行一遍: pip install --upgrade wechat_pyrobot
使用
首先創(chuàng)建一個(gè)目錄,例如robot_code,再創(chuàng)建一個(gè)main.py(名稱(chēng)隨意)寫(xiě)入以下代碼:
from py_process_hooker import inject_python_and_monitor_dir
if __name__ == "__main__":
process_name = "WeChat.exe"
open_console = True
inject_python_and_monitor_dir(process_name, __file__, open_console=open_console)
啟動(dòng)并登錄微信,執(zhí)行這個(gè)main.py就會(huì)把Python注入到微信并且打開(kāi)控制臺(tái),你也可以將open_console設(shè)置成False,就不會(huì)打開(kāi)控制臺(tái),不過(guò)這樣就不方便調(diào)試了
接著你在當(dāng)前目錄創(chuàng)建的任何代碼保存后,都會(huì)被自動(dòng)加載到微信并執(zhí)行(注意創(chuàng)建的帶代碼文件名不能以數(shù)字開(kāi)頭)
發(fā)送消息
例如 創(chuàng)建一個(gè)sendmsg.py,寫(xiě)入以下代碼后保存:
import time
from module import SendMsg
st = SendMsg()
st.send_text("filehelper", "測(cè)試消息!")
# 注意發(fā)送消息之間要間隔時(shí)間
time.sleep(1)
st.send_image("filehelper", r"D:\a.png")
第一個(gè)參數(shù)是wxid,獲取方式后面再講,或者下篇接收消息也能獲取到好友的wxid,第二個(gè)參數(shù)是消息內(nèi)容
發(fā)送消息時(shí)不要使用死循環(huán),會(huì)阻塞Python進(jìn)程,如果想定時(shí)發(fā)送消息,可以使用Python的定時(shí)器threading.Timer或者多線程threading.Thread
定時(shí)發(fā)消息
import time
from threading import Timer
from module import SendMsg
st = SendMsg()
def send_timer(n: int):
global msg_timer
t = time.strftime("%Y-%m-%d")
msg_text = f"{t}: {n}"
st.send_text("filehelper", msg_text)
# 10秒后再執(zhí)行一次
msg_timer = Timer(10, send_timer, (n+1, ))
msg_timer.start()
# 2秒后執(zhí)行send_timer
msg_timer = Timer(2, send_timer, (1, ))
msg_timer.start()
# timer.cancel()#取消執(zhí)行
如果想定點(diǎn)發(fā)消息,可以每隔一秒開(kāi)啟一個(gè)定時(shí)器,判斷時(shí)間是否是符合要求,符合就發(fā)送,不符合就繼續(xù)。
取消定時(shí)器(解釋見(jiàn)下面的騷操作):
import sys
sendmsg_timer = sys.modules["sendmsg_timer"]
msg_timer = sendmsg_timer.msg_timer
msg_timer.cancel()
hook日志
例如創(chuàng)建一個(gè)hooklog.py,寫(xiě)入以下代碼后保存:
from module import HookLog
hooker = HookLog()
hooker.hook()
日志就會(huì)打印在控制臺(tái)。hook不會(huì)阻塞進(jìn)程,因?yàn)榛卣{(diào)函數(shù)是在微信內(nèi)部被調(diào)用,所以不需要使用多線程
騷操作
之前說(shuō)了加載模塊都會(huì)被保存在sys.modules這個(gè)字典里,而這個(gè)熱加載就是以模塊形式加載代碼
所以你可以在新文件里引用之前文件的變量和方法,例如我新建一個(gè)unhooklog.py, 寫(xiě)入如下代碼:
import sys
# 獲取robot.py模塊
robot = sys.modules["robot"]
# 獲取robot模塊中的hooker變量
hooker = robot.hooker
# 取消hook
hooker.unhook()
這在使用定時(shí)器和多線程時(shí)很有用,hook類(lèi)已經(jīng)被定義成了單例模式,不需要這樣操作,你新建一個(gè)文件在實(shí)例化一個(gè)也是一樣的效果
from module import HookLog
hooker = HookLog()
hooker.unhook()
接收消息
待更新
防撤回
待更新
總結(jié)
以上是生活随笔為你收集整理的【Python微信机器人】第六篇:优化使用方式,可pip安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 创造与魔法中蓝蜥蜴饲料吃几包
- 下一篇: pkpm是什么软件?(BIM是什么)