• Stars
    star
    1,747
  • Rank 26,653 (Top 0.6 %)
  • Language Vue
  • License
    GNU General Publi...
  • Created over 7 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Wechat Management System

wechat-admin

微信管理系统

pyversions vueversions es2015 celery element ui travis ver License: GPL v3 contributions welcome

Preview

效果图

Web效果

欢迎扫码体验:

扫码加群

特性

  • 支持显示好友列表,可过滤
  • 支持显示群聊列表,可过滤
  • 可以同时给多个用户/群聊成员发送消息,支持发送文件,emoji表情。可预览
  • 如果为群聊创建者,可以删除(多个)成员
  • 可以选择好友/群聊成员创建新群
  • 对自动建群、加群关键词、邀请文本等可配置
  • 永久保存消息,可以通过消息列表页面查看和过滤。接收消息进程停止自动重启
  • 支持消息提醒
  • 支持发送加群聊成员好友请求
  • 自动添加联系人,拉对方入群,群满之后自动创建新群
  • 支持插件系统,内置图灵机器人、ChatterBot、Simsimi等插件
  • 可以指定公众号,当公众号发布文章后自动转发到指定的群聊里
  • 群成员可发起投票踢人,可以灵活的设置投票规则

...

使用的技术和库

前端

  • Vue
  • Axios
  • Element-ui
  • Vue-cli

后端

  • Flask
  • Celery
  • SSE
  • Walrus
  • Gunicorn
  • Flask-Migrate
  • Flask-SQLAlchemy
  • ItChat
  • Wxpy
  • PyMySQL

使用方法

通用方案

安装MySQL、Redis,然后创建库(默认是test):

❯ mysql -u root -p
mysql> drop database test;
Query OK, 9 rows affected (0.32 sec)

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> ^DBye

下载源码并安装依赖:

❯ git clone https://github.com/dongweiming/wechat-admin
❯ cd wechat-admin
❯ virtualenv venv  # 只支持Python 3source venv/bin/activate  # 推荐使用autoenv
❯ venv/bin/pip install -r requirements.txt  # 如果已经激活虚拟环境,`venv/bin/`这样的前缀可不加,下同

设置说明:自定义配置应该存放在local_settings.py(需创建)中,可重载config.py中的设置

安装插件(可选):

❯ git clone --recursive https://github.com/dongweiming/wechat-plugins
# 如果有额外插件配置,需要修改PLUGIN_PATHS和PLUGINS

插件开发请移步:Plugins Page

初始化数据库:

export FLASK_APP=manager.pyvenv/bin/flask initdb

启动服务:

❯ venv/bin/gunicorn app:app --bind 0.0.0.0:8100 -w 6 -t 0

PS: 如果是本地运行,可以不使用gunicorn,直接使用Flask的多线程调试模式:

❯ python app.py

访问 WEB页面 http://localhost:8100 使用微信扫码登录

登录成功后,启动Celery Beat和Worker:

❯ venv/bin/celery -A wechat worker -l info -B

注意:第一次会拉取全部的联系人和各群聊成员列表,需要一点时间。观察终端输出了解初始化任务的完成情况。

使用Docker

假设已经安装了Docker,执行如下命令即可。

❯ pip install docker-compose
❯ git clone --recursive https://github.com/dongweiming/wechat-plugins
❯ venv/bin/docker-compose build
❯ venv/bin/docker-compose run init  # 只有在第一次才需要执行这步
❯ venv/bin/docker-compose run --service-ports -d web  # 启动Web,地址也是 http://localhost:8100
❯ venv/bin/docker-compose run -d celery  # 同样是在扫码登录之后再启动

本地开发

配置前端开发环境

安装cnpm提高包下载速度:

❯ npm install -g cnpm --registry=https://registry.npm.taobao.org

安装需要的包:

❯ cnpm i 

启动调试环境:

❯ npm run dev

启动成功默认会打开 http://localhost:8080 ,后端API依然使用的是 http://localhost:8100/j

本地开发完毕通过如下方式构建:

❯ npm run build

刷新 http://localhost:8100 就可以看到最新的效果了。

后端开发

要注意修改表结构,每次都要:

❯ venv/bin/flask db migrate
❯ venv/bin/flask db upgrade

必看: 常见问题 FAQ

为什么在使用一段时间后偶尔会出现puid not found这种错误呢?

由于微信的设计,不提供一种唯一且稳定的uid之类的数据,所以wxpy设计了一套登录用户和其相关联系人、群聊、公众号的映射关系,另外我修改了wxpy的实现,可以更多的获得caption (昵称, 性别, 省份, 城市)相关的内容,让对象中的puid更稳定。

由于其中某些人/群的设置的改变,它的puid可能改变,在每次扫码登录之后都会触发一个更新这个映射关系的任务,让这个映射关系更新成最新的。你遇到这种错误说明你需要重新登录,或者,手动触发一下这个任务:

from wechat.tasks import retrieve_data
retrieve_data.delay()

为什么用着用着有时候感觉卡住了,接口不返回了?

Issue: #9

感谢 @zgjhust 的意见

这是一个小型项目,我没有添加Nginx支持,直接使用了Gunicorn。在用Gunicorn的时候使用了-t 0也就是不超时。

这样用的原因是项目中的sse需要一个长连接,而且从用户打开登录页面到扫码完成这个时间不好控制,就索性不超时了,但是也造成了未响应的请求不能及时释放。事实上应该把/stream拿出来特殊处理,其他的路由需要有超时时间设置的(这块,我会择机重构一下)。

现在的解决办法是指定更多的Worker数量,以及经常的重启gunicorn(使用supervisor管理会更方便):

gunicorn app:app --bind 0.0.0.0:8100 -w 10 -t 0

或者不用gunicorn, 直接使用Flask的threaded参数启动:

❯ cat app.py
...
if __name__ == '__main__':
     app.run(host='0.0.0.0', port=8100, debug=app.debug, threaded=True)
     
❯ python app.py

为什么有时候发现这个管理系统已经不工作了,如果让这个系统能尽量长的工作呢?

不工作了通常有2个原因:

  1. 由于微信的设计,我这个系统、Mac微信、网页微信这三者不能同时在线,否则就会被踢下线。
  2. 这个系统事实上还是使用网页微信,一段时间后(我还没有总结出来这个时间阈值)会自动登出,需要你重新扫码登录。

尽管我在celery上设计的重启任务的功能,但是由于下线后重新重新扫码登录,这一步无法自动化,造成系统不工作了。

如果希望这个系统尽量长的工作,我的建议是:

  1. 应该专门购买一张手机卡注册微信使用本系统,这样不会影响个人使用的微信不能登录微信客户端了。
  2. 把程序不要运行在个人电脑上,可以放在vps或者其他服务器上,这样可保持正常情况下的一直在线。
  3. 我给wxpy、ItChat都加了信号(Signals)系统,你可以仿造我的项目代码中的例子,加一个订阅者,能够在它有问题的时候用短信、Slack、邮件等方式第一时间通知你,让你及时处理,举个例子:
from celery.task import periodic_task
from celery.task.control import revoke

def restart_listener(sender, **kw):
    task_id = r.get(LISTENER_TASK_KEY)
    if task_id:
        revoke(str(task_id, 'utf-8'))
    task_id = app.send_task('wechat.tasks.listener')
    r.set(LISTENER_TASK_KEY, task_id)

stopped.connect(restart_listener)

要注意订阅操作应该发生在import wxpy/itchat之前。

为什么这个系统功能有限?我看手机微信能做的事情要多得多嘛

是的,这是一个封装wxpy/itchat的项目,说到底还是使用网页微信(wx.qq.com),所以它的API的功能决定了本系统的能力。

解密手机微信API,把这些未开放的API的集成进来不太好,还可能引起法律方面的问题。

如何解决「当前登录环境异常。为了你的帐号安全,暂时不能登录web微信...」的问题?

问题可以看这个issue,有不少人遇到了,在被封之后没有办法解决。但是可以注意让它尽量不被封。经过这几天的研究,我找到三条经验:

  1. 不要只使用Itchat中的USER_AGENT,可以在几个之间切换(注意要不同浏览器的UA),但是不要每次的UA不一样。
  2. 注意在群内的操作不要太频繁,机器人以及自动欢迎之类的慎用,尽量减少你的回应频率。
  3. 如果发现登录后突然弹出验证码,这是一个前兆,要暂停机器人功能,可以停止进程或者选择像用户那样登录网页微信或者Mac微信客户端一段时间。

感谢

More Repositories

1

web_develop

《Python Web开发实战》书中源码
Python
1,211
star
2

lyanna

My Blog Using Sanic
Vue
635
star
3

weapp-zhihulive

知乎Live微信小程序 & asyncio爬虫
Python
360
star
4

commentbox

网易云音乐精彩评论[关闭]
255
star
5

sed_and_awk

A online presentation for sed & awk
HTML
168
star
6

Mtime

A spider... ^.^
Python
99
star
7

mp

微信公众号文章代码库
Python
89
star
8

data-analysis

A data analysis site by flask and mongoengine
JavaScript
73
star
9

r

Upload file service with react
CSS
63
star
10

daenerys

Scraping and Web Crawling Framework For Zhihu Live
Python
63
star
11

django-linux-dash

A clone of linux-dash written in Django, Also Support OS X, Most use psutils, Not use systemcall method
CSS
56
star
12

flask_reveal

The Easiest Way to Present Online
JavaScript
45
star
13

aiglos

Aiglos (埃格洛斯) 吉爾加拉德的神矛
CSS
26
star
14

divingintoipynb

Diving into ipython notebook
JavaScript
24
star
15

sanic-mako

Mako support for sanic
Python
17
star
16

gentle

Help you quickly submit code to the test environment tools.
Python
17
star
17

Ipynb-viewer

Rendering local ipynb to static HTML
JavaScript
14
star
18

wechat-plugins

Collection of plugins for https://github.com/dongweiming/wechat-admin
Python
14
star
19

emacs.d

A python web developer's .emacs.d
Emacs Lisp
12
star
20

idb

ipython db.py shell extension
Python
10
star
21

lisp-koans-answer

This is my answers for lisp-koans
Common Lisp
8
star
22

speakerdeck

Code and PPT for my speak
Python
8
star
23

dongweiming

😺My Github profile README.md
7
star
24

slack-alert

Send message onto a channel when this need be alerted
Python
6
star
25

octopress-douban_favorite_show

Display douban favorite show
5
star
26

douban-activity-readme

Updates README.md with the recent Douban activities of a user.
Go
4
star
27

vary.vim

A script to converting tabs to spaces and auto save with remove spaces in end of line
Vim Script
4
star
28

geek-pu

摆摊摆摊,极客电玩小铺
Go
2
star
29

divingintoipynb_pelican

a pelican blog that use ipython notebook format
Makefile
1
star
30

go-eshop

Library with a set of tools for scraping information about Nintendo games and its prices
Go
1
star
31

dotzshrc

my .zshrc
Shell
1
star
32

stable-diffusion-model-tutorial

A stable diffusion tutorial written by a senior python engineer
JavaScript
1
star
33

ipynb-reader

A ipython notebook reader plugin for pelican
1
star
34

plim-mode

Major mode for editing Plim files
Emacs Lisp
1
star
35

tola

Just for test
Python
1
star