网易首页 > 网易号 > 正文 申请入驻

我在 4 年的机器人开源项目中学到了什么

0
分享至

作者 | Michael Parker

译者 | 刘雅梦

策划 | 褚杏娟

我是名为 Simplex 的开源 Discord 机器人的创建者 / 开发者。在这篇文章中,我想带你了解一下这个项目所做的一些决定、问题和缺陷修复,以及项目启动的原因。Simplex 是我 14 岁时创建的一个机器人,现在它运行在 500 台服务器上拥有 8.4 万用户。我希望你们和我一样享受我的开源之旅。

故事是如何开始的

我 3 年前(2021 年 10 月 15 日)创办了 Simplex。那时候,它还不叫 Simplex;这是 Michael Media Group 的教程机器人,我在那里制作 Python 教学视频。目前还不清楚这个教程机器人在哪里结束的,Simplex 又是从哪里开始。第一次 GitHub 提交的日期为 2021 年 10 月 25 日。Simplex 是一个我可以据此制作教程的想法试验场。然而,教程一直没有做出来;但我不断地将想法打包到这个测试机器人中。

最初的目标是帮助人们制作一些东西,而不是每月为 Mee6 这样的机器人支付大笔订阅费。我发布了这个机器人之后,一个很大的驱动因素就是用一个关心社区的开源机器人取代了我朋友所使用的所有付费工具。

刚开始的时候,我曾经认为所有的费用都是随意的。成本莫名其妙地高得离谱。当我的机器人开始获得一些吸引力时,我意识到需要某种形式的收入来支付成本,所以我建立了一个“给我买杯咖啡”项目。我还意识到,一些机器人(如 Mee6)没有理由向最终用户收取隐藏费用。像这样的机器人让我很不安,因为它们的目标显然是想从那些不那么了解自己支出情况的年轻人那里赚走尽可能多的钱。

将 Simplex 迁移到云上

Simplex 最初运行的是 discord.py,并在我的计算机上本地托管。它工作得很好——那时只有我和我的几个朋友在使用这个机器人,我比其他任何人起得都早,并且是最后上床睡觉的。

随着机器人开始增长到 20 或 30 台服务者时,我觉得让我的电脑一直开着不是一个好的解决方案,所以我把它转移到了它们最便宜的 DigitalOcean 计划上。我已经在运行一个名为未知硬币的加密货币的根节点了,这是我在一年前 14 岁时建立的。后来,我转向了 Hetzner,因为 RAM 更多价格也更便宜,我目前仍在使用它。

技术的东西

刚开始的时候,我不得不在 discord.js 和 discord.py 之间做出选择。我以前曾设法使用 Python 来完成小任务和自动化,并且我曾设法用 JS 打印了“Hello World”,因此 Python 是明确的选择。Discord.py 相对易于使用。在机器人的前六个月里,我使用了 discord.py,直到它被弃用,这给我留下了两个选择:Pycord 或 Hikari。

我之所以选择 Pycord,是因为它与 discord.py 有很多相似之处。(事实上,Pycord 是 discord.py 的一个分支。)也是在这个时候,我得到了一位名叫 Sid 的程序员的帮助,他做了一些提交,创建了我们现在使用的流行的离职系统(也不小心第二次删除了我们所有的用户数据)。(经过一番说服,我在本文中添加了这个故事。)

Sid 时不时地会带来一些有用的提交和反馈。也是在这个时候,我们邀请机器人的人数激增。它在一周内爆炸了,这导致了数据丢失的问题(即使 Sid 没有删除它)。

数据库之旅

JSON 文件最初被用作数据库。回想起来,这是一个糟糕的想法,根本不应该发生,但当时我只是一个 14 岁的孩子,以前从未有过需要长期存储数据的项目。JSON 似乎很容易使用。问题是,如果两个不同的服务器试图同时访问 JSON 文件,其中一个或两个服务器都会被覆盖。

当然,这不是我想要的,所以我学习了 SQLite3,由于它非常简单可靠,我强烈推荐它。我相信你们中的一些人可以看到这里的问题。如果你做不到,不用担心——我花了几个月的时间才意识到这一点。SQLite3 是阻塞的,而不是异步的(阻塞与非阻塞)。如果计数系统变得更受欢迎,这有可能会减慢机器人和响应时间。

这导致我重写了我们所有的数据库调用来使用 aiosqlite。Aiosqlite 仍然是一种 SQLite 数据库,就像 SQLite3 一样。不同之处在于,Aiosqlite 是一个同一类型数据库软件的不同库和实现。

计数的挑战

求值问题求值是一个一直令人头疼的问题。一开始,我只是在使用 Python 内置的 eval() 函数,直到我在 Discord 上看到有人说“eval 是邪恶的”,然后我搜索了一下。事实证明,我创建了一个安全漏洞,计数通道中的任何有效 Python 代码都将被执行。

幸运的是,在有人利用它之前,我们很快就注意到了这一点。我的第一个想法是将读取的字符串过滤为数字和 - + ! * / < >。然而,这里有两个问题:

1.它将不再计算二进制、十六进制等。(这不是一个大问题,因为我可以重新实现它们。)

2.通过计算大量的数字,机器人可能会崩溃。

事实证明,如果你在 Python 中执行 eval(101010),它将会使程序崩溃。(一个有趣的事实:我了解到这是一些公共机器人的问题。我确实尝试联系了一些人来让他们了解这一情况。)在尝试了一些解决方案后,我决定使用库来保证安全并阻止溢出错误。

Base69

最后一个与计数有关的大事件是 base69。我上了一堂关于八进制和十六进制的计算机科学课,我的一个朋友说:“你知道,如果有一种使用 base69 的方法,那就太有趣了。”半小时后,我在午休时间发布了一个 Python 包,然后那天晚上,我决定将其实现到 Simplex 计数系统中。

模块化设计

大多数人在看到 Simplex 中的文件和数据库的数量时,会问两个问题:

1.“为什么要创建这么多数据库文件,而不是在一个数据库文件中创建所有表?”

2.“为什么有这么多的 Python 文件?”

每个 Python 文件都是一个 Cog。Cog 是“一个类中的命令、监听器和一些状态的集合”(discord.py 文档)。

采用模块化设计有以下几个原因:

  • 调试:有时很难弄清楚到底是什么导致了机器人崩溃,或者所有的存储都到哪里去了。Cog 可以在机器人运行时加载和卸载。

  • 开发:在我的笔记本电脑上工作时,我没有所有数据库的副本,所以我可以在一个 Cog 及其相应的数据库上工作,而无需进行大量设置。

  • 开源:这允许人们只需从 GitHub 下载一个 Cog 文件,就知道它能工作。

缺失的数据

我们很早就遇到了两次数据丢失的情况。可能有一些服务非常能理解我们,他们知道我们是两个 14 岁的孩子在互联网上发布代码。

出了什么问题?

在编写代码时,一些空白数据库文件被推送到了 GitHub。当我被告知一切都已被清除时,我运行了一个我添加到机器人中的命令,以拉取文件并重新启动机器人。不幸的是,Sid 的测试数据库仍在存储库中。

我学到了什么?

关键教训:

  • 管理开源不仅仅是编写代码。

  • 为成功做准备与为失败做准备同样重要。

  • 我深入学习了 Python,发现了它的怪癖和力量。

https://blog.michaelrbparker.com/post/

会议推荐

AICon 2025 强势来袭,5 月上海站、6 月北京站,双城联动,全览 AI 技术前沿和行业落地。大会聚焦技术与应用深度融合,汇聚 AI Agent、多模态、场景应用、大模型架构创新、智能数据基建、AI 产品设计和出海策略等话题。即刻扫码购票,一同探索 AI 应用边界!

今日荐文

你也「在看」吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
心理学:永远不要在儿女面前,随口说出这两句话,会毁掉孩子一生

心理学:永远不要在儿女面前,随口说出这两句话,会毁掉孩子一生

心理观察局
2026-05-30 07:08:20
马云斥巨资在沙漠里种树,承诺每年1亿棵,10年过去了,情况如何

马云斥巨资在沙漠里种树,承诺每年1亿棵,10年过去了,情况如何

混沌录
2026-05-30 11:26:16
耿同学抖音账号,已被永久限流!中南大学湘雅医学院回应论文造假:已要求课题组提交原始数据

耿同学抖音账号,已被永久限流!中南大学湘雅医学院回应论文造假:已要求课题组提交原始数据

TOP大学来了
2026-05-30 19:02:11
359旅主任刘亚生被俘,胡宗南从军统调来女特务,下令今晚拿下他

359旅主任刘亚生被俘,胡宗南从军统调来女特务,下令今晚拿下他

磊子讲史
2026-05-29 14:42:20
一家四口"睡觉照"走红,网友乐了:父母是真爱,孩子是意外

一家四口"睡觉照"走红,网友乐了:父母是真爱,孩子是意外

大果小果妈妈
2026-05-30 09:13:37
1998年数万华人遭屠杀,中国为何没出兵?26年后答案让人沉默

1998年数万华人遭屠杀,中国为何没出兵?26年后答案让人沉默

哄动一时啊
2026-02-17 22:21:25
耿同学的北航博导杨昀:论文不让国内看,跟肖飞合作,清华本硕没有一作

耿同学的北航博导杨昀:论文不让国内看,跟肖飞合作,清华本硕没有一作

小小河
2026-05-29 22:41:27
痛心 | 突发讣告!南开大学教授王敦书,在津逝世!

痛心 | 突发讣告!南开大学教授王敦书,在津逝世!

天津广播
2026-05-30 23:08:59
官方发布欧冠历史射手榜!炸出一堆牛鬼蛇神,C罗140球稳居第一

官方发布欧冠历史射手榜!炸出一堆牛鬼蛇神,C罗140球稳居第一

寒士之言本尊
2026-05-30 16:36:06
文班动情落泪!7尺4西决MVP创八纪录:22岁将签五年3.03亿顶薪

文班动情落泪!7尺4西决MVP创八纪录:22岁将签五年3.03亿顶薪

颜小白的篮球梦
2026-05-31 12:45:41
万万没想到:李连杰主演的《少林寺》,绝大多数镜头居然都不是在“少林寺”拍的!

万万没想到:李连杰主演的《少林寺》,绝大多数镜头居然都不是在“少林寺”拍的!

良有方
2026-05-31 05:38:41
55中18!马刺库里!NBA西决历史第三人

55中18!马刺库里!NBA西决历史第三人

篮球实战宝典
2026-05-31 18:08:14
不出意外!2026年下半年,房子、车子、存款或将迎来“大变局”?

不出意外!2026年下半年,房子、车子、存款或将迎来“大变局”?

猫叔东山再起
2026-05-31 11:20:08
科内特:封盖后听到有人喊詹姆斯 谁在历史上留存更久尚未可知

科内特:封盖后听到有人喊詹姆斯 谁在历史上留存更久尚未可知

北青网-北京青年报
2026-05-31 19:26:12
杭州女子征婚:不要彩礼,能提供5分钟夫妻生活,每月给男人3000

杭州女子征婚:不要彩礼,能提供5分钟夫妻生活,每月给男人3000

谭谈社会
2026-05-28 18:34:27
"香会"期间 英美澳官宣为无人潜航器研制新武器

"香会"期间 英美澳官宣为无人潜航器研制新武器

看看新闻Knews
2026-05-31 12:16:11
黄仁勋公开放话,华为韬定律要比台积电落后10年,结果成国际笑话

黄仁勋公开放话,华为韬定律要比台积电落后10年,结果成国际笑话

胖福的小木屋
2026-05-31 13:26:25
2026上半年口碑最好10部国产剧:《主角》第3,第1实至名归

2026上半年口碑最好10部国产剧:《主角》第3,第1实至名归

八斗小先生
2026-05-30 19:06:12
四国元首敦促亚美尼亚举行公投

四国元首敦促亚美尼亚举行公投

参考消息
2026-05-30 18:43:05
广西壮族自治区人民政府原副秘书长,办公厅原党组成员、副主任唐宁接受审查调查

广西壮族自治区人民政府原副秘书长,办公厅原党组成员、副主任唐宁接受审查调查

界面新闻
2026-05-31 17:03:23
2026-05-31 20:23:00
AI前线 incentive-icons
AI前线
面向AI爱好者、开发者和科学家,提供AI领域技术资讯。
1534文章数 152关注度
往期回顾 全部

科技要闻

戴尔诺基亚又回来了!AI重估老牌科技公司

头条要闻

香会上中方全英文发问菲律宾 菲防长语无伦次答非所问

头条要闻

香会上中方全英文发问菲律宾 菲防长语无伦次答非所问

体育要闻

阿森纳用最悲壮的方式,成就了巴黎王朝

娱乐要闻

朱军退休,正义虽迟但到,女方受惩

财经要闻

医学首席转岗搞科技,A股科技股遭遇巨震

汽车要闻

900V+3.2秒破百 领克10+&领克10上市16.99万元起

态度原创

健康
房产
亲子
游戏
艺术

尝试干细胞疗法如何避免踩坑?

房产要闻

红动五月!全国抢入核心资产,广州盯紧凯旋新世界!

亲子要闻

2026年提高免疫力婴幼儿奶粉:免疫配方成分临床验证深度解析

R星新动作引热议!玩家嗨起来了:我们要见证历史

艺术要闻

16位欧美画家笔下的儿童肖像

无障碍浏览 进入关怀版