今夏, Wechaty 社区诞生了 9 位后浪贡献者:毕凯乔、王俊伟、谢昱清、范蕊、江姗姗、林昊翰、唐光彬、肖梓霖与孔祥哲。他们都还是正在就读本科与研究所的学生。
9 位后浪贡献者与 Wechaty 的故事要从今年中科院软件所和华为 openEuler 项目共同举办的“开源软件供应链点亮计划——暑期 2020” 说起。
故事的开始
在这 9 位学生成为贡献者的过程中,我们不能不提到那些作为学生指路明灯的社区导师们。
在参与活动前,Wechaty 社区负责辅导学生的导师们正聚在一起讨论任务的设计。由于 Wechaty 项目相当年轻,这也是许多导师第一次参加类似的活动,大家难免感到些许的忐忑。
很幸运的是,最终我们还是吸引了一群优秀的学生参加到我们的项目中,并在 7 月 - 9 月的这 3 个月的时间中,Wechaty 社区诞生了 9 位开源新星。大部分的学生都是第一次参加到大型的生产项目中,在这个过程中发现自己的不足,也提升了工程实践上的能力,提高了读代码和分析代码的能力。其中也有同学在与社区互动的同时了解了开源社区互助的精神,并祈愿自己能在未来也继续发挥这种精神来帮助更多的人。
这 9 位同学们开发的项目中有些功能已经发布上线,为众多的社区用户所用;其他则会在未来的版本中陆续与大家见面。在文章后面我们将详细介绍这 9 个项目的具体细节和学生/导师们对本次开源活动的一些体会:
项目 1 - 基于python-wechaty的群聊助手机器人(CHAssisT)
暑期2020的优秀学生最具潜力奖!
- 学生:孔祥哲,清华大学(大二)
- 导师:吴京京
- Issue: https://github.com/wechaty/summer-of-code/issues/6
- Git: https://github.com/kxz18/python-wechaty-groupchat-bot
- Blog: https://wechaty.js.org/2020/08/14/chassist-bot-final/
项目描述
在实际工作和学习过程中,微信作为主要的沟通渠道工具,承载着主要的事件发布任务。可是由于群聊信息是依时间线展开,一旦信息数量过大,将导致历史消息难以寻找。故此时需要一款群聊助手机器人,能够根据引用消息的回复,提取出其中的历史消息,并将其打上对应的标签同时保存到服务器本地。消息是保存在群聊助手机器人内部中,群内人员只需要艾特助手机器人即可查询历史消息,同时会定时清除和展示一定时间段内的历史打标消息,同时还支持手动清除和展示历史打标消息。
本项目基于python-wechaty实现了一个群聊助手机器人。该机器人主要由四个插件组成。第一个插件是群聊消息打标插件,通过群成员引用重要消息回复机器人的方式记录重要信息,以便之后以问答的方式进行查找。第二个插件是定时消息插件,用于定时消息的发放。第三个插件是群成员的管理插件,当有新人进群时进行欢迎,当一定人数群成员对某位群成员言行表示不适时自动从群聊中删除该位群成员。第四个插件用于提升交互,为帮助系统插件,提供自定义的功能文档,辅助前三个插件工作。四个插件也可单独使用。
心得体会
本次SoC活动让我接触了开源社区,并进行了一次软件工程的简单实践。从刚开始的需求确认、项目技术确认,到每周的迭代更新、单元测试,到最后的项目文档书写、CI配置,整个过程和基本的软件工程是一致的。
在项目前期,最重要的是确定好项目的需求,并根据现有需求和以后可能增加的需求进行项目的架构。这步虽然不涉及实质性代码书写,但对之后的整个开发过程都有非常大的指导意义。需求是否明确,架构是否合适,会决定开发过程的难度和代码量,因此一定要认真对待。就我自己而言,我花费了近两周的时间进行需求确认和项目架构。确认需求时可以用用户故事的形式,容易发现需求文档中的细节问题,项目架构可以用UML图、泳道图等。项目架构多采取OOP的思想,保证有较好的扩展性。在架构完成之后,可以根据不同模块的难度和依赖关系进行开发排期。有了详细的计划,之后才能更注重于开发本身,从而提升效率。
项目真正进入开发之后,可能会时不时遇到问题,大多数问题都能用搜索引擎解决,百度搜不到的可以用google,如果是具体的第三方库的问题,则通常可以通过查阅文档和github的issue解决。如果实在无法解决,也可以在例会中向导师寻求帮助。在代码书写的过程中,最好能提前配置好社区的代码风格检查,如果社区没有配置这类检查的惯例,也最好能先多学习社区的代码,保证开发过程中代码的规范性和可读性。同时,对于大型项目而言,由于整体统调debug的难度较大,因此单元测试是非常必要的,在一个模块完成之后,一定要配置相应的单元测试,保证该模块实现没有问题,这样最后把所有模块组合起来之后出bug的概率就很小了。
开发完成后,还需要进行文档的书写和CI的配置。这两项内容其实社区一般都会有范例提供,文档保证和社区风格相近或一致即可。写文档的时候还是要先从使用者的角度考虑,再给出开发者需要的说明文档。因为多数人选择项目时肯定会先看项目的使用方法和功能说明,当真正选中项目进行后续开发时,才会去参考开发者所需的接口和项目架构。
导师寄语
孔祥哲同学根据原定项目需求,迅速完成大部分功能,切代码质量非常好。期间与我保持着密切的联系,主动咨询问题,解决项目中的各种难题。孔祥哲同学自项目开始之期就开始高效率的开发,每天都有足够的代码提交量,积极完成项目功能,且能够精准的剖析出项目中存在的各种问题,承担着该项目的主要工作,包括需求深度分析,模块开发和扩展模块的讨论。
该同学的编程能力,对业务的分析能力都非常好,期间能够快速精准的发现主要问题,加快项目的开发速度,是一个十分优秀的实践者。该学生在过程中表现出高效率,希望该同学能够继续按照自己的兴趣,继续学习,期待你以后的高光时刻。
项目 2 - 基于开放 API 封装 Wechaty 接口下的飞书聊天机器人
- 学生:范蕊,南开大学(大四)
- 导师:高原,李佳芮
- Issue: https://github.com/wechaty/summer-of-code/issues/12
- Git: https://github.com/Roxanne718/wechaty-puppet-lark
- Blog: https://wechaty.js.org/2020/09/30/wechaty-puppet-lark-final-blog/
项目描述
本项目主要实现飞书版本的puppet,帮助开发者快速将 Wechaty 微信机器人移植到飞书上。实现的主要思路是根据飞书开放平台提供的API实现puppet内的功能函数。
心得体会
这是我第一次在开源社区贡献代码,感谢活动主办方和Wechaty社区的帮助和支持。虽然只有短短三个月的时间,但我在这个项目中收获了很多。在与导师的交流中学习到了很多优秀的开发思路和习惯,也认识到了很多优秀的同伴。目前这个项目还没有达到我预期的水准,后续我还会继续跟进、完善,希望能完成一套完整的飞书机器人框架。
这是我第一次严格意义上自己独立开发,在开发过程中遇到不少问题,如前后接口不一致、项目后期修改了前期的逻辑等等。在为新的bug焦头烂额的过程中我越来越理解到了工程化的重要性,希望自己能汲取教训,在今后的开发中做得更好。
最后,希望“开源软件供应链点亮计划”系列活动越办越好,相信未来的开发者们也能从中获得成长。
项目 3 - 基于Python-wechaty建立一个斗图机器人
- 学生:肖子霖,四川大学(大三)
- 导师:黄纯洪
- Issue: https://github.com/wechaty/summer-of-code/issues/7
- Git: https://github.com/MrZilinXiao/python-wechaty-meme-bot/
- Blog: https://wechaty.js.org/2020/09/27/python-wechaty-meme-bot-final/
项目描述
斗图功能是目前很多年轻人,甚至很多00后非常喜欢玩的,很受20岁左右的人的喜爱。目前市面上有很多斗图的软件,自动生成斗图的软件,还有很多自制的表情包也拿出来斗图,其下载量也还是不错的。所以说,在此背景下,开发出一款基于Python-wechaty的斗图机器人也是不错的。
本项目基于OCR与自然语言生成技术,实现了一个能基于使用者发送的图片表情内容进行即时交互的斗图机器人,项目主要使用了GPT2作为语言生成模型,chineseocr_lite作为OCR模块,同时支持多轮对话与对话回复的互相关损失计算,此外还提供了RESTFul API接口,可以为Wechaty多语言计划、甚至是其他的chatbot提供斗图服务。
心得体会
与很多参与活动的同学一样,我也是第一次参与到开源社区的工作中来,在此之前我的Github可以说只算得上是个人的项目仓库;在为期三个月的开发过程中,我学习了许多与开源社区、Wechaty生态相关的内容,同时也了解到了CI/CD流程、代码风格等很难在本科课本中找到的内容;尽管作为本科生,我并未接触过太多开源社区,但在与社区核心成员、同样参加暑期2020活动的同学沟通的过程中,我逐渐发现Wechaty社区成员间相互交流的氛围深深吸引了我。尽管暑期2020活动已落下帷幕,但我们所有参与活动同学的开源之旅却才刚刚开始,我希望我个人在今后不断的磨练中能提高开发水平,能继续为包括Wechaty社区在内的开源社区做出力所能及的贡献!
最后,再次感谢中科院软研所与OpenEuler社区主办的暑期2020活动,感谢Wechaty社区全体成员、特别是社区导师黄老师的悉心指导,感谢其余参与活动小伙伴的踊跃分享与积极交流!
导师寄语
项目的初衷是做一个“能”斗图以及“会”斗图的机器人,肖子霖在项目中期完成了“能”斗图的机器人,在项目的后期,“能”斗图的机器人也是完成了升华,成为“会”斗图的机器人。从最终结果来看,肖子霖同学的完成情况还是比较好的。
在项目后期的实施过程中,肖子霖同学克服各种困难,在自己不熟悉的领域,比如自然语言处理,也是取得了一定的成绩,这一点是可以肯定的。在项目过程中,肖子霖积极参与项目的开发,在未知的领域中进行探索,努力寻找解决问题的方案与办法,最终完成一个”会”斗图的机器人。
本项目在后期的话,由于机器学习的特殊性质,可能代码量并不是特别多,工作量上面主要突出在不断修改模型以及调参,最终一个“会”斗图的机器人才能得以完成。
总体上来说,本次项目肖子霖同学完成得不错。从一开始的表情包的识别,包括文字识别和情感识别,到后来的“能”斗图的机器人,再到最后的“会”斗图的机器人,肖子霖同学都用实际行动完成了项目。
最后一个建议:从目前呈现的效果来看,“怼”的效果可能还欠缺一点火候,希望后期可以“怼”得更好。
项目 4 - 编写一个“每日一句”插件
暑期2020的优秀学生突出贡献奖!
- 学生:江姗姗,北京大学
- 导师:Gcaufy
- Issue: https://github.com/wechaty/summer-of-code/issues/10
- Git: https://github.com/univerone/WordsPerDay
- Blog: https://wechaty.js.org/2020/09/26/wechaty-words-per-day-plugin-final/
项目描述
利用插件为机器人赋能。在很多交流群中会有需求说每天的某个时间机器人在群里发送一句话,或者一篇文章咨讯。
比如英文学习群可能需要每天一句英文知识点,炒股群可能需要每天一则财经资讯,工作群每天一心灵鸡汤,等等。
本项目主要开发了一个可以被 wechaty 调用的插件,能够根据用户自定义的规则进行文字信息的提取,能够定时在指定的群里发送信息, 另外本插件还支持生成每日变化的打卡图片。
心得体会
很开心在这个暑假认识了wechaty社区,在之前虽然有接触过简单的github使用,但是从来没有接触过像wechaty一样大型并且活跃的开源社区,大家都是来自五湖四海,因为对于开源的热情和爱好而聚集到了一起,真的是很神奇的过程,也没有push和强制性的要求,氛围比较轻松愉快,大家都是出于兴趣来写代码,添加新的功能,开发新的东西最大的原因可能是觉得有意思或者好玩。
以前都是自己闭门写代码,写出来的东西很不规范,别人也看不懂,认识了wechaty社区之后,也开始学着看别人的优秀代码,在写代码的过程中注意规范,引入github action等自动化部署工具,对于我个人来说我觉得自己收获了很多,也很喜欢wechaty社区这种包容开放的开发风格。在项目结束之后,有幸和wechaty社区一起参加了南京的开源峰会,也是超级愉快和很多收获之旅。
项目开发过程中也存在一些遗憾,自己还是太过于内向,对技术水平不太自信,不太敢和和社区导师以及其他开发者讨论技术问题,错过了很多交流机会,这是我在以后需要注意的地方,还有就是时间管理问题,开源社区的项目都是大家在业余时间内完成的,自己总是在项目开发的过程中总是赶ddl,要向其他开发者们学习合理规划和分配时间。
总体来说,我自己最大的体会是要积极主动地接触新的事物和挑战,也感谢wechaty社区和中科院软件所给了我这次机会。
项目 5 - 基于 RPA 封装 Wechaty 接口下的快手聊天机器人
- 学生:毕凯乔,长春工业大学(大四)
- 导师:王凯峰,尹伯昊
- Issue: https://github.com/wechaty/summer-of-code/issues/14
- Git: https://github.com/bikaiqiao/kuaishouPuppet.git
- Blog: https://wechaty.js.org/2020/08/20/wechaty-puppet-kuaishou-mid-term/
项目描述
快手内部有强大的IM系统,大量用户已经习惯直接在快手内与内容创作者和粉丝群进行聊天沟通。
但是目前没有成熟的快手聊天机器人框架,对于繁琐的自动回复、群管理等运营场景,尚未出现完整成熟的解决方案。
心得体会
作为一名大四大学生,即将毕业工作,深感自身专业技能的不足。在CSDN中看到了“开源软件供应链点亮计划——暑期2020”的活动,这项活动为鼓励大学生能更多的参与维护开源社区的工作,给出了丰厚的奖金和礼品。而我更需要在这项活动中提升自己的专业技能,为将来的工作铺垫道路。
我们的参与的社区是Wechaty社区,最开始主要开发wechat的聊天机器人,而在这次活动中,该社区希望能够把自己的聊天机器人桥接到更多的平台,我们分别选择了“_基于__RPA_封装_Wechaty_接口下的快手聊天机器人”和“_基于__RPA_封装_Wechaty_接口下的抖音聊天机器人”。社区使用的语言是typescript,比我们平时使用的javascript的语法要略难一些。同时这也是我们第一次接触这么大规模的项目源码,项目的解决方案又并没有太多的开源先例,也较难搜寻。我们先后尝试了三种思路,最后才在社区导师的帮助下,完成了demo版本。
通过参加这次活动,我都深刻的认识到了自己技术水平的不足,在面对大型项目的时候并不能迅速的找到最佳解决方案。我们虽然通过了活动的最终审核,但是在内卷愈发严重的今天,我们可能会为曾经年少轻狂的无知付出惨痛的代价。现在距离大学毕业仅仅剩下半年左右的时间,亡羊补牢,为时不晚。我将会在接下来的生活中,更加努力的学习专业知识,提升技术水平,以让自己在未来能获得更高的竞争力。
希望大家都能够在筚路蓝缕中砥砺前行。
项目 6 - 基于RPA封装的Wechaty接口下的抖音聊天机器人
- 学生:王俊伟,长春工业大学(大四)
- 导师:王凯峰,尹伯昊
- Issue: https://github.com/wechaty/summer-of-code/issues/13
- Git: https://github.com/gavinwang23/wechaty-puppet-douyin
- Blog: https://wechaty.js.org/2020/10/13/wechaty-puppet-douyin-final-term/
项目描述
抖音内部有强大的IM系统,大量用户已经习惯直接在抖音内与内容创作者和粉丝群进行聊天沟通。但是目前没有成熟的抖音聊天机器人框架,对于繁琐的自动回复、群管理等运营场景,尚未出现完整成熟的解决方案。
Wechaty是全球最大的开源聊天机器人框架,希望实现基于同一套应用层代码实现不同软件的聊天机器人
项目 7 - 基于开放 API 封装 Wechaty 接口下的企业微信聊天机器人
- 学生:谢昱清
- 导师:高原,李佳芮
- Issue: https://github.com/wechaty/summer-of-code/issues/2
- Git: https://github.com/Sapio-S/wechaty-puppet-official/
- Blog: https://wechaty.js.org/2020/09/27/puppet-work-final/
项目描述
企业需要将聊天记录储存并进行分析,但接口过于复杂,需要基于现有开放接口进行二次封装企业微信作为微信的企业版,提供多种API来满足企业的不同需求。而企业微信提供的会话存档功能能满足企业消息做留存、进而通过分析大量的消息数据优化工作流程、追责和质检这一需求。
但是,企业微信的会话存档接口因为安全要求很高,所以有很多的加密,解析等工作,虽然一方面保证了安全性,但是却大大增加了开发的难度。
Wechaty是全球最大的开源聊天机器人框架,希望实现基于同一套应用层代码实现不同软件的聊天机器人 Wechaty 作为全球最大的聊天机器人开发者社区之一,提供了非常简单的接口实现,让开发者能够用6行代码就实现自己的一个聊天机器人,如果能把企业微信的会话存档接口封装到 Wechaty 里来,则可以大大简化企业内开发者的开发流程。
因为 Wechaty 是建立在 puppet 系统之上的,puppet 是 Wechaty 依赖的一层抽象层,它定义了底层各个 IM 接入方案需要实现的接口,也正是因为 puppet 抽象层的存在,让很多 Wechaty 开发者可以仅仅通过一个变量,就能够随意切换不同的底层 IM 接入。
心得体会
在项目期间,我感觉自己对于代码的理解能力在不断提高,回首一看,原先不懂的现在都明白个大概了,收获真的很大。在写这个报告的时候其实才算是对整个wechaty的架构有了一个比较清晰的认识,从7月初的完全不懂到八月的逐渐入门再到现在的恍然大悟(或许也没有真正领悟),很有成就感。
当然遗憾和不足也同样很多。主要的问题还是在于自身,对语言的不熟悉、时间上的冲突,导致目前的结果并不十分令人满意,遗留下了不少的坑待填。对于我而言这也是一个很重要的教训,未来做项目也要规划好时间,及早了解需要的技术栈,这样才能更好地完成任务。
另:其实本来觉得自己的代码虽然肯定不能直接发布使用,也勉强算是马马虎虎完成了主要的功能。但是一看别人的blog,我陷入了深深的尴尬,其实可以完成度更高、做得更好的。希望这学期学校开设的软件工程等等课程可以让我更深入地理解并熟悉完整开发流程吧!
项目 8 - 为 go-wechaty 设计实现插件体系
- 学生:林昊翰,西安电子科技大学(大三)
- 导师:丁小雨
- Issue: https://github.com/wechaty/summer-of-code/issues/9
- Git: https://github.com/wechaty/go-wechaty/pull/67
- Blog: https://wechaty.js.org/2020/09/27/go-wechaty-plugin/
项目描述
wechaty 是一款支持多协议的微信接入方案,随着社区多语言生态的建立,吸引了更多的开发者和爱好者的加入;同时需求的推动和技术的发展,插件系统逐渐完善,但是在多语言系统中 Plugin 体系尚未完成,我们希望通过这个任务,能够让更多的人加入 go-wechaty 的建设。
目前 go-wechaty examples/ding-dong-bot.go 有一个 ding-dong bot, 但是我们希望这个 ding-dong 是通用的,如果我们的 Plugin 体系能编写出来,也许实现 ding-dong 就只需要一行代码。例如:go bot.Use(DingDong{}) go-wechaty 是 Go 语言实现 wechaty 的项目,同样支持多协议接入;同时借助 gorountine 和 channel 的语言特性,实现了更加合理的封装和设计。
心得体会
我在大学的前两年时间里并没有参与过大项目的开发,更别提要求较高的开源项目。开源项目的远程协作开发对我来说有极大吸引力,但我一直没有一个合适的机会参与其中(水平不足、不知道如何参与等情况让我屡次放弃跨出第一步)。
本届开源软件供应链点亮计划正好提供了这次机会,让我参与到 Wechaty 社区中进行项目开发。Wechaty 社区是一个包容度很高的社区,社区内的导师们对学生提出的问题都会耐心解答。
这次活动的经历增加了我参与开源软件开发的经验,同时争强了我的沟通交流能力。在以后的开发历程中,我会为继续为开源社区贡献代码。
在本项目的开发过程中,我遇到的主要问题来自对 Go 程序开发的不熟悉,在许多细节上会产生疑惑。实际测试程序时,也有一些小问题需要解决,比如 Docker 的使用、排错。我的解决方案主要是自己学习、查阅资料。这次项目开发的经历大大提升了我的编程能力,以及一些计算机相关知识。
对于部分无法自己解决的问题,社区里的导师们给了我很大帮助,导师们在阅读我的代码后给出了许多具有针对性的建议,这对我完成项目的开发是十分必要的,感谢导师们的付出。
导师点评
昊翰同学的学习能力,和能动性特别强,能够很快的上手新的知识和方法;从最初的对开源项目的无从下手,到熟悉常规的共享代码的方式,以及对 Go 的掌握,都能感受到进步和收获;相信这么一次短暂的活动经历,能在你今后的工作和生活中成为谈资。
相信大部分从学校过渡到工作中,都会对长周期的项目产生动摇,其实你只需要按照原计划去完成既定工作就好,大项目拆解成小项目是计划和执行中很重要的部分;报告中提到了周计划,很欣慰你看到了这点带给你的价值,他使你没有偏离原有计划的方向,也希望你今后的工作中能从此有所收获。
项目 9 - Go-wechaty Github Action optimization
- 学生:唐光彬,华南农业大学(大二)
- 导师:丁小雨
- Issue: https://github.com/wechaty/summer-of-code/issues/8
- Git: https://github.com/wechaty/go-wechaty
- Blog: https://wechaty.js.org/2020/09/27/go-wechaty-gh-actions-optimization-final-poc/
项目描述
Github Action 已经发布有段时间了,在 go-wechaty 的 单元测试,代码检测和代码评级均有已有所落地。
Go-wechaty Github Action optimization 主要通过使用 Github Actions 的特性实现跨仓库的 CI 优化,旨在为开发者减轻负担。
心得体会
作为一个对项目开发来说都没多少经验的小白,第一次为开源项目出一份微薄的力。在这三个月里,陆陆续续学习了 Github Actions 和 Docker 有关的知识。特别感谢导师丁小雨的付出,在他的指导下我也感受到开源社区的温暖和力量。
尽管这次开发的代码量比较少,我从中收获的是开源项目协作的流程以及开源社区的互助共享精神,收获颇丰。这一次规范又专业的多人协作,让我体验了一把充满效率的开发之旅。这次活动也让我了解到许多优秀的开发者,让我愈发决心磨练自己的开发技术。
最后,再一次感谢开源软件供应链点亮计划系列活动、Wechaty社区给我这次机会,也十分感谢丁小雨老师和其他老师、同伴给我带来的指导和帮助。
导师点评
光彬同学能够很好的主动扩充自己尚未掌握的知识领域,甚至于在一定方向上能够主动的去探索新的技术方案,这一点在工作中是很重要的技能,希望你能够不段的扩充自己的知识领域,能够解决更多未知的问题。
技术方面相信你有足够的积极性去解决,就像你在总结中提到的你会意识到自己技术上的提升空间,但是另一方面希望你能够在开源方面有更多的收获,它可以使你在今后的工作中能够推动更多项目协同上的改进。
To Be Continued
这次的活动对同学和对导师来说都是意义非凡的,不管同学们未来是否继续为 Wechaty 社区贡献,希望这次的活动能为他们成为职业程序员铺路与点亮他们对开源的热情。
星星之火,可以燎原。夏天或许过去了,但你与 Wechaty 社区的故事仍未完待续,
欢迎每个希望为 Wechaty 项目贡献的伙伴们加入我们,与我们谱写更多的故事!
你可以从这里开始:https://github.com/wechaty/wechaty/issues
欢迎加入 Wechaty 社区
地址 | 入口 |
---|---|
https://github.com/wechaty/wechaty | 源码 |
https://wechaty.js.org | 官网 |
https://gitter.im/wechaty/wechaty | Gitter 聊天室 |
https://wechaty.js.org/blog | 博客 |
https://www.youtube.com/playlist… | YouTube |
https://photos.google.com/… | Album |
https://docs.google.com/document/… | Meeting Notes |
Special thanks to Milvus community for the template