缘由
由于我个人有个小博客,然后还录制了一些课程,所有就建立了对应的微信群,但是微信群的二维码是变化的,总不能经常换了。所以就想搞一个微信机器人,自动加 微信,自动拉群。废话不多说,先上图
效果展示
大家可以试试效果,效果相当棒
需求
其他人可以通过二维码加我好友 自动通过
好友通过之后 主动发送一些邀请入群链接和介绍信
回复 邀请 、加群 可以发送邀请入群链接
所有聊天数据都要存储起来 并且可以通过Web展示
根据用户输入信息 回复相关内容
技术选型
Python3
Flask:轻量级的MVC 框架
itchat :实现微信API相关接口
MySQL:存储相关微信内容
图灵机器人:调用API实现主动场景回复
架构
本人没有使用flask 默认的MVC方式,使用了我自己实现过后的:结构分层明了的MVC框架 。结构如下
每一个文件夹都有自己明确的作用
├── application.py
├── common
│ ├── libs
│ └── models
├── config
│ ├── base_setting.py
│ ├── local_setting.py
│ ├── production_setting.py
├── controllers
│ ├── index.py
│ ├── member.py
├── interceptors
│ ├── Auth.py
│ ├── errorHandler.py
├── jobs
│ ├── launcher.py
│ ├── movie.py
│ └── tasks
├── manager.py
├── requirement.txt
├── static
│ ├── js
│ └── plugins
├── templates
│ ├── common
│ ├── index.html
│ ├── info.html
│ └── member
├── test
│ └── apsch_test.py
├── tornado_server.py
└── www.py
实现源码
这里将主要实现源码如下
# -*- coding: utf-8 -*-
from application import app,db
import itchat,signal,json,time,os,random
import multiprocessing
from ctypes import c_bool, c_int
from common.libs.tuling123.TuLingService import TuLingService
from common.libs.wxbot.WeChatBotService import WeChatBotService
from common.models.queue import QueueList
from common.libs.DateUtil import getCurrentTime
import traceback,requests
'''
python manage.py runjob -m wechatbot/index
'''
class JobTask():
def __init__(self):
pass
def run(self, params):
try:
# 增加重试连接次数
# requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭。
s = requests.session()
s.keep_alive = False
itchat.auto_login( enableCmdQR=2,hotReload=True )
threads = []
t_queue_consumer = multiprocessing.Process(target = syncConsumer, args=("t_queue_consumer",) )
t_queue_consumer.daemon = True
threads.append( t_queue_consumer )
app.logger.info( 'Parent process {0} is Running'.format( os.getpid() ) )
for i in range( len(threads) ):
threads[i].start()
#初始化所有的朋友,存入队列,然后进程做事情
queue_msg