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

我在 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.

相关推荐
热点推荐
重大外交挫折:卡塔尔拒绝给120亿美元,伊朗谈判底牌被当场按住

重大外交挫折:卡塔尔拒绝给120亿美元,伊朗谈判底牌被当场按住

流史岁月
2026-06-02 17:10:03
24小时已过,普京政府准时断供,航油不卖中国,欧盟启动应急方案

24小时已过,普京政府准时断供,航油不卖中国,欧盟启动应急方案

云上乌托邦
2026-06-02 17:15:44
这和不穿有啥区别?徐璐真空上阵,身材火辣,抢了所有女星风头!

这和不穿有啥区别?徐璐真空上阵,身材火辣,抢了所有女星风头!

川渝视觉
2026-05-27 22:29:45
两男子钓场溺亡,家属称丈夫救落水者被拖下水,年幼儿女不知父已离世 镇政府:正申报见义勇为

两男子钓场溺亡,家属称丈夫救落水者被拖下水,年幼儿女不知父已离世 镇政府:正申报见义勇为

红星新闻
2026-06-02 22:50:00
曼联敲定夏窗首签!4500万欧引进26岁巴西中场:签5年 41场3球2助

曼联敲定夏窗首签!4500万欧引进26岁巴西中场:签5年 41场3球2助

风过乡
2026-06-03 05:48:04
乡村爱情王小蒙大变样,丰乳肥臀的,再也不是当年清纯的小姑娘了

乡村爱情王小蒙大变样,丰乳肥臀的,再也不是当年清纯的小姑娘了

冷紫葉
2026-06-01 20:31:05
罗马诺:老佛爷胜选后皇马会连续官宣

罗马诺:老佛爷胜选后皇马会连续官宣

懂球帝
2026-06-03 03:29:16
维尼修斯续约僵局:4000万签字费背后,是皇马难跨越的姆巴佩阴影

维尼修斯续约僵局:4000万签字费背后,是皇马难跨越的姆巴佩阴影

落夜足球
2026-06-02 15:55:40
嘉宾晒奚梦瑶婚礼第三套造型,白色裙搭配一身珍珠,不浮夸很漂亮

嘉宾晒奚梦瑶婚礼第三套造型,白色裙搭配一身珍珠,不浮夸很漂亮

童叔不飙车
2026-06-02 22:17:06
湖南农村学霸高考只考239,班主任不相信查监控,看到真相他哭了

湖南农村学霸高考只考239,班主任不相信查监控,看到真相他哭了

二十一号故事铺
2024-09-28 06:30:02
Here we go!罗马诺:埃德松将加盟曼联,转会费总价4500万欧

Here we go!罗马诺:埃德松将加盟曼联,转会费总价4500万欧

懂球帝
2026-06-03 05:27:19
赖昌星前妻近状曝光:拒绝政府安置,独居3000平老宅,只做一件事

赖昌星前妻近状曝光:拒绝政府安置,独居3000平老宅,只做一件事

人生录
2026-06-01 13:52:39
电子眼抓拍有规律!记住7点,2026开车全年不扣分不被罚真的不难

电子眼抓拍有规律!记住7点,2026开车全年不扣分不被罚真的不难

沙雕小琳琳
2026-05-31 14:51:29
印度万亿卢比大崩盘!上海外滩密会后,中企为何集体对莫迪说不?

印度万亿卢比大崩盘!上海外滩密会后,中企为何集体对莫迪说不?

青烟小先生
2026-06-02 23:07:33
1:3!2将惨遭弃用,孙铭徽不打卢伟没辙,超级奇兵7中5砍11分3断

1:3!2将惨遭弃用,孙铭徽不打卢伟没辙,超级奇兵7中5砍11分3断

杨仔述
2026-06-03 04:11:04
一个生母的夺子之战:产子送人收7万元“营养费”,拉锯两年后法院判收养无效,赢了官司却要不回孩子

一个生母的夺子之战:产子送人收7万元“营养费”,拉锯两年后法院判收养无效,赢了官司却要不回孩子

极目新闻
2026-06-02 19:49:04
紫牛头条|砖块松动“坑倒”骑车人致其多处骨折,交警无法出具责任认定,咋索赔?

紫牛头条|砖块松动“坑倒”骑车人致其多处骨折,交警无法出具责任认定,咋索赔?

扬子晚报
2026-06-02 22:08:24
日本彻底慌了!6 月 1 日中国一记重拳落下

日本彻底慌了!6 月 1 日中国一记重拳落下

果妈聊娱乐
2026-06-01 20:33:59
王晓晨俞灏明被拍到一同现身心理医院,王晓晨皱眉抽烟心情糟糕

王晓晨俞灏明被拍到一同现身心理医院,王晓晨皱眉抽烟心情糟糕

露珠聊影视
2026-06-02 15:44:08
负债近40亿,70后四川地产大佬被刑拘了

负债近40亿,70后四川地产大佬被刑拘了

毒sir财经
2026-06-02 22:17:25
2026-06-03 07:00:49
AI前线 incentive-icons
AI前线
面向AI爱好者、开发者和科学家,提供AI领域技术资讯。
1537文章数 152关注度
往期回顾 全部

科技要闻

烧掉千亿后,美团、阿里、京东谁先止血?

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

头条要闻

演员魏宗万去世 曾在94版《三国演义》中饰演"司马懿"

体育要闻

1米74的业余联赛替补,在英超踢中卫

娱乐要闻

奚梦瑶何猷君补办婚礼超幸福

财经要闻

智元和宇树的“暗战”愈演愈烈

汽车要闻

星途神秘新车轮廓曝光 又一款性能SUV要来了?

态度原创

教育
亲子
家居
时尚
游戏

教育要闻

进位制之谜,一个视频学明白!

亲子要闻

不少婴儿孕妇中招,央视再曝新毒物!长期用会致癌,已流窜至全国

家居要闻

流线型轮廓 包容多元身形

蓝色系下装看着清爽不闷,裤子、裙子都凉快,随便穿都不出错

离发售不远了!《寂静岭》系列新作已公开游戏评级

无障碍浏览 进入关怀版