【问题标题】:Using Discord user ID to store data in .JSON file使用 Discord 用户 ID 将数据存储在 .JSON 文件中
【发布时间】:2020-05-02 11:43:03
【问题描述】:

我觉得这个问题的标题让整个事情变得更加混乱。但这里是它的长篇:

我有一个机器人,它使用 .JSON 文件来存储用户在创建时放入其中的信息。但是,为了确保他们正在创建一个且仅一个文件,我已将其与他们的唯一 ID 绑定。这确保了即使用户更改昵称,他也只能为自己创建一个文件。当然,后台的.JSON文件,会被命名为'123456789.txt'。

这已成功完成,但我想添加机器人命令,允许其他用户获取存储在该用户文件中的信息。因此,例如:如果 Joe 想查看 Ned 最喜欢的颜色是什么,他可以使用如下简单的命令:

!favcolor Ned

机器人会细化 Ned 的 .JSON 文件 (123456789.txt),查找键“color”下存储的值,并打印出结果。

问题不在于我找不到人们的用户 ID (ctx.message.author.id)。问题是我不知道如何让其他人这样做,因为据我所知,没有办法确保当有人在 '!favcolor' 和 'Ned' 之前,机器人会找到123456789.txt。

目前我能想到的唯一解决方案是在创建一个获取用户唯一 ID 的文件时维护一个 .JSON 文件,然后将其与用户名配对。比如:

{
"Ned": "123456789"
"Joe": "234567891"
"Sam": "345678912"
}

等等。然后它只查看那个 JSON,并获取正确的 ID。这是一个好方法吗?还是我错过了 discord.py 中已经内置的更简单的东西?

【问题讨论】:

标签: python json python-3.x discord.py


【解决方案1】:

Discord 用户只能通过 ID 或用户名#discriminator 唯一识别。
您可以轻松地从 User 对象中获取 ID,前提是您能够从相关用户输入中识别它。

带有 .txt 扩展名的 .JSON 文件是矛盾的,您应该将 JSON 数据存储在 JSON 文件而不是文本文件中。

另外,我建议使用数据库而不是 JSON 文件,因为这样做有很多优点,而继续使用 JSON 文件有很多缺点。

【讨论】:

  • 坚持使用 ID,因为 username#discriminator 可以更改(硝基或只是更改您的用户名)。如果数据可以扩大范围,我同意推荐数据库,但如果只是存储简单的东西(如喜欢的颜色),那么使用 JSON 也可以。
  • 通过 username#discriminator 检索用户很好,因为他们的 ID 仍然相同。至于使用数据库,这取决于数据对他们来说有多重要,以及他们拥有多少数据,但一般来说,您希望能够适应未来。
  • username#discriminator 不保证返回相同的用户。例如,如果我的组合是 Benjin#1234 并且有 Nitro 的人使用用户名#discriminator,那么我的组合将被更改。查询 Benjin#1234 将得到另一个帐户,而不是我的帐户。使用 ID 不会导致这种情况。
  • Nitro 不允许你拿别人的鉴别器。这不是它的工作原理。您只能选择免费的用户名#discriminator 组合。无论如何,即使您自己更改了您的鉴别器,通过您的新用户名#discriminator 检索您的用户对象也会导致用户对象具有相同的 ID。您的 ID 不会更改。就像我说的,username#discriminator 唯一标识了一个用户,使用 username#discriminator 来检索对应的 User 对象来获取他们的 ID 并没有错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2017-12-28
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
相关资源
最近更新 更多