如何用Python做一个微信机器人自动拉群


Posted in Python onJuly 03, 2019

引言

微信群的用户添加逻辑是 —— 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉进来。这样,联系人员的私人微信会添加大量陌生人,给其带来不必要的打扰,而且纯人工操作,也容易出现纰漏。

那么,是否可以通过代码,做一个自动拉群机器人呢? 由微信机器人来实现自动加群功能,一劳永逸解决人工拉群的麻烦。

当然可以。西秦公子 就用Python 创造了一个微信自动拉群机器人,并把它部署运行在UCloud云平台上。

现在,他把机器人构建过程及代码 都分享了出来,一起来看看吧~

我们在 UCloud 上运行了 Linux中国 的翻译平台,同时,最近我们的另外一个项目 运维密码 发展迅猛,体验群很快就达到了 100 人,达到了100人后,就没有办法让用户通过扫描二维码来加群,只能让用户加我们的微信,然后由我们来把用户拉群。这样十分不便,而且也容易出现纰漏。

于是我们便考虑在云主机上,运行一个微信机器人,由微信机器人来实现加群,免去手动拉群的麻烦。具体实现过程如下:

目录

  • 代码实现;
  • 部署到 UCloud;
  • 代码复盘 及 设计理念解析;

代码实现

我们的核心需求主要是两个:

  • 读取用户添加好友的验证信息
  • 根据验证信息,发送不同的邀请链接

首先,我们要去创建一个机器人的实例,代码如下

from wxpy import *
bot = Bot('bot.pkl',console_qr=True)

这两行代码引入了 wxpy ,并生成了一个 bot 实例。这个实例会将我们的登陆信息保存到 bot.pkl 中,这样我们在短时间内的机器人重启时,就不用重复登陆了。

接下来,我们定义一个函数来校验用户的验证信息中,是否有我们需要的关键词。

'''
验证信息
'''
def valid_msg(msg):
 return '运维密码' in msg.text.lower()

并且定义一个方法,用来邀请用户加入到我们的运维密码工作群中。

'''
定义邀请用户的方法
'''
def invite(user):
 group = bot.groups().search('“运维密码”体验群')
 group[0].add_members(user, use_invitation=True)

这个里面的关键是我们要使用bot的groups方法来获取到所有的用户,并使用搜索,取到我们想要的数据。

在这里我是使用了数据的 第一个结果,当然,你也可以在搜索时,使用 ensure_one 方法来保证只返回一个结果,而不是一个数组。

找到我们要邀请的用户以后,就可以使用 group 的 add_memebers 方法来邀请用户加入到群聊。由于我们的群已经到了100人的限制。所以这里将第二个参数设置为 true 。

上述的两个方法,我们基本完成了我们需要使用的部分。

接下来,我们就要让机器人来自动处理我们的请求消息了。

'''
处理加好友信息
'''
@bot.register(msg_types=FRIENDS)def new_friends(msg):
 user = msg.card.accept()
 if valid_msg(msg):
  invite(user)
 else:
  user.send('Hello {},你忘了填写加群口令,快回去找找口令吧'.format(user.name))

这里最关键的是第一行的 @bot.register(msg_types=FRIENDS),这行代码是指注册一个监听器,来监听类型是 FRIEDNS 的消息,也就是加好友的消息。

然后定义了一个新的函数 new_friends(msg),在这个函数里,我们定义 user 为接受了用户的信息,并获取他的身份信息。

并且调用 valid_msg 的方法来判断添加好友的信息是否存在,如果返回的结果为真,就调用邀请用户的方法。

部署到UCloud

接下来我们尝试将项目部署到UCloud云主机上:

创建主机

  • 注册 UCloud - 专业云计算服务商
  • 点击左侧的 云主机,然后点击 创建主机
  • 右侧选择 付费方式,点击 立即购买
  • 在支付确认页面,点击 确认支付

购买成功后回到主机管理列表,如下所示:

这里注意记住你的外网IP,下面的ip替换成你的

基础环境安装

由于我们的主机运行的是 CentOS 7.2 ,自带的是 Python 2.7.5 ,而 wxpy 需要运行在 Python 3 下,所以我们首先进行的是 Python 3 的安装。

执行如下命令来安装 Python 3

yum install epel-release
yum install python34

接下来安装 Pip

yum install python34-setuptools
easy_install-3.4 pip

安装完成 Python 3 和 pip ,接下来我们就可以开始安装 wxpy 了

在命令行中执行

pip3 install -i https://pypi.doubanio.com/simple/ -U wxpy

至此,就完成了基础环境搭建工作,机器人实现代码就可以顺利运行在此云主机上了。

代码复盘 及 设计理念解析

以上就是微信拉群机器人的全部实现过程,最终效果如下图:

如何用Python做一个微信机器人自动拉群

就微信机器人来说,最关键的,是要对机器人接受到的信息注册监听器。通过监听消息的类型、消息的内容,来执行对应的操作。

比如我监听的事 FRIENDS 消息,同样的也可以监听好友消息等等。通过不同的监听模式来实现我们的具体功能是核心。如果我们把代码精简一下,最终的代码就是

#!/usr/bin/env python3
# coding: utf-8
from wxpy import *
bot = Bot()
@bot.register(msg_types=FRIENDS)
def new_friends(msg):
处理好友逻辑代码

最少的情况下只需要这些代码,就足够我们启动机器人了。当然,这样并不是最佳实践,代码的可读性还有待提高。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python生成器的使用方法
Nov 21 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
Python 如何实现访问者模式
Jul 28 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 #Python
python实现共轭梯度法
Jul 03 #Python
python实现微信自动回复及批量添加好友功能
Jul 03 #Python
Python 中Django安装和使用教程详解
Jul 03 #Python
利用python求积分的实例
Jul 03 #Python
python可视化爬虫界面之天气查询
Jul 03 #Python
python读写配置文件操作示例
Jul 03 #Python
You might like
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
js中实例与对象的区别讲解
2019/01/21 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
深入理解Django的自定义过滤器
2017/10/17 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Django用户认证系统 User对象解析
2019/08/02 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
利用Python计算KS的实例详解
2020/03/03 Python
django 实现简单的插入视频
2020/04/07 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
雷人标语集锦
2014/06/19 职场文书
绘画专业自荐信
2014/07/04 职场文书
医德医风自我评价
2014/09/19 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS
springcloud整合seata
2022/05/20 Java/Android