如何用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提取内容关键词的方法
Mar 16 Python
python冒泡排序简单实现方法
Jul 09 Python
Python中的模块导入和读取键盘输入的方法
Oct 16 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python字符串的拼接方法总结
Nov 18 Python
Pytorch之卷积层的使用详解
Dec 31 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
Python: glob匹配文件的操作
Dec 11 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php读取mysql的简单实例
2014/01/15 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
jQuery function的正确书写方法
2013/08/02 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python基于locals返回作用域字典
2020/10/17 Python
军训自我鉴定怎么写
2014/02/13 职场文书
结婚周年感言
2014/02/24 职场文书
厕所文明标语
2014/06/11 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2014年村官工作总结
2014/11/24 职场文书
租车协议书
2015/01/27 职场文书
综合管理员岗位职责
2015/02/11 职场文书
学校运动会感想
2015/08/10 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP