当前位置: 首页 > 编程日记 > 正文

Python如何实现24个微信大群万人同步转发直播?

作者 | 猪哥66

来源 | CSDN博客

今天我们来学习微信机器人多群转发做同步图文直播!

一、背景介绍

猪哥一年前在建Python学习群的时候就说过,要邀请企业大佬来学习群做直播。

其实文章早就写好了,但是一直没有找到好的转发软件,所以耽搁了几个月。

最近猪哥感觉不能再拖了,所以就考虑自己开发一个多群直播项目,使用原来我们做的微信机器人项目。

需求很简单:能做到24个微信大群(共万人)同步转发就可以!

相信很多公司企业也会有同样的需求吧!

二、功能设计

如何做多群直播呢?简单的就是用机器人做二级转发:

  1. 新建一个直播主讲群

  2. 将三个机器人和主讲人拉进群里

  3. 主讲人发到群里的消息机器人都自动转发到群里

  4. 机器人转发完毕后在主讲群回复

  5. 继续发消息

为了大家便于理解,猪哥画了一个简单的设计图:

根据上图设计,我们这次功能设计有4个主要元素:主讲群、主讲人、转发群、机器人管理员。

三、功能实现

1.加载直播4个元素

根据上面的设计图,我们得知首先需要一个直播主讲群,然后直播群里个主讲人,然后还需要加载需要转发的转发群

这些信息我们都可以在写在一个配置文件里面。

然后我们在机器人启动的时候,调用加载配置文件的方法,而加载配置文件的方法又去调用加载直播信息的方法!

首先是加载机器人管理员,然后在方法中间去调用加载群信息的方法!

下面是load_live方法的详细代码,主要做三件事:加载主讲群、检查主讲群里是否有主讲人、加载直播群

def load_live(bot):"""加载直播需要的群"""# 设置开关bot.is_live_mode = config.is_live_modeif not bot.is_live_mode:return '\n未开启直播模式,可在 config.py 文件中将 is_live_mode 设置为True开启!'live_status_detail = ''# 1、加载主讲群live_group = bot.groups().search(config.live_group)if len(live_group) < 1:bot.live_group = Nonebot.is_live_mode = Falsereturn f'\n主讲群:未找到群名包含「{config.live_group}」的主讲群!\n开启群直播失败!\n\n可在主讲群中发任意消息,然后管理员使用命令:开启群直播模式,从新加载直播信息!'elif len(live_group) > 1:bot.live_group = live_group[0]live_status_detail += f'\n主讲群:找到多个群名包含「{config.live_group}」的主讲群,默认选取第一个群({live_group[0]})作为主讲群!'else:bot.live_group = live_group[0]# 2、加载主讲人live_group_members = bot.live_group.membersfor member in live_group_members:if member.name == config.live_speaker:live_status_detail += f'\n主讲人:「{config.live_speaker}」'bot.live_speaker = config.live_speakerbreakelse:live_status_detail += f'\n主讲人:主讲群内未找到主讲人「{config.live_speaker}」。\n开启群直播失败!'bot.is_live_mode = Falsereturn live_status_detail# 3、加载转发群forward_groups = search_groups(bot, config.forward_groups)bot.forward_groups = forward_groupslive_status_detail += f'\n转发群:消息将会转发至这些群:{str(forward_groups)},共{len(forward_groups)}个。\n\n如有遗漏可在这些群中发任意消息,然后管理员使用命令:开启群直播模式,从新加载直播信息!'return live_status_detail

这里我们就加载完了直播需要的4个要素:机器人管理员、主讲群、主讲人、转发群。

2.实现转发消息

所需要的信息都加载完毕之后,我们就可以来开始做转发了。

大概的思路是:

  1. 定义一个接收群消息的方法

  2. 接收到群消息就判断这条消息需不需要转发,判断条件是:开启直播模式+当前消息是主讲群内的+发消息的人是主讲人

  3. 如果满足上诉三个条件,则将消息转发到群里

  4. 转发完毕在主讲群内回复:一转发完毕,这时主讲人就可以讲下一句话

我们来看看代码吧

我们再来看看**wx_command.remote_forward(msg)**的具体代码吧!

def remote_forward(msg):"""转发消息"""forward_groups = []for group in msg.bot.forward_groups:msg.forward(group, suffix='')forward_groups.append(group.name)time.sleep(random.random())return forward_groups

这个方法很简单,循环遍历需要转发的群,然后一个一个发送,发送完毕后有一个一秒以内的随机停顿,这是为了防止消息发送过于频繁导致消息发不出去。

这里关于多群转发的代码就完成了,下面我们就可以开始测试了。

四、测试

1.测试流程

代码写完我们就可以开始测试了,测试的整体思路就是:

  1. 新建一个主讲群,然后将机器人和主讲人拉进去

  2. 新建 24个测试群,把机器人拉进去

  3. 启动项目,让机器人进入直播模式

  4. 主讲人在群里模拟真实的直播,注意控制直播速度

  5. 直播完毕,关闭机器人

2.一个机器人转发24个群

猪哥在最开始的时候是想的是:用一个机器人,然后转发到24个群里,配置文件大概是这样:

但是发现这样会导致消息发不出去,微信提示消息发送过于频繁。

消息怎么发都发不出去,到这里猪哥几乎要放弃了,以为不能多群转发呢。

3.三个微信转发24个群

猪哥就去网上看看有没有免费的转发软件,然后看了看wetools(一款基于windows的微信运营工具),发现他们付费版的一个微信最多也就可以转发9个群。

于是猪哥猜想是不是一个微信最多只能转发9个群呢?那我用三个微信做转发不就可以吗?

上面的配置文件意味着我需要启动三次程序,换三个微信,然后每次更换forward_groups配置。

很多同学还不知道:PyCharm一个项目如何做到同时多次运行?

用三个微信转发24个微信群,看起来是个不错的想法,实践起来是不是可以成功呢?

本次直播测试差不多播了30分钟,完全正确的运行无消息丢失和机器人掉线。

期间发送过:文字、图片、文件、语音。

五、实际直播

24个微信大群同步直播,说实话之前很少有一个人能完成的,我咨询了很多以前做过群直播的同行,他们基本都是人工复制的方式。

但是,直播前一天顺利测试,给了猪哥很大的信心!

实际直播的流程大概是:

  1. 提前几个小时修改公告发布晚上群直播消息

  2. 禁止拉新人入群,防止拉发广告的进来

  3. 提前半小时打卡,直播结束后随机踢出几名未打卡占坑的群成员

  4. 直播前5分钟停止打卡,开始准备直播

  5. 晚20:00准时开始直播

  6. 大概20:40直播结束,收集大家反馈意见

因为当时直播,忘记截图24个群的未读消息图,只能找点聊天记录截图给大家看。

六、遇到的问题

其实直播的代码很简单,也不多,但是因为群多,用户体量大所以难免会遇到很多问题,下面猪哥就总结一下遇到的问题:

  1. 最大转发群数问题:最开始猪哥想的是只用一个机器人转发到24个群里,但是消息发不出去,被提示消息过于频繁,最后是看到wetools上他们的最大转发群数是9个,所以才考虑到使用三个微信,每个转发8个群。

  2. 转发模式问题:之前是一个机器人,主讲人直接发给转发机器人,后来变成三个机器人,如何发送消息给三个机器人呢?在朋友的提示下采用了主讲群转发模式。

  3. 加载不到群问题:有时候启动项目后会加载不到你想要的群,这时候需要在群里发送任意消息,再重新开启直播模式,就可以了,切记!切记!

  4. 在实际直播中有个机器人掉线问题:测试过程中未出现机器人掉线,但在实际直播中出现过一次,重新登录这个机器人就好了。

  5. 很多微信都不能登录网页版微信:这个确实很头疼,找几个能登录网页版的还真不好找。

当然上面讲述的都是一些技术上的问题,关于直播过程中出现的操作问题,比如:停止打卡后仍然有人打卡影响阅读、直播速度过快、内容不够浅显等问题就不一一列出了,如果你想详细了解这些细节可以加猪哥微信了解。

七、总结

近些年,我们guo家慢慢由“中国制造”演变为“中国创造”,这是一件艰巨而振奋人心的事情。

对于我们做技术的也是如此,工作中很多Ctrl+C(V)操作,不正是我们理解的“制造”嘛!

将技术应用于生活,去解决出现的一些痛点和难题,创造一些有趣的事情,我认为这才是真正的技术创造!

在解决自己遇到的问题的同时也解决了别人的困难,也许这时,机遇正向你走来!

源码:https://github.com/pig6/wxrobot/tree/live

原文链接:https://blog.csdn.net/u014044812/article/details/103550611

(*本文为AI科技大本营转载文章,转载联系原作者)

推荐阅读

相关文章:

ITSM实施三招[案例]

当前国外成熟的ITSM解决方案的实施成本相对比较高&#xff0c;使一些对成本较敏感的的IT部门&#xff0c;成为ITSM实施的一个真空区。对于国内起步阶段的ITSM&#xff08;IT服务管理&#xff09;实施来说&#xff0c;南航的ITSM实施之路是一个借鉴。 南航it环境 在各大航空公司…

lr手工添加关联函数的步骤:

点击“确定”后&#xff1a; 如何修改已经创建好的关联规则&#xff1a;

新闻内容实现分页

/**//// <summary> /// 新闻内容分页 /// </summary> /// <param name"content">新闻内容</param> /// <param name"extension">扩展名(aspx,html..)</param> /// <returns></returns>pub…

使用自己的数据集训练MobileNet、ResNet实现图像分类(TensorFlow)| CSDN博文精选

作者 | pan_jinquan来源 | CSDN博文精选之前写了一篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型&#xff08;TensorFlow&#xff09;》https://panjinquan.blog.csdn.net/article/details/81560537&#xff0c;本博客就是此博客的框架基础上&#xff0c;完…

VC下提前注入进程的一些方法1——远线程不带参数

前些天一直在研究Ring3层的提前注入问题。所谓提前注入&#xff0c;就是在程序代码逻辑还没执行前就注入&#xff0c;这样做一般用于Hook API。&#xff08;转载请指明出处&#xff09;自己写了个demo&#xff0c;在此记下。 我的demo使用了两种注入方式&#xff1a;1 远线程&a…

【转】用示例说明索引数据块中出现热块的场景,并给出解决方案

文章转自&#xff1a;http://www.luocs.com/archives/582.html

VC下提前注入进程的一些方法2——远线程带参数

在前一节中介绍了通过远线程不带参数的方式提前注入进程&#xff0c;现在介绍种远线程携带参数的方法。&#xff08;转载请指明出处&#xff09; 1.2 执行注入的进程需要传信息给被注入进程 因为同样采用的是远线程注入&#xff0c;所以大致的思路是一样的&#xff0c;只是在细…

芬兰开放“线上AI速成班”课程,全球网民均可免费观看

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;去年&#xff0c;芬兰推出了一个免费的“人工智能线上速成班”项目&#xff0c;目的是向该国民众教授与新技术有关的知识。现在&#xff0c;作为送给全世界的圣诞节礼物&#xff0c;这个项目已面向全球网民开放访问&am…

deepin开通ssh

1、在终端打入下面命令进行安装sudo apt-get install openssh-server2、启用sshservice ssh start 反馈&#xff1a;start: Rejected send message, 1 matched rules; type"method_call", sender":1.56" (uid1000 pid2272 comm"start ssh ") int…

实现等待窗体的几种方式

实现等待窗体的几种方式&#xff1a;下面说明了五种可以实现等待窗体的方式&#xff0c;其中三种给出了代码。准备资料安全访问控件成员为了保证在创建控件的线程上调用控件成员&#xff0c;用下面的方式封装控件的属性、方法、其他自定义成员的访问。如: winWordControl.LoadD…

GitHub宝藏项目标星1.6w+,编程新手有福了

作者 | Rocky0429来源 | Python空间&#xff08;ID: Devtogether&#xff09;特别惭愧的是&#xff0c;虽然我很早就知道 GitHub&#xff0c;但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜&#xff0c;看着这种全是英文的东西难受&#xff0c;不知道该怎么去玩&#xff…

VC下提前注入进程的一些方法3——修改程序入口点

前两节中介绍了通过远线程进行注入的方法。现在换一种方法——修改进程入口点。&#xff08;转载请指明出处&#xff09; 在PE文件中&#xff0c;其中有个字段标识程序入口点位置。我们通过这个字段&#xff0c;到达程序入口点。PE文件的结构我这儿不讨论&#xff08;我会在之后…

如何产生签名applet能让applet能够访问本地资源

2019独角兽企业重金招聘Python工程师标准>>> 如何产生签名applet,以使applet能够访问本地资源? 在jdk1.1中,可以使用javakey命令来产生公钥,私钥,证书和签名的jar文件,详细资料请参考: http://java.sun.com/security/usingJavakey.html而java 2对签名机制做了比较大…

VC提前注入.net软件的方法

在之前几节介绍了各种注入方法&#xff0c;但是这些方法存在一些缺陷——对.net程序注入无效。&#xff08;转载请指明出处&#xff09; 这个可以理解&#xff0c;.net程序的代码不是汇编&#xff0c;而是微软自定义的IL中间语言。.net CLR如同虚拟机&#xff0c;解析并执行这些…

活动推荐:语音和语言技术在自然交互中的实践沙龙

智能语音技术已经渗透进家居生活、车载、金融服务等日常生活场景&#xff0c;在很大程度上解放了人们的双手和眼睛&#xff0c;语音交互成为连接人与信息/服务的新入口。根据IDC预测&#xff0c;国内对话式人工智能市场规模将在2022年达到78亿元。如何提供便捷、高效、高可用的…

JS字符串 window.open() window.opener window.name window对象总结

晚上总结了一下&#xff0c;发上来分享&#xff1a;字符串 window.open() window.opener window.name window对象等的一点总结 http://download1.csdn.net/down3/20070614/14012050509.rar

dedecms /member/reg_new.php SQL Injection Vul

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 2. 漏洞触发条件 http://127.0.0.1/dedecms5.5/member/reg_new.php?dopostregbase&amp;step1&amp;mtype%B8%F6%C8%CB&amp;mt…

VC下通过进程ID获取进程镜像文件路径的方法及其存在的缺陷

工作中经常会遇到通过进程ID获取进程镜像文件或者其他模块的路径的需求。&#xff08;转载请指明出处&#xff09;网上关于方案大致存在两种方案&#xff1a; OpenProcess->GetModuleFileNameOpenProcess->EnumProcessModules->GetModuleFileNameEx我试验了下&#x…

腾讯云100亿元目标达成,发阳光普照奖iPhone 11 Pro,你酸了吗?

12 月 19 日&#xff0c;鹅厂腾讯发钱的消息又像往年一样引来了一群柠檬精。除了微信支付团队获得 2 亿元奖金的消息之外&#xff0c;一张腾讯云团队每个员工奖励一部 iPhone 11 Pro 的 H5 页面截图也不断地轰炸着朋友圈。原来这张图说的是腾讯云在 Q3 已完成 2019 年全年 100 …

分享一个python cookbook的在线教程地址

分享一个python cookbook的在线教程地址&#xff1a;http://python3-cookbook.readthedocs.org/zh_CN/latest/翻译者&#xff1a;熊能转载于:https://blog.51cto.com/verdureorange/1653514

优化系统后VS启动不了问题的一种解决方案

本文只讨论使用第三方软件优化系统后&#xff0c;或者您主动禁止服务后导致VS不能启动的问题。(转载请指明出处) 记得大概是08年时&#xff0c;我使用一些软件对电脑启动项做了优化。后来打开VS2005时&#xff0c;发现VS2005会一直保持在“载入界面”&#xff0c;当时十分懊恼&…

懂数学的程序员能有多吃香?这是我听过最好的答案丨颠覆认知

懂数学的程序员能有多吃香&#xff1f;关于这个问题&#xff0c;我想每个程序员心中都有自己的答案。之前在网上看到一个很有意思的答案说&#xff1a;我是在做了2年的开发之后&#xff0c;才真正认识到数学对于程序员的重要性&#xff0c;开始系统的学习数学。理由无它&#x…

基于OpenCasCade的程序发布问题

基于OpenCasCade二次开发了一个程序&#xff0c;想采用简单的copy的发布&#xff08;部署&#xff09;方式。 但在发布时遇到了很多问题。总结一下。 首先将所有所需的dll拷贝到了执行目录下&#xff0c;然后将程序copy到一台未安装OpenCasCade的机器上运行出错&#xff0c;信…

Unity3D移植到自己的Android程序

用Unity3D开发需要把动画效果移植到现有的APP上面。Unity for Android 比较特殊&#xff0c;Unity for IOS 打包是将XCODE工程直接交给开发者&#xff0c;开发者可以在工程的基础上继续添加新的视图&#xff0c;最后由开发者自行打包生成IPA包&#xff0c;发布程序。而Unity fo…

一种注册表沙箱的思路、实现

从今年4月份开始&#xff0c;我接触到一个沙箱项目。该项目的需求要求我们的沙箱具有良好的安全性和兼容性。当时我们研究了SandBoxIE和360的沙箱&#xff0c;基本确定通过“重定向”思路来实现这款沙箱。而我主要负责研究注册表这块。&#xff08;转载请指明出处&#xff09;在…

PyTorch实现L2和L1正则化的方法 | CSDN博文精选

作者 | pan_jinquan来源 | CSDN博文精选目录1.torch.optim优化器实现L2正则化2.如何判断正则化作用了模型&#xff1f;2.1未加入正则化loss和Accuracy2.1加入正则化loss和Accuracy2.3正则化说明3.自定义正则化的方法3.1自定义正则化Regularization类3.2Regularization使用方法4…

构建插件式的应用程序框架(六)----通讯机制(ZT)

前天发了构建插件式的应用程序框架(五)&#xff0d;&#xff0d;&#xff0d;&#xff0d;管理插件这篇文章&#xff0c;有几个朋友在回复中希望了解插件之间是如何通讯的。这个系列的文章写到这里&#xff0c;也该谈谈这个问题了&#xff0c;毕竟已经有了插件管理。不知道大家…

【翻译】将Ext JS Grid转换为Excel表格

原文&#xff1a;Converting an Ext 5 Grid to Excel Spreadsheet稍微迟来的礼物——Ext JS Grid转为Excel代码&#xff0c;现在支持Ext JS 5&#xff01;功能包括&#xff1a; - 支持分组 - 数字的处理 VS 字符串数据类型 - 对于不支持客户端下载的浏览器会提交回服务器Enjoy&…

AI研究过于集中狭隘,我们是不是该反思了?

作者 | Sergii Shelpuk译者 | 陆离编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】2019年是AI领域更加冷静的一年&#xff0c;少了些喧嚣和泡沫&#xff0c;大浪淘沙留下的是经过检验的真正的AI研究者、实践者。但是你也许没有发现&#xff0c;本…