数据未在 github 上为 discord.py bot 保存
Posted
技术标签:
【中文标题】数据未在 github 上为 discord.py bot 保存【英文标题】:Data not saving for discord.py bot on github 【发布时间】:2021-07-27 18:33:23 【问题描述】:我制作了一个不和谐机器人并使用 Github 将其托管在 Heroku 上。机器人的一部分是一个调平系统,它将信息保存到名为 users.json 的文件夹中。由于我已经从本地托管切换到在 Heroku 上托管它,所以它没有保存。我的代码如下:
@client.event
async def on_member_join(member):
with open('users.json', 'r') as f:
users = json.load(f)
await update_data(users, member)
with open('users.json', 'w') as f:
json.dump(users, f)
@client.event
async def on_message(message):
if message.author.bot == False:
with open('users.json', 'r') as f:
users = json.load(f)
await update_data(users, message.author)
await add_experience(users, message.author, 5)
await level_up(users, message.author, message)
with open('users.json', 'w') as f:
json.dump(users, f)
await client.process_commands(message)
async def update_data(users, user):
if not f'user.id' in users:
users[f'user.id'] =
users[f'user.id']['experience'] = 0
users[f'user.id']['level'] = 1
async def add_experience(users, user, exp):
users[f'user.id']['experience'] += exp
async def level_up(users, user, message):
with open('levels.json', 'r') as g:
levels = json.load(g)
experience = users[f'user.id']['experience']
lvl_start = users[f'user.id']['level']
lvl_end = int(experience ** (1 / 4))
if lvl_start < lvl_end:
await message.channel.send(f'user.mention has leveled up to level lvl_end')
users[f'user.id']['level'] = lvl_end
@client.command()
async def level(ctx, member: discord.Member = None):
if not member:
id = ctx.message.author.id
with open('users.json', 'r') as f:
users = json.load(f)
lvl = users[str(id)]['level']
await ctx.send(f'You are at level lvl!')
else:
id = member.id
with open('users.json', 'r') as f:
users = json.load(f)
lvl = users[str(id)]['level']
await ctx.send(f'member is at level lvl!')
【问题讨论】:
如果您通过 Heroku 托管,据我所知,Github 上没有任何更新。我相信这通常是不可能的。 【参考方案1】:Heroku 只托管静态应用程序,这意味着您不能在那里修改文件。
【讨论】:
哦,好的,谢谢,但是我还有其他方法可以更新它吗?喜欢另一种托管机器人的方式吗? 我认为你应该使用python字典而不是json文件,可以修改数据。,但是当你重新启动应用程序时它会重置。【参考方案2】:在 Heroku 上托管 Discord Bot 仍然是最佳选择,但考虑到 ephemeral file system,您需要使用外部存储来保存数据。
假设您仍想存储文件(即不将应用程序转换为使用数据库),您有多种选择:
Amazon S3(使用 Python boto3 模块) Dropbox GitHub 本身(将 users.json 与源代码一起保存)请参阅Files on Heroku以了解每个选项的详细信息。
【讨论】:
谢谢,这应该可以帮助我解决我的问题 我在 github 方式上遇到了一些问题,您发送给我的网站上的解释并没有很好地解释您需要做什么。如果你不能帮助我完全理解,它有点匆忙。 您是否也查看了 GitHub 存储库?有一个关于如何创建或更新文件的 Python 示例。每个文件更改都是一次提交。基本上,您将 json 文件与源代码一起存储。也许它并不理想,但它非常简单 示例链接:github.com/gcatanese/HerokuFiles/blob/main/app/github_api.py 在这一点上,我只是觉得我很愚蠢,呃:faceplam:我根本不明白,哈哈我想明白了以上是关于数据未在 github 上为 discord.py bot 保存的主要内容,如果未能解决你的问题,请参考以下文章
通过在 top.gg / discordbotlist 上投票获得机器人奖励 (discord.py)
使用 Heroku 时如何从 Discord.py 异步更改为重写?
如何在 Heroku 上安装 discord.py-rewrite 依赖项以进行 Discord 机器人托管?