嵌入 discord.py 中的 Random.choice 不起作用

Posted

技术标签:

【中文标题】嵌入 discord.py 中的 Random.choice 不起作用【英文标题】:Random.choice inside an embed in discord.py not working 【发布时间】:2021-06-04 17:47:31 【问题描述】:

我对 client.command 做了同样的事情,并且它有效。但是,我想使用 ?rate me 而不是 ?rateme,因此决定使用 on_message。我没有看到我的代码有任何问题,并且它的执行没有任何错误。但是当我输入 ?rate me in discord 时,没有任何反应。如果有人能帮助我找出问题所在,将不胜感激。

async def on_message(message):
    if message.content.startswith('?rate me'):
        async with message.channel.typing():
            variable_list =[
                '1',
                '2',
                '3',
                '4'
            ]

            embed = discord.Embed(colour=0xc81f9f,
                title="Rating",
                description=f"message.author.mention is a (random.choice(variable_list))"
            )
            embed.set_footer(text=f"message.guild.name")
            embed.timestamp = datetime.datetime.utcnow()

            await message.channel.send(embed=embed) 

【问题讨论】:

description=f"message.author.mention is a (random.choice(variable_list))") 替换成这个,你有一个括号没有任何理由。 尝试在 on_message 中打印一些内容,看看是否可行。 你随机导入了吗? @AdityaTomar 是的,我已经随机导入了。 @Karan 对不起,我看不出你在声明中做了什么改变。 【参考方案1】:

您似乎没有将您的函数标记为event。 请使用@client.event@bot.event@commands.Cog.listener。 如果没有这个定义,它将无法工作。 我还建议您重新构建代码以更快地检测错误。我的代码如下所示:

import discord
import random

@client.event / @bot.event / @commands.Cog.listener # Make it as an event that fires if the conditions are True
async def on_message(message):
    if message.content.startswith("?rate me"):
        async with message.channel.typing():
            variable_list = ['1', '2', '3', '4']

            embed = discord.Embed(color=0xc81f9f,
                                  title="Rating")
            embed.description = f"message.author.mention is a (random.choice(variable_list))" # Set description
            embed.set_footer(text=f"message.guild.name")
            embed.timestamp = datetime.datetime.utcnow()

            await message.channel.send(embed=embed)

如果您已经有一个现有的on_message 事件,只需将没有第一部分的代码放入现有事件中,然后您就有了:

    if message.content.startswith("?rate me"):
        async with message.channel.typing():
            variable_list = ['1', '2', '3', '4']

            embed = discord.Embed(color=0xc81f9f,
                                  title="Rating")
            embed.description = f"message.author.mention is a (random.choice(variable_list))" # Set description
            embed.set_footer(text=f"message.guild.name")
            embed.timestamp = datetime.datetime.utcnow()

            await message.channel.send(embed=embed)

(这是因为我们这里不能有多个on_message-event。)

【讨论】:

我确实使用了@client.event,就像我将它用于似乎工作正常的所有其他事件一样。除了这个。我什至复制粘贴了你的整个代码,但它似乎不起作用。 on_ready 触发,然后什么也没有发生。 您的代码中是否已有on_message 事件? 啊,是的,我愿意。我有一个返回随机笑话的 on_message 事件。我的代码中不应该有多个 on_message 事件吗? 不,我不建议这样做。将我发送的代码放入现有事件中。 (见我答案末尾的代码) 该死的,是的,我就是这么做的,而且成功了。但是,当我们可以使用多个@client.command 时,为什么我们不能使用多个 on_message 事件呢?此外,目前,代码看起来很乱。我可以在另一个 py 文件中编写另一个 on_message 事件并在我的主文件中调用它吗?如果是这样,我该怎么做?

以上是关于嵌入 discord.py 中的 Random.choice 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

嵌入 discord.py 中的 Random.choice 不起作用

discord.py bot 不会在嵌入中加载视频

如何隐藏 discord.py 中的原始链接

Discord.py 创建没有字幕的嵌入

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中

JSON 嵌入 Discord.PY