All Projects → dongweiming → Wechat Admin

dongweiming / Wechat Admin

Licence: gpl-3.0
Wechat Management System

Programming Languages

Vue
7211 projects
python
139335 projects - #7 most used programming language
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Wechat Admin

Everydaywechat
微信助手:1.每日定时给好友(女友)发送定制消息。2.机器人自动回复好友。3.群助手功能(例如:查询垃圾分类、天气、日历、电影实时票房、快递物流、PM2.5等)
Stars: ✭ 8,688 (+406.29%)
Mutual labels:  bot, wechat, itchat, tuling
Micromsg Bot
微信表情机器人
Stars: ✭ 230 (-86.6%)
Mutual labels:  bot, flask, wechat
Mojo Weixin
使用Perl语言(不会没关系)编写的个人账号微信/weixin/wechat客户端框架(非GUI),可通过插件提供基于HTTP协议的api接口供其他语言或系统调用
Stars: ✭ 1,181 (-31.18%)
Mutual labels:  bot, wechat
Flask Log Request Id
Flask extension to track and log Request-ID headers produced by PaaS like Heroku and load balancers like Amazon ELB
Stars: ✭ 81 (-95.28%)
Mutual labels:  flask, celery
Wechat Go
go version wechat web api and message framework for building wechat robot
Stars: ✭ 1,381 (-19.52%)
Mutual labels:  bot, wechat
Web develop
《Python Web开发实战》书中源码
Stars: ✭ 1,146 (-33.22%)
Mutual labels:  flask, celery
Microsoftbotframework
Microsoft Bot Framework is a wrapper for the Microsoft Bot API by Microsoft
Stars: ✭ 68 (-96.04%)
Mutual labels:  flask, celery
Gxgk Wechat Server
校园微信公众号,使用 Python、Flask、Redis、MySQL、Celery [DEPRECATED]
Stars: ✭ 1,325 (-22.79%)
Mutual labels:  flask, wechat
Reddit sse stream
A Server Side Event stream to deliver Reddit comments and submissions in near real-time to a client.
Stars: ✭ 39 (-97.73%)
Mutual labels:  flask, sse
Flask Full
starter/boilerplate flask application with celery, mongoengine, signals, shell commands, swagger api docs and sphinx docs integration
Stars: ✭ 117 (-93.18%)
Mutual labels:  flask, celery
Wechat4u
微信 wechat web 网页版接口的 JavaScript 实现,兼容Node和浏览器,微信机器人
Stars: ✭ 1,431 (-16.61%)
Mutual labels:  bot, wechat
Paperweekly forum
paperweekly's forum
Stars: ✭ 118 (-93.12%)
Mutual labels:  bot, wechat
Python Devops
gathers Python stack for DevOps, these are usually my basic templates use for my implementations, so, feel free to use it and evolve it! Everything is Docker!
Stars: ✭ 61 (-96.45%)
Mutual labels:  flask, celery
Bugsnag Python
Official bugsnag error monitoring and error reporting for django, flask, tornado and other python apps.
Stars: ✭ 69 (-95.98%)
Mutual labels:  flask, celery
Wechatbot
A wechat bot implemented in Python.
Stars: ✭ 51 (-97.03%)
Mutual labels:  bot, wechat
Incepiton Mysql
🍭A web platform designed for mysql inception
Stars: ✭ 90 (-94.76%)
Mutual labels:  flask, celery
Chatterbot
ChatterBot is a machine learning, conversational dialog engine for creating chat bots
Stars: ✭ 11,813 (+588.4%)
Mutual labels:  bot, chatterbot
Bibi
An e-commerce fullstack solution for Flask 出口电商全栈解决方案
Stars: ✭ 914 (-46.74%)
Mutual labels:  flask, celery
Leavexchat Bot
Keep WeChat messages but leave WeChat. This Telegram bot is here to release you.
Stars: ✭ 32 (-98.14%)
Mutual labels:  bot, wechat
Ggbot
一个用Go写的微信机器人
Stars: ✭ 103 (-94%)
Mutual labels:  bot, wechat

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微信客户端一段时间。

感谢

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].