iris,可以看看你的源码吗?
省流:暂时不可以
iris诞生半年以来,朋友们对她关怀备至。抛头露面的机会多了,就会不免得被多问几句:“可以看看源码吗?”
作为饱受知识垄断之苦的学习者和程序员,我当然对共享人类一切智力成果的开源运动再支持不过了。但是我也有一个不得不暂时不公开iris项目代码的理由——iris还不够优秀。
我开始写iris的时代,是我刚刚入门大型项目管理,还未开始南京大学计算机系统基础课程实验(pa实验)的时候。我所做的只有机械地堆叠代码,并没有做非常良好的函数封装和模块化管理——有些功能的实现也是粗暴至极。在pa实验的FAQ页面,有这样一句:“我们相信你的代码里面并没有太多值得大家学习的地方”。就我而言,我觉得iris的代码就属于这种情况。实现她的技术难度并不高,我也不认为iris是什么值得被公开展示的“优秀开源项目”。
那么iris的源码会一直维持不公开的状态吗?其实也不一定。假如未来的某一天,我腾出精力来将iris重构一遍,把她写得足够优雅的时候,我可能就会把源码公开了吧。鉴于她现在已经有 3916
行代码,重构可能不是很容易就能办得到的。
不过可以看看项目结构
但是为了满足某些朋友对iris实现架构的好奇,我还是可以公布一下她的项目结构的。
首先,iris是Mirai框架的机器人,这方面内容已经在关于iris出生的二三事 (meteorcollector.github.io)中被记述详尽。我是在iris运行了两个月之后才了解到基于python的nonebot框架和它成熟的社区生态,但是我还是觉得要自己多写一些代码才可以保证iris是她自己,而不是东拼西凑的缝合产物。
iris的源代码结构如下:
Iris-bot-early-ver
├─ ApiParse.cs // 与成熟api接口的互动(例如nasa提供的apod接口)
├─ FriendMsgManager.cs // 私聊功能
├─ HAParse.cs // 各种网页爬虫
├─ IrisAstroCont.cs // 天文竞赛功能
├─ MainMsgManager.cs // 对消息的集中处理
├─ NgcSearch.cs // 深空天体本地查询功能
├─ Program.cs // 主函数所在
├─ Send.cs // “发”字开头消息集中处理
└─ StarSearch.cs // 其他天体的本地查询功能
只有9个C#源文件,相互引用。可以说是简陋不堪了。
iris的build结构如下:
iris_build
├─ ComfortSongs.txt // iris可能会向你推荐的歌曲,以及对应的网易云id
├─ DeepSkyImages // 存放深空天体文件的第一个文件夹,这里的图片是我自己搜集的
│ ├─ IC1805.jpg
│ ├─ IC418.jpg
│ └─ ...
├─ Files
│ ├─ AnsweringInfo.txt // ban掉一般疑问句应答功能群聊的群号
│ ├─ CityLocations.csv // 中国主要城市经纬度
│ ├─ Constellations.txt // 各星座以及它们对应的字母缩写
│ ├─ ContRank // 各群聊天文竞赛排名
│ │ ├─ 对应群号.txt
│ │ └─ ...
│ ├─ County.txt // 中国县级行政区名录
│ ├─ FamilyName0.csv // 中国姓氏(高频率)
│ ├─ FamilyName1.csv // 中国姓氏(中频率)
│ ├─ FamilyName2.csv // 中国姓氏(低频率)
│ ├─ FillingInfo.txt // ban掉“填字”功能群聊的群号
│ ├─ Greetings.txt // 对 iris 的回答
│ ├─ MuteInfo.txt // 将 iris 关机的群聊群号
│ ├─ SendingInfo.txt // ban掉“发”功能群聊的群号
│ ├─ Translation.txt // 针对heavens-above爬虫的英文翻译替换集
│ ├─ WeatherID.txt // 中国气象站编号与名称的映射
│ ├─ baidu_token.txt // 百度地图api的token
│ └─ tmp.txt
├─ Flurl.Http.dll
├─ Flurl.dll
├─ IrisInfo.txt // 对 iris -i 的回应
├─ Manganese.dll
├─ Mirai.Net.dll
├─ MtoNGC.txt // 梅西耶星表向NGC号码的转化
├─ NGC.csv // NGC与IC星表天体信息
├─ NasaToken.txt // NASA api的token
├─ Newtonsoft.Json.dll
├─ Photos
│ ├─ iris的各种图片
│ └─ Description.txt // iris对每张图片的描述
├─ Radar
│ ├─ RadarDir.csv // 方便中央气象台网雷达图爬虫工作的某些匹配信息
│ └─ RadarTrans.csv // 方便中央气象台网雷达图爬虫工作的某些匹配信息
├─ StarTrans.csv // 恒星中文名转支持查询的其他格式(比如星表号码)
├─ System.Reactive.dll
├─ System.Reactive.xml
├─ Websocket.Client.dll
├─ astro_questions.txt
├─ cities.txt // iris的天文题库
├─ default
│ └─ 从stellarium掠夺来的所有深空天体图片
├─ dso.csv
├─ hygdata_v3.csv
├─ hygfull.csv // 这三个csv都是天体信息,具体来源附于后文
├─ images // 天协宣传用图
│ ├─ gafa1.png
│ ├─ gafaposter1.jpg
│ ├─ gafaposter2.jpg
│ └─ gafaposter3.jpg
├─ iris_bot
├─ iris_bot.deps.json
├─ iris_bot.dll
├─ iris_bot.exe
├─ iris_bot.pdb
├─ iris_bot.runtimeconfig.json
├─ lv1chars.txt // 一级汉字表
├─ lv2chars.txt // 二级汉字表
├─ neko
│ └─ 柴郡猫图片
└─ tudou
└─ 土豆图片
可以发现条理还是比较混乱的…也许在未来会进行调整。不过看了这些目录,估计你也对iris有一个大概的了解了——其实只是简单技术的堆叠而已!怎么样,实现起来不是很困难吧?
天体数据来源:
astronexus/HYG-Database: Current version of the HYG Stellar database (github.com)
剩余由我和朋友们手动整理,可以参考一个reader-friendly的iris手册 (meteorcollector.github.io)中相关内容。
在文章最后,感谢你一直以来的陪伴。
文章最后一次更新:2023/02/22