一個讓微信定時循環發送訊息(使用cron表達式任務可以精確到分鐘),批量群發訊息的小工具,並且提供了一個簡易直觀的介面,可部署到任意平台
✅群發訊息:一次向多個好友發送不同的訊息
✅自動發送訊息:自動檢查時間並在對應時刻發送訊息?(基於cron表達式,可精確到分鐘)
✅循環發送訊息:cron表達式可設定任意循環作業
✅定時偵測聊天記錄,並根據偵測結果提醒?
✅可靠性保證:日誌記錄以及自動錯誤偵測,可保證定時任務不遺漏執行?
✅登入認證保護:登入保護,確保資料安全性
✅全平台支持,輕鬆部署在伺服器上,服務端部署在win平台接受客戶端的請求,客戶端可部署到任意平台?
本專案分為2部分,服務端與客戶端:
服務端是一個輕量的伺服器,和微信一起安裝在win上
服務端完全與客戶端脫耦,接受http請求來對微信進行自動化操作,你也可以自己寫一個客戶端來調用服務端的接口
wechat/ping
:檢查服務端是否正常運行,返回'status': 'pong'
wechat/send_message
:傳送訊息,接受json格式的資料name
、 text
,並對微信進行自動化操作wechat/check_wechat_status
:檢查微信是否正常運作wechat/get_dialogs
:取得聊天記錄wechat/get_dialogs_by_time_blocks
:根據時間段取得聊天記錄,傳回巢狀列表wechat/send_file
:傳送文件服務端有訊息佇列和互斥鎖,只需要把訊息傳送給服務端,服務端會自動處理訊息佇列,保證訊息依序發送,所以你也可以部署多個客戶端對同一個服務端傳送訊息
客戶端是一個輕量的前端,可以在任意平台上運行,透過網路請求發送訊息給服務端
首页
:功能概覽日志
:查看客戶端函數呼叫狀況的日誌,方便調試和檢測錯誤,正常情況下是不會失敗的,失敗說明函數呼叫出現問題了,有可能出現漏發訊息,發錯訊息,資料保存失敗的狀況,需要注意错误检测
:檢測客戶端的各種功能是否正常以及定時任務是否遺漏发送消息管理
:批次發送訊息定时任务管理
:定時發送訊息邮箱报警
:自動偵測錯誤,並且傳送錯誤訊息到指定的郵箱上数据管理界面
:管理資料庫內容,編輯傳送訊息為了簡化服務端配置,請把微信安裝在C:/Program Files/Tencent/WeChat/WeChat.exe
,這個位置是微信預設的安裝位置
如果你微信安裝在其他地方,請使用原始碼部署,然後執行伺服器後:
造訪
http://127.0.0.1:8000/admin/wechat_app/wechatconfig/1/change/
,使用者名稱admin
,密碼tykWyr-bepqu6-fafvym
,手動修改微信的安裝位置
注意windows的路徑分隔符是
,但是在python中
是轉義字符,所以需要用
/
代替,例如
Windows资源管理器复制出来文件路径是:`C:Program FilesTencentWeChatWeChat.exe`
但是在后台中需要写成:`C:/Program Files/Tencent/WeChat/WeChat.exe
儲存好之後你可以執行
pyinstaller YuYuWechatV2_Server.spec
重新編譯服務端為EXE,然後部署到伺服器上
在release介面找到最新的版本,下載YuYuWechatV2_Server.exe
和YuYuWechatV2_Server_run.bat
兩個檔案放在同一個目錄下,請雙擊YuYuWechatV2_Server_run.bat
即可運作(預設連接埠是8000,若衝突了請自行修改bat檔案指定連接埠)
cd到YuYuWechatV2_Server
目錄下
安裝依賴pip install -r requirements.txt
運行python manage.py runserver 0.0.0.0:8000
上一步安裝並執行服務端後,可以用簡單的命令測試服務端是否成功執行
開啟終端(powershell):
curl http://127.0.0.1:8000/wechat/ping
正常會返回
StatusCode : 200
StatusDescription : OK
Content : { " status " : " pong " }
RawContent : HTTP/1.1 200 OK
Vary: origin
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
Content-Length: 18
Content-Type: applicat...
Forms : {}
Headers : {[Vary, origin], [X-Frame-Options, DENY], [X-Content-Type-Options, nosniff], [Referrer-Policy, same
-o rigin]...}
Images : {}
InputFields : {}
Links : {}
Links : {} ParsedHtml : System.__ComObject RawContentLength : 18
$jsonData = ' {"name": "文件传输助手", "text": "hi"} '
Invoke-WebRequest -Uri http://127.0.0.1:8000/wechat/send_message/ -Method Post -Headers @{ " Content-Type " = " application/json " } -Body $jsonData -ContentType " application/json; charset=utf-8 "
這個指令會給文件傳輸助手發送一則訊息hi
打開終端機:
curl -X GET http://替换成服务器的ip地址:8000/wechat/ping/
curl -X POST http://替换成服务器的ip地址:8000/wechat/send_message/ -H " Content-Type: application/json " -d ' {"name": "文件传输助手", "text": "hi"} '
YuYuWechatV2_Server需要GUI介面,所以要確保Windows不會鎖定螢幕
win+r运行命令
gpedit.msc
我已經編譯好了x86和arm的docker映像,Windows/mac/Linux的x86和arm架構都可以運行
docker-compose.yml
文件postgres_data
,用於掛載資料庫文件docker-compose up
即可運行docker-compose.yml
檔案裡修改- CSRF_TRUSTED_ORIGINS=https://localhost,https://yourdomain.com # 定义CSRF信任域
,不然會出現csrf問題
這個docker檔案會拉取三個映像,
`mona233/yuyuwechatv2_client:latest`
`redis:latest`,因为定时任务的celery需要一个消息队列,我默认使用redis,端口为6379
`postgres:latest`,因为客户端需要一个数据库,我默认使用postgres,端口为5432
yuyuwechatv2_client.tar.gz
,這是編譯好的docker映像,導入本地docker即可如果你想自訂資料庫結構和增加功能,可以從原始碼運行
tykWyr-bepqu6-fafvym
,你也可以手動在Django的設定裡修改YuYuWechatV2_Client
目錄下pip install -r requirements.txt
python manage.py runserver 127.0.0.1:7500 --insecure
YuYuWechatV2_Client/YuYuWechatV2_Client/settings.py
檔裡修改CSRF_TRUSTED_ORIGINS = os.environ.get('CSRF_TRUSTED_ORIGINS', 'https://localhost').split(',')
,不然會出現csrf問題
127.0.0.1:7500
即可開啟前端首頁首先是登入介面,需要自己手動建立一個超級用戶,新開一個終端:
進入docker容器
docker exec -it yuyuwechatv2_client bash
掛載目錄
cd /app
建立超級使用者(請自行設定使用者和密碼)
python manage.py createsuperuser
然後在登入介面輸入使用者名稱和密碼即可登入
192.168.50.1:8000
,然後點擊測試伺服器是否連通,連通後,點擊儲存伺服器ip即可持久化儲存到資料庫,下次不需要再設定伺服器ip启动定时任务
,才會啟動定時發送任務和郵件信箱警報功能其他功能在側邊欄點擊即可跳到對應的介面,前端網頁只涉及對資料庫的檢視和傳送操作,對使用者和訊息內容的增加,刪除,修改均需要在後台管理介面進行,這樣可以保證資料的安全性
127.0.0.1:7500/admin
,可以進入後台管理介面在client_app裡是客戶端的數據,可以看到有以下數據表
Messages
:傳送訊息管理的資料表Scheduled messages
:定時任務管理的資料表Server configs
:服務端配置Wechat users
:微信用戶資料表Email settingss
:郵件設定Logs
:日誌資料表Error logs
:錯誤檢測資料表Username
:微信好友名字或備註名,必須在搜尋結果中排名第一(必填)Wechatid
:微訊號(非必填)Date added
:好友新增日期(非必填)Group:
:好友分組,前端網頁可依分組篩選好友,方便分組管理(非必填) Is active
:本訊息是否激活,激活後才會定時發送,預設是激活的User
:選擇上一步增加的微信使用者(必填)Text
:發送的訊息內容(必填)Cron expression
:cron表達式,定時發送的時間,格式為* * * * *
,分別代表分时日月周
(必填)Execution count:
:訊息的執行次數,0為不執行,每次執行後會減一,直到為0,這樣可以控制訊息的發送次數(需要手動設定次數)Execution skip
:訊息的跳過次數,預設為0。若設為1,則下次不會執行任務,下下次才會,若設為2,則會跳過兩次任務,以此類推,這樣可以控制定時發送訊息的開始(非必填)透過cron表达式
和消息的执行次数
和消息的跳过次数
,即可實現訊息的任意時刻開始,結束,在任意時間發送訊息,循環發送訊息
關於cron表达式
,本程式是5段式的cron表達式,精確到分鐘,請不要和7段式搞混網上有在線生成器或者ChatGPT生成也可以以下是一些例子
* * * * *:每分钟执行一次
0 * * * *:每小时执行一次
0 0 * * *:每天执行一次
0 0 * * 1:每周一执行一次
*/10 * * * * # 每10分钟执行一次
0 0 */2 * * # 每隔一天午夜12点执行
0 0 * * 1 # 每周一午夜12点执行
0 0 1 * * # 每月1日午夜12点执行
使用郵件警報功能,可以在發生錯誤時,自動發送郵件給指定的郵箱,方便及時處理錯誤
在首頁點選信箱配置,會跳到後台
這裡建議使用163郵箱,以下是郵箱的詳細配置(如果使用163郵箱,前三項不需要改動)
Email host
:smtp的位址Email port
:smtp的端口Email security
:選擇加密方法Email host user
:信箱帳號Email host password
:信箱密碼(這裡一般是授權碼,請自行申請)Default from email:
:發送郵件的信箱,一般跟Email host user
一樣Recipient list:
:接收郵件的信箱,可以填多個,用逗號隔開寫好ScheduledMessage後,有時候需要同時產生MessageCheck,這是很常見的場景,所以我寫了個遷移器來方便從cheduledMessage 產生MessageCheck
YuYuWechatV2_Client
python manage.py generate_message_checks
這個遷移器預設會把ScheduledMessage,依照以下規則創建MessageCheck
is_active=scheduled_message.is_active, # 保持与 ScheduledMessage 一致的激活状态
user=scheduled_message.user, # 关联的用户与 ScheduledMessage 相同
keyword="", # keyword 留空
cron_expression=cron_expression_day_after, # 设置为第二天 15:00 的 cron 表达式
message_count=1, # 默认仅检查一条消息
report_on_found=False # 默认不报告找到的关键词
若想自訂產生規則,可以修改YuYuWechatV2_Client/client_app/management/commands/generate_message_checks.py
函數
微信發送的訊息通常非常重要,為了確保訊息的發送不會出現問題, YuYuWechat使用了多種手段來保證系統的可靠性,但仍可能出現錯誤,若有錯誤,歡迎提issue
錯誤理論上不可避免,所以錯誤檢測至關重要
測試是驗證程式碼是否如預期運作的重要手段,YuYuWechat透過GitHub action進行自動化測試,詳細的測試範例請參考.github
資料夾
easyChat YuYuWechatV2_Server的核心就是easyChat,請支持它
軟體的維護需要一定的成本,如果你覺得這個軟體對你有幫助,歡迎打賞作者一杯咖啡☕️
YuYuWechat是完全免費的,捐贈只是為了支持作者繼續開發和維護軟體,並非強制性的
程式碼僅用於UIAutomation技術的交流學習使用,禁止用於實際生產項目,請勿用於非法用途和商業用途!如因此產生任何法律糾紛,均與作者無關!