【问题标题】:discord.py edited message logging issuediscord.py 编辑了消息记录问题
【发布时间】:2021-04-04 19:58:54
【问题描述】:

所以,我编写了一些代码,允许我将编辑的消息记录到某个频道。代码如下:

async def on_message_edit(message_before, message_after):
    embed=discord.Embed(title="{} edited a message".format(message_before, message.author), description="", color=0xFFFF00)
    embed.add_field(name= message_before.content ,value="This is the message before the edit:", inline=True)
    embed.add_field(name= message_after.content ,value="This is the message after the edit", inline=True)
    channel=bot.get_channel(747057143630528563)
    await channel.send(embed=embed) 

但是,当我运行代码时,我收到错误消息:

忽略 on_message_edit 中的异常 回溯(最近一次通话最后): _run_event 中的文件“C:\Users\jackt\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py”,第 333 行 等待 coro(*args, **kwargs) 文件“C:\Users\jackt\Desktop\bot.py”,第 92 行,on_message_edit embed=discord.Embed(title="{} 编辑了一条消息".format(message_before, message.author), description="", color=0xFFFF00) NameError: name 'message' is not defined

我需要更改代码的哪一部分,我需要对其进行哪些更改?谢谢。

【问题讨论】:

    标签: python discord.py


    【解决方案1】:
    discord.Embed(title="{} edited a message".format(message_before, message.author), description="", color=0xFFFF00)
    

    应该是

    discord.Embed(title="{} edited a message".format(message_before.author.name), description="", color=0xFFFF00)
    

    您之前收到message is not defined 错误的原因是因为您在此处添加了一个逗号:message_before, message.author。这使python认为它们是两个不同的语句,使其尝试访问消息变量(不存在)。

    相反,您应该访问 message_before 对象。我添加了.name 来检索名称,因为使用.author 只会添加一个用户对象。如果您只想提及用户,则可以将.name 替换为.mention

    编辑:还在函数顶部添加@bot.event,以便在消息编辑时调用它。代码应如下所示:

    @bot.event
    async def on_message_edit(message_before, message_after):
        discord.Embed(title="{} edited a message".format(message_before.author.name), description="", color=0xFFFF00)
        embed.add_field(name= message_before.content ,value="This is the message before the edit:", inline=True)
        embed.add_field(name= message_after.content ,value="This is the message after the edit", inline=True)
        channel=bot.get_channel(747057143630528563)
        await channel.send(embed=embed) 
    

    【讨论】:

    • 这阻止了错误的出现,但是现在在编辑消息时没有消息发送到我的频道,但也没有出现错误。基本上,什么都不会发生。有任何想法吗?谢谢。
    • 您使用的是 py3.6 还是更高版本?如果是这样,您可以尝试将 title 替换为 f"{message_before.author.name} edited a message" 以查看是否有任何不同。您也可以在定义print(channel) 后尝试运行它以查看它是否返回None 或不@JackThorn
    • 我尝试添加 f" 的东西,但它什么也没做。我还在脚本的最后一行添加了 print(channel),但没有发送任何内容。我也尝试了 print("Edited") ,但没有发送编辑的单词,所以也许 on_message_edit 没有被正确触发?有什么想法吗?谢谢。
    • 尝试在async def on_message_edit(message_before, message_after):上方添加@client.event?除非你已经有了它
    • 我忘了添加@bot.event 哈哈。难怪什么都没发生。感谢您的帮助!
    【解决方案2】:

    您在定义的第一行中使用message.author

    embed=discord.Embed(title="{} edited a message".format(message_before, message.author), description="", color=0xFFFF00)
    

    但是 message 从未被声明过,因此你得到的“未定义”错误

    解决此问题的方法之一是: message_before.author.name

    【讨论】:

    • 谢谢,这阻止了错误的出现,但是现在在编辑消息时没有消息发送到我的频道,但也没有出现错误。基本上,什么都不会发生。有任何想法吗?谢谢
    • @JackThorn 我不知道,它不可能是频道 ID,因为它听起来像是以前工作的,我无法帮助你
    猜你喜欢
    • 2020-11-20
    • 2021-07-31
    • 2021-05-17
    • 2021-03-19
    • 1970-01-01
    • 2021-08-17
    • 2021-08-11
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多