discord.py 保存服务器的变量设置更改

Posted

技术标签:

【中文标题】discord.py 保存服务器的变量设置更改【英文标题】:discord.py save variable settings changes of server 【发布时间】:2021-05-30 04:40:04 【问题描述】:

当有人将值更改为 heroku postgres 时,我如何保存每个服务器的 self.stn_hoist 值?

@commands.command()
@commands.has_permissions(administrator=True)
async def hoist(self, ctx, value):
    embed=discord.Embed(color=0x850000)
    embed.add_field(name="hoist", value=f'has been set to `value`.', inline=False)
      
    if value.lower() == 'yes':
        self.stn_hoist = True
        await ctx.send(embed=embed)
    elif value.lower() == 'no':
        self.stn_hoist = False
        await ctx.send(embed=embed)
    else:
        await ctx.send(embed=discord.Embed(color=0x850000).add_field(name="hoist", value=f'can not be set to `value`'))

【问题讨论】:

我将 heroku postgres 添加到 heroku 应用程序并将其连接到 bot.py 但我不知道如何创建数据库并保存变量更改 是否要将stn_hoist 保存为变量? @Ceres 我想知道如何将每个服务器的设置(如stn_hoist)保存在数据库中以及如何加载on_ready() 【参考方案1】:

我不建议对单个变量使用数据库。您可以为此使用 json 文件,但 heroku 有一个ephemeral file system,这意味着每当您的应用程序重新启动时都会重写 json 文件。你可以使用 heroku 的配置变量来存储这个变量。

import os
import requests
#getting the variable
hoist = os.environ['hoist']
# OR
request = requests.get('https://api.heroku.com/apps/YOUR-APP-NAME/config-vars', headers='Accept': 'application/vnd.heroku+json; version=3', "Authorization": "Bearer YOUR-AUTH-TOKEN")
if request.status_code == 200:
   hoist = request.json()['hoist']
else:
   print('something went wrong')

#updating the config variable

request = requests.patch('https://api.heroku.com/apps/YOUR-APP-NAME/config-vars', json.dumps("hoist": "1"), headers="Content-Type": "application/json", 'Accept': 'application/vnd.heroku+json; version=3', "Authorization": "Bearer YOUR-AUTH-TOKEN")
if request.status_code == 200:
   hoist = request.json()['hoist']
else:
   print('something went wrong')

您必须将YOUR-APP-NAME 替换为您的应用名称或ID,并将YOUR-AUTH-TOKEN 替换为您的身份验证令牌。

您必须在 heroku 仪表板或 CLI 中设置 config variable hoist

您可以获得API令牌here

参考资料:

API Docs accessing config var

延伸阅读:

Use heroku api wrapper

【讨论】:

以上是关于discord.py 保存服务器的变量设置更改的主要内容,如果未能解决你的问题,请参考以下文章

如何制作不狙击跨服务器的狙击命令(discord.py)

无法为每个服务器 discord.py 获取自定义管理员角色

Discord.py - 使用命令更改前缀

discord.py 嵌入本地保存的图像

需要一个关于将播放器保存在列表 discord.py 机器人上的问题的想法

discord.py 1.7.2 - 如何私信用户