Un petit outil qui permet à WeChat d'envoyer régulièrement des messages en boucle (l'utilisation des tâches d'expression cron peut être précise à la minute près) et des messages par lots. Il fournit également une interface simple et intuitive qui peut être déployée sur n'importe quelle plateforme.
✅Messagerie de groupe : envoyez différents messages à plusieurs amis à la fois
✅Envoyer automatiquement des messages : vérifier automatiquement l'heure et envoyer des messages au moment correspondant (basé sur l'expression cron, précise à la minute près)
✅Envoyer des messages en boucle : l'expression cron peut définir n'importe quel travail en boucle
✅Vérifier régulièrement les enregistrements de discussion et recevoir des rappels en fonction des résultats des tests ?
✅Garantie de fiabilité : la journalisation et la détection automatique des erreurs peuvent garantir que les tâches planifiées sont exécutées sans manquer de rythme ?
✅Protection de l'authentification de connexion : protection de connexion pour garantir la sécurité des données
✅ Prise en charge complète de la plateforme, facile à déployer sur le serveur, le serveur est déployé sur la plateforme gagnante pour accepter les demandes des clients, et le client peut être déployé sur n'importe quelle plateforme ?
Ce projet est divisé en 2 parties, serveur et client :
Le serveur est un serveur léger, installé sur Win avec WeChat
Le serveur est complètement découplé du client et accepte les requêtes http pour automatiser les opérations WeChat. Vous pouvez également écrire vous-même un client pour appeler l'interface du serveur.
wechat/ping
: Vérifiez si le serveur fonctionne normalement, retournez 'status': 'pong'
wechat/send_message
: envoyez des messages, acceptez name
des données et text
au format json et effectuez des opérations automatisées sur WeChatwechat/check_wechat_status
: Vérifiez si WeChat fonctionne normalementwechat/get_dialogs
: obtenir l'historique des discussionswechat/get_dialogs_by_time_blocks
: obtenez les enregistrements de discussion en fonction de la période de temps et renvoie une liste imbriquéewechat/send_file
: envoyer le fichierLe serveur dispose d'une file d'attente de messages et d'un verrou mutex. Il vous suffit d'envoyer des messages au serveur, et le serveur traitera automatiquement la file d'attente de messages pour garantir que les messages sont envoyés dans l'ordre, vous pouvez donc également déployer plusieurs clients vers lesquels envoyer des messages. le même serveur.
Le client est un frontal léger qui peut s'exécuter sur n'importe quelle plate-forme et envoie des messages au serveur via des requêtes réseau.
首页
: Aperçu des fonctionnalités日志
: vérifiez le journal de l'appel de fonction client pour faciliter le débogage et la détection des erreurs. Il n'échouera pas dans des circonstances normales. Un échec indique qu'il y a un problème avec l'appel de fonction. Il peut y avoir des messages manqués, des messages erronés et des échecs d'enregistrement des données. , il faut faire attention à错误检测
: Détectez si diverses fonctions du client sont normales et si des tâches planifiées sont manquantes发送消息管理
: envoyer des messages par lots定时任务管理
: envoi de messages à des heures planifiées邮箱报警
: détecte automatiquement les erreurs et envoie les informations d'erreur à l'adresse e-mail désignée数据管理界面
: gérer le contenu de la base de données, éditer et envoyer des messages Afin de simplifier la configuration du serveur, veuillez installer WeChat dans C:/Program Files/Tencent/WeChat/WeChat.exe
. Cet emplacement est l'emplacement d'installation par défaut de WeChat.
Si votre WeChat est installé ailleurs, veuillez utiliser le déploiement du code source, puis exécutez le serveur :
Visitez
http://127.0.0.1:8000/admin/wechat_app/wechatconfig/1/change/
, le nom d'utilisateur estadmin
, le mot de passe esttykWyr-bepqu6-fafvym
et modifiez manuellement l'emplacement d'installation de WeChat.
Notez que le séparateur de chemin dans Windows est
, mais en python
est un caractère d'échappement, il doit donc être remplacé par
/
, par exemple
Windows资源管理器复制出来文件路径是:`C:Program FilesTencentWeChatWeChat.exe`
但是在后台中需要写成:`C:/Program Files/Tencent/WeChat/WeChat.exe
Après l'enregistrement, vous pouvez exécuter
pyinstaller YuYuWechatV2_Server.spec
pour recompiler le serveur en EXE, puis le déployer sur le serveur.
Recherchez la dernière version sur l'interface de publication et téléchargez YuYuWechatV2_Server.exe
et YuYuWechatV2_Server_run.bat
Mettez les deux fichiers dans le même répertoire, double-cliquez sur YuYuWechatV2_Server_run.bat
pour exécuter (le port par défaut est 8000, en cas de conflit, veuillez modifier le fichier bat pour spécifier vous-même le port)
cd dans le répertoire YuYuWechatV2_Server
Installer les dépendances pip install -r requirements.txt
Exécutez python manage.py runserver 0.0.0.0:8000
Après avoir installé et exécuté le serveur à l'étape précédente, vous pouvez utiliser une commande simple pour tester si le serveur s'exécute correctement.
Terminal ouvert (PowerShell) :
curl http://127.0.0.1:8000/wechat/ping
Normalement ça reviendra
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 "
Cette commande enverra un message hi
à l'assistant de transfert de fichiers
Terminal ouvert :
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 nécessite une interface graphique, vous devez donc vous assurer que Windows ne verrouille pas l'écran.
win+r运行命令
gpedit.msc
J'ai compilé les images Docker de x86 et arm. Les architectures x86 et arm de Windows/mac/Linux peuvent fonctionner.
docker-compose.yml
postgres_data
dans le même répertoire pour monter le fichier de base de donnéesdocker-compose up
pour exécuter docker-compose.yml
- CSRF_TRUSTED_ORIGINS=https://localhost,https://yourdomain.com # 定义CSRF信任域
, sinon des problèmes CSRF se produiront
Ce fichier Docker extraira trois images,
`mona233/yuyuwechatv2_client:latest`
`redis:latest`,因为定时任务的celery需要一个消息队列,我默认使用redis,端口为6379
`postgres:latest`,因为客户端需要一个数据库,我默认使用postgres,端口为5432
yuyuwechatv2_client.tar.gz
dans l'interface de publication. Il s'agit de l'image du docker compilée. Importez-la simplement dans votre docker local. Si vous souhaitez personnaliser la structure de la base de données et ajouter des fonctionnalités, vous pouvez l'exécuter à partir du code source
tykWyr-bepqu6-fafvym
.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(',')
, sinon des problèmes csrf se produiront
127.0.0.1:7500
dans votre navigateur local pour ouvrir la page d'accueil frontale La première est l'interface de connexion. Vous devez créer manuellement un super utilisateur et ouvrir un nouveau terminal :
Entrez dans le conteneur Docker
docker exec -it yuyuwechatv2_client bash
Répertoire de montage
cd /app
Créez un super utilisateur (veuillez définir vous-même l'utilisateur et le mot de passe)
python manage.py createsuperuser
Saisissez ensuite votre nom d'utilisateur et votre mot de passe sur l'interface de connexion pour vous connecter.
192.168.50.1:8000
, puis cliquez pour tester si le serveur est connecté, cliquez sur Enregistrer l'adresse IP du serveur pour l'enregistrer de manière persistante dans la base de données. Il n'est pas nécessaire de configurer l'adresse IP du serveur la prochaine fois.启动定时任务
pour démarrer la tâche d'envoi planifiée et la fonction d'alarme par e-mail.Pour les autres fonctions, cliquez sur la barre latérale pour accéder à l'interface correspondante. La page Web frontale implique uniquement les opérations d'affichage et d'envoi sur la base de données. L'ajout, la suppression et la modification des utilisateurs et du contenu des messages doivent être effectués dans l'interface de gestion en arrière-plan. , qui assure la sécurité des données
127.0.0.1:7500/admin
dans votre navigateur local pour accéder à l'interface de gestion en arrière-plan. Dans client_app se trouvent les données client, vous pouvez voir le tableau de données suivant
Messages
: Table de données pour la gestion des messages d'envoiScheduled messages
: Tableau de données pour la gestion des tâches planifiéesServer configs
: configuration du serveurWechat users
: tableau de données des utilisateurs WeChatEmail settingss
: Paramètres de messagerieLogs
: tableau des données du journalError logs
: tableau de données de détection d'erreurs Username
: nom d'un ami WeChat ou nom de la remarque, doit être classé en premier dans les résultats de recherche ( obligatoire )Wechatid
: identifiant WeChat ( facultatif )Date added
: date à laquelle l'ami a été ajouté ( facultatif )Group:
Groupe d'amis. La page Web frontale peut filtrer les amis en fonction du groupe pour faciliter la gestion du groupe ( facultatif ). Is active
: Que ce message soit activé ou non. Il sera envoyé régulièrement après activation. La valeur par défaut est activée.User
: Sélectionnez l'utilisateur WeChat ajouté à l'étape précédente ( obligatoire )Text
: Contenu du message envoyé ( obligatoire )Cron expression
: expression cron, heure d'envoi régulier, le format est * * * * *
, représentant respectivement分时日月周
( obligatoire )Execution count:
Le nombre de fois que le message est exécuté, 0 signifie aucune exécution, et il sera réduit de un après chaque exécution jusqu'à ce qu'il soit 0, afin que le nombre de fois où le message est envoyé puisse être contrôlé ( le nombre doit à régler manuellement )Execution skip
: le nombre de sauts de messages, la valeur par défaut est 0. Si la valeur est 1, la tâche ne sera pas exécutée la prochaine fois, mais seulement la prochaine fois. Si la valeur est 2, la tâche sera ignorée deux fois, et ainsi de suite. Cela peut contrôler le début de l'envoi programmé du message ( facultatif ). Grâce cron表达式
et消息的执行次数
et消息的跳过次数
, le message peut être démarré et terminé à tout moment, le message peut être envoyé à tout moment et le message peut être envoyé en boucle.
Concernant cron表达式
, ce programme est une expression cron à 5 segments, précise à la minute près. Veuillez ne pas la confondre avec l'expression cron à 7 segments. Il existe des générateurs en ligne sur Internet ou ChatGPT.
* * * * *:每分钟执行一次
0 * * * *:每小时执行一次
0 0 * * *:每天执行一次
0 0 * * 1:每周一执行一次
*/10 * * * * # 每10分钟执行一次
0 0 */2 * * # 每隔一天午夜12点执行
0 0 * * 1 # 每周一午夜12点执行
0 0 1 * * # 每月1日午夜12点执行
Grâce à la fonction d'alarme par e-mail, lorsqu'une erreur se produit, un e-mail peut être automatiquement envoyé à la boîte aux lettres désignée pour faciliter le traitement rapide des erreurs.
Cliquez sur Configuration de la messagerie sur la page d'accueil et il passera au backend.
Il est recommandé d'utiliser la boîte aux lettres 163 ici. Voici la configuration détaillée de la boîte aux lettres (si vous utilisez la boîte aux lettres 163, les trois premiers éléments n'ont pas besoin d'être modifiés).
Email host
: adresse smtpEmail port
: port smtpEmail security
: Sélectionnez la méthode de cryptageEmail host user
: Compte de messagerieEmail host password
: Mot de passe de messagerie (il s'agit généralement d'un code d'autorisation, veuillez l'appliquer vous-même)Default from email:
l'adresse e-mail pour l'envoi d'e-mails, généralement la même que Email host user
Recipient list:
L'adresse e-mail pour recevoir les e-mails. Vous pouvez remplir plusieurs entrées, séparées par des virgules. Après avoir écrit ScheduledMessage, vous devez parfois générer MessageCheck en même temps. Il s'agit d'un scénario très courant, j'ai donc écrit un migrateur pour faciliter la génération de MessageCheck à partir de ScheduledMessage.
YuYuWechatV2_Client
python manage.py generate_message_checks
dans le terminalPar défaut, ce migrateur créera un ScheduledMessage et un MessageCheck selon les règles suivantes
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 # 默认不报告找到的关键词
Si vous souhaitez personnaliser les règles de génération, vous pouvez modifier la fonction YuYuWechatV2_Client/client_app/management/commands/generate_message_checks.py
Les messages envoyés par WeChat sont généralement très importants. Afin de garantir qu'il n'y aura aucun problème lors de l'envoi de messages, YuYuWechat utilise divers moyens pour garantir la fiabilité du système, mais des erreurs peuvent toujours se produire. bienvenue pour soulever un problème.
Les erreurs sont théoriquement inévitables, la détection des erreurs est donc cruciale
Les tests sont un moyen important de vérifier si le code s'exécute comme prévu. YuYuWechat effectue des tests automatisés via les actions GitHub. Pour des exemples de tests détaillés, veuillez vous référer au dossier .github
Le cœur d'easyChat YuYuWechatV2_Server est easyChat, veuillez le soutenir
La maintenance du logiciel nécessite un certain coût. Si vous pensez que ce logiciel vous est utile, n'hésitez pas à donner un pourboire à l'auteur☕️
YuYuWechat est entièrement gratuit, les dons servent uniquement à aider l'auteur à continuer de développer et de maintenir le logiciel, et ne sont pas obligatoires.
Le code est uniquement utilisé pour la communication et l'apprentissage de la technologie UIAutomation. Il est interdit de l'utiliser dans des projets de production réels. Veuillez ne pas l'utiliser à des fins illégales ou commerciales ! Si des litiges juridiques en résultent, l’auteur n’y est pour rien !