Open huan opened 3 years ago
参与计划: 1.阅读gRPC调用模块,熟悉代码功能和需要的修改 2.参考wechaty puppet文档等,确定封装接口
This is my proposal for this project: Click here It has been submitted to the iscas system~
@jingdong00 @lyleshaw Welcome!
Please notice that, in this project, we will need to use Itchat
APIs to replace all gRPC
APIs because this project will build a Puppet Provider (running locally) instead a Puppet Service (running remotely).
日期:2021-07-04
暂无
日期:2021-07-12
该周由于上课和准备来京,所以进度不多...
日期:2021-07-18
均已与mentor沟通解决
- scan模块
payload = EventScanPayload( status=ScanStatus.Waiting, qrcode=uuid, data=payload_data.get('data', None)) self._event_stream.emit('scan', payload)
不理解qrcode和data的具体含义
- wx_id部分 login_user_id在web中似乎没有找到
- msg部分 start_receiving->MessageQueue->msg_register 流程不熟悉
该周由于实习第一周,熟悉工作,因而进度较慢。 下周应该有所改善
puppet-itchat可以登录啦;
Congratulation! Looking forward to using native Python Wechaty soon!
基于 Itchat 为 Python Wechaty 实现社区首个 Python 语言的本地 Puppet
L0阶段: 预期效果:熟悉 Itchat 的各项 API ;熟悉 Wechaty Puppet 的开发流程;创建 python-wechaty-puppet-itchat 的 repository 。 实施方案:阅读 Itchat 文档,了解 Wechaty Puppet。
L1阶段: 预期效果:完成 python-wechaty-puppet-itchat 的登录与初始化部分的实现;完成 ding-dong-bot 的实现。 实施方案:了解 python-wechaty-puppet-service 是如何通过 gRPC 与远程服务器通讯的,并结合 Itchat 的设计模式,对比二者异同,思考如何将 Itchat 的函数封装进 wechaty-puppet ,思考 wechaty-puppet 的哪些代码对于该项目而言是不必要的,并完成对 Itchat 中 auto_login 函数的封装。 在此基础上深入了解 Itchat msg_register 函数的实现方法,并在此基础上封装进 wechaty-puppet ,同时完成发送消息函数的封装。同时参考其他 wechaty-puppet 完成 ding-dong-bot.py 并使其能正常运行。
L2阶段: 预期效果:配置 GitHub Action 实现 python-wechaty-puppet-itchat 自动发布到 Pypi 并完成自动化测试。 实施方案:了解 Pypi 的发布流程,并在参考已有 GitHub Action 配置文件的基础上完成自动发布的流程,同时完成自动化测试。
L3阶段: 预期效果:使用 Itchat 的 API 为 python-wechaty-puppet-itchat 实现 User 和 Room 部分的功能。 实施方案:在该阶段,我计划深入了解 Itchat 关于 User 部分的 get_contact 等函数的实现,封装为 Wechaty 的 User 相关模块的功能。同时将 Itchat create_chatroom 等函数封装为 Wechaty Room 模块的功能。
L4阶段: 预期效果:为 python-wechaty-puppet-itchat 实现 Itchat 的其他功能。 实施方案:在该阶段,我计划将 Itchat 剩余的接口根据 Wechaty 的代码风格封装进 python-wechaty-puppet-itchat 。
*L5阶段: 预期效果:完善 python-wechaty 文档。 实施方案:在了解 python-wechaty 的基础上,我计划在 python-wechaty 原有文档的基础上进行完善和补充。
困难1:对 CI/CD 中的各项工具不熟悉,推代码时遇到困难。
解决方案:根据导师推荐的资料,学习 GitHub Action 、 MakeFiles 、 pre-commit 等工具的用法,并配置 GPG key 等。
困难2:在 Wechaty Puppet 中无法正常使用 Itchat 的函数。
解决方案:根据导师的建议,深入了解了 Python 协程,将 Itchat 函数全部改为异步函数后得以解决。
0815 - 0820 : 解决当前关于 AsyncIOEventEmitter 与 Itchat 事件顺序混乱的问题;
0821 - 0831 : 完成 Itchat 中 create_chatroom 、 set_chatroom_name 等关于 User 和 Room 部分接口的封装;
0901 - 0915 : 完成单元测试和代码优化;
0916 - 0930 : 考虑实现 Wechaty 接口中存在,但 Itchat 中没有的几个接口;
1001 - 1025 : 时间精力充足的情况下,完成对 Itchat 的重构工作,并在重构代码上修改 python-wechaty-puppet-itchat 的代码
由于审核,可能短期不可见
[blibli] 中期汇报视频:https://www.bilibili.com/video/BV1Ef4y1G7hE/ [blibli] 中期汇报Demo演示:https://www.bilibili.com/video/BV15P4y1p7JN/ [youtube] 中期汇报视频:https://youtu.be/gjg1EW30pOw [youtube] 中期汇报Demo演示:https://youtu.be/hce3c4WZylo
I have a question: how did we dependence the ItChat from our code base?
It is good practice if we are dependencies it from our requirements.txt. if we are copying the code to our repo, we should change it back to use the pip module dependence before we release this project.
Which means that we should dependence the itchat pip module from our project, and send PRs to our upstream when there's anything we can contribute.
python-wechaty is a async-based package, but ItChat is sync-based package which will occur some call problems: sync-program will call async-progrom. It can't call it directly, and should make some changes. There are two ways:
This is the final solution that we have researched. So, is there any suggestion about this problem & solution ? @huan
From my understanding:
So it should be no problem for us to call the Sync program from Async?
Yes, there is no problem for async call sync
. But itchat callback event body will call our async-based method which is the core problem. This is the first problem in developing stage.
Buuuuuuuuut, It seems that we can add adapter in this event calling. This adapter will be the inner connector between itchat and python-wechaty. I have not found this method before. I think I will make test with it later.
Awesome! I believe we should add an adapter in this event handling, and then we will be able to dependence Itchat based on that.
在本次开源之夏活动中,很荣幸中选 基于 Itchat 为 Python Wechaty 实现社区首个 Python 语言的本地 Puppet
项目。
通过对 Puppet Itchat 的开发,我收获的不仅仅是技术与代码规范上的提升,更是体会到了开源的魅力所在。
而该项目的完成,首先需要感谢 京京 老师,没有他对我的帮助我可能无法在这么短的时间内解决所遇到的问题,同时他解决问题的思路也带给我很大的提升。同时也感谢 卓桓、佳芮 等老师,他们在我开发时提出了许多宝贵的建议且提供了很多帮助。
最终还是要感谢 Wechaty 社区与 开源之夏主办方,前者让我在这里认识到了许多可敬的老师与可爱的小伙伴,而倘若没有后者,我也不会有如此充实的假期。
由于审核,可能短期不可见
[blibli] 结项汇报视频:https://www.bilibili.com/video/BV1z34y1U7MR/ [blibli] 结项汇报Demo演示:https://www.bilibili.com/video/BV1sP4y187Vj/ [youtube] 结项汇报视频:https://youtu.be/SKhgnRaljzk [youtube] 结项汇报Demo演示:https://youtu.be/fGjEd5O97lQ
开源软件供应链点亮计划
“开源软件供应链点亮计划-暑期2021”(以下简称 暑期2021)是由中科院软件所与 openEuler 社区共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进国内优秀开源软件社区的蓬勃发展。
根据项目的难易程度和完成情况,参与者还可获取“开源软件供应链点亮计划-暑期2021”活动奖金和奖杯。
官网:https://summer.iscas.ac.cn
Wechaty
Wechaty 是一个开源聊天机器人框架SDK,具有高度封装、高可用的特性,支持NodeJs, Python, Go 和Java 等多语言版本。在过去的5年中,服务了数万名开发者,收获了 Github 的 9600 Star。同时配置了完整的DevOps体系并持续按照Apache 的方式管理技术社区。
项目名称
基于 Itchat 为 Python Wechaty 实现社区首个 Python 语言的本地 Puppet
背景介绍
Wechaty 社区目前已经支持微信、Whatsapp、企业微信、飞书等常见流行即时通讯工具,并且能够通过多语言 SDK (比如 Python Wechaty) 进行调用。
Python Wechaty 目前通过 Puppet Service 模块,基于 gRPC 与 TypeScript 语言的服务器进行通讯,实现对 Python 语言的支持。
我们在本次 Summer 2021 的项目中,希望可以开发一个基于 Python 语言的 Wechaty Puppet Provider 实现(模块名:wechaty-puppet-itchat),通过封装 Itchat ,使其成为 Python Wechaty 可以使用的社区生态模块。
需求介绍
使用 https://github.com/wechaty/python-wechaty-puppet-service 项目作为模版,将核心代码文件 https://github.com/wechaty/python-wechaty-puppet-service/blob/master/src/wechaty_puppet_service/puppet.py 中的 gRPC 调用,全部替换(封装)为 Itchat 模块的调用。
在初期开发中,能够实现文本消息的接收和发送,即可完成原型验证 POC 。
除了 Python 代码之外,还可以参考以下两个链接:
项目难度
中(奖金:9000元)
导师联系方式
吴京京:Python Wechaty creator, Wechaty committer, Microsoft Research Asia Intern
项目产出目标
python-wechaty-puppet-itchat
examples/ding-dong-bot.py
,完成“接收到文字消息ding
时,自动回复消息dong
"的功能项目技术栈
Hello students!
We want Wechaty to be the universal instant messaging SDK on all IM platforms for chatbot makers to build their great conversational user interface, so while these are our ideas of what we think would make good projects for the summer, we're eager to hear your ideas and proposals as well.
Try us out and get to know the Wechaty code with examples!
What we want to do
Implement Itchat Puppet (ItChat) for Python Wechaty. The Puppet abstraction allows Wechaty to provide a consisting API on all IM platforms for build a chatbot. We have lots of puppet providers in TypeScript already, and we want to support our first Python Wechaty Puppet so that our Python developers can run their chatbots out-of-the-box with the Web protocol of WeChat.
Useful Links