我不知道如何正确使用fetch_message

时间:2019-05-30 23:00:54

标签: python discord discord.py discord.py-rewrite

我不知道将协程“ fetch_message”放在哪里 我想编辑一条消息,但是旧方法不起作用

我尝试了旧方法,但是它告诉我它得到2个位置参数,而不是1个...

ersteller = ctx.message.author.id
await channel.send(f"<@{ersteller}>", embed=embed)
nachrichtchannel = ctx.message.channel
zerstörung = await nachrichtchannel.send("Selbstzerstörung in 3")
message = await client.fetch_message(zerstörung)
time.sleep(1)
print(message)
print(zerstörung)
await message.edit("Selbstzerstörung in 2")
message.edit()
time.sleep(1)
await message.edit("Selbstzerstörung in 1")
time.sleep(1)
await message.delete()
nachricht = ctx.message
await client.message.delete(nachricht)

它只是告诉我“ AttributeError: module 'client' has no attribute 'fetch_message'” 这段代码是经过修正的消息的一部分,包括“ Selbstzerstörung in 3”在内的所有内容均已发布,但编辑失败...

2 个答案:

答案 0 :(得分:1)

我不确定当您误以为带有消息对象时,为什么要提取消息

zerstörung = await nachrichtchannel.send("Selbstzerstörung in 3")

您可以仅在该对象上调用edit,而不必调用fetch_message

对于您的edit错误,您必须传递content作为参数。 似乎您正在尝试做一个计数器,所以这是一个示例:

 @commands.command()
 async def counter(self, ctx):
     message = await ctx.channel.send("Timer 3")
     time.sleep(1)
     await message.edit(content="Timer 2")
     time.sleep(1)
     await message.edit(content="Timer 1")
     time.sleep(1)
     await message.delete()

编辑:您应该使用await asyncio.sleep(1)避免任何代码中断。

答案 1 :(得分:0)

fetch_message方法是Abstract Base Class,更精确的是Messageable

根据文档

详细介绍可发送模型的常见操作的ABC 消息。

以下实现此ABC:

• TextChannel
• DMChannel
• GroupChannel
• User
• Member
• Context

这意味着您可以使用任何这些类的对象调用fetch_message。

您可以直接在上下文中调用它 await ctx.fetch_message(id)

仅以ID开头的更一般的示例是:

    # taken out of a on_raw_reaction_add() method
    # assuming self.client is the bot

    guild = self.client.get_guild(payload.guild_id)
    channel = guild.get_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)

但是,对于您的情况,应该使用BrainDeads建议