当前位置: 首页 > 知识库问答 >
问题:

Discord.py -在机器人启动时加载公会前缀(MySQL)

申高峰
2023-03-14

我有一个使用discord的discord机器人。py和mysql,我目前正在每次发送消息时加载公会前缀:

@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]

问题是机器人越来越大,也越来越落后。因此,我想在bot启动时,在on_ready()事件上加载所有前缀。使用不和谐。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来做这件事呢?提前感谢。

共有1个答案

宦正诚
2023-03-14

迭代客户端公会

以下是修订后的代码:

@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
 类似资料:
  • 我目前正在制作一个discord bot,并希望在服务器加入时在服务器的通道中发送一条消息,这是我到目前为止的代码。 当我运行这段代码时,什么都不会发生。我没有得到任何ERORR或输出。 如果有人能帮忙,那就太棒了。谢谢

  • 我正在学习如何使用python创建一个discord bot,但我在使用这个命令时遇到了问题。我试图做的是踢一个特定的用户,然后使用bot将邀请发送回discord服务器。这是一个愚蠢的想法,但我真的想让它发挥作用。 我特别遇到的问题是如何踢一个特定的用户(带有用户标识),然后将该用户DM。 谢谢! 这里的代码: 这样做的目的是,如果具有适当角色类型的人一个特定的不一致用户id()被踢,机器人会自

  • 每当有人将机器人添加到公会时,它都会向系统通道发送一个带有一点信息的嵌入。 我希望它向邀请机器人的人(使用oauth授权链接的帐户)发送一个相同的消息。问题是,事件只接受1个参数,它没有提供有关使用授权链接将bot添加到guild的人员的任何信息。 有办法做到这一点吗?我是否必须使用“欺骗”方法,比如有一个自定义网站来记录使用邀请的帐户?

  • 我在使用Discord。js创建一个基本的Discord机器人。当bot第一次启动时,我运行获取机器人当前订阅的所有协会的列表。我将其保存到其他程序使用的数据库中。 然而,当人们从他们的公会中添加/删除机器人时,我想保留一个更新的公会列表。我意识到我可以每分钟重新运行,但这似乎效率低下。 当你的机器人被添加到公会和/或频道时,是否有触发的事件?据我所知,事件似乎针对所有已经订阅该公会的用户/机器人

  • 我试图做一个不和谐机器人,它创建一个类别,并为角色和用户设置权限,将用户id作为参数: 其中args是包含命令、类别名称和用户ID的字符串数组。用法应为: 我对此有一些问题,因为就像机器人看不到服务器的成员,他唯一可以添加的用户是我,如果在第一个参数中指定服务器的所有者(在我的例子中是000000)。如果我把别人的ID,机器人不会在类别中添加该用户的权限。我发现,也许机器人看不到其他用户,事实上,

  • 我是一个初学者程序员(或者在我看来是这样),我需要帮助在音乐机器人中实现一个队列。 目前,只有当队列中有一首歌时,队列才能正常工作。如果有更多的歌曲,那么递归开始(在=wait serverQueue(语音,消息)之后从def play开始并等待play(queue.pop(0),语音,消息)从队列开始),并且所有歌曲只是跳过。 我试图以不同的方式解决这个问题,例如,引入了第二个变量,但这并没有带