【问题标题】:Discord.py - Load guild prefixes when the bot starts (MySQL)Discord.py - 机器人启动时加载公会前缀 (MySQL)
【发布时间】:2021-02-15 11:25:12
【问题描述】:

我有一个使用 discord.pymysql 的不和谐机器人,我目前每次发送消息时都在加载公会前缀:

@client.event
async def on_message(message):

    cursor = mydb.cursor()
    cursor.execute(f"SELECT prefix FROM servers WHERE guild = {message.guild.id}")
    prefix = cursor.fetchone()[0]

问题是机器人变得越来越大,而且也很滞后。所以我想在机器人启动时加载所有前缀,在 on_ready() 事件上。使用 discord.js,它会是这样的:

const guildPrefixes = new Map();

client.on('ready', () => {

    client.guilds.cache.forEach(guild => {
        connection.query(
            `SELECT prefix FROM servers WHERE guild = '${guild.id}'`
        ).then(result => {
            guildPrefixes.set(guild.id, result[0][0].prefix);
        }).catch(err => console.log(err));
    });

});

client.on('message', async (message) => {

    const prefix = guildPrefixes.get(message.guild.id);
    // code here...

});

我如何使用 discord.py 做到这一点? 提前谢谢你。

【问题讨论】:

  • 你有公会特定的前缀吗? on_ready() 不会有公会。
  • 我认为我将不得不使用for guild in client.guilds 之类的东西,然后为每个公会保存前缀。我只是不知道如何在python中做到这一点。在 js 中我可以使用 Map()

标签: python discord.py


【解决方案1】:

遍历client.guilds

以下是修改后的代码:

@client.event
async def on_ready():
    client.prefixes = {}
    for i in client.guilds:
        cursor = mydb.cursor()
        cursor.execute(f"SELECT prefix FROM servers WHERE guild = {i.id}")
        prefix = cursor.fetchone()[0]
        client.prefixes[i.id] = prefix

@client.event
async def on_message(m):
    prefix = client.prefixes.get(m.guild.id)
    # code

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2021-09-05
    • 2021-01-29
    • 2021-02-27
    • 2021-09-03
    • 2021-02-12
    • 2021-07-08
    • 2021-07-07
    • 2021-05-12
    相关资源
    最近更新 更多