如何使用 discord.py 按 ID 删除特定消息
How to delete a specific message by ID using discord.py
我正在尝试使用消息的 ID 删除消息。我正在使用 discord.py。
逻辑流程
User sends command. example: !message hi
Bot deletes "!message hi" using User's message ID
Bot says "hi"
我已经弄清楚如何让它复制我的消息,但我很难让它删除它们。我不想说它会先删除消息,否则在繁忙的服务器上它可能无法工作。我想获取命令消息的 ID,然后使用它的 ID 删除它。
更新为 discord.py v1.2+
您应该使用 TextChannel.fetch_message
函数。
msg = await channel.fetch_message(message_id)
await msg.delete()
原答案(不再有效):
回答问题:要按 ID 删除消息,您必须获取消息对象(首选)或通过 client.http
(非首选)
第一个选项:查找邮件。
您可以使用Client.get_message
函数
msg = await client.get_message(channel, message_id)
或者,您的特定用例似乎只是删除已发送的消息,因此您可以只使用 on_message(msg)
提供的消息
收到消息后,您可以:
await client.delete_message(msg)
第二个选项:使用client.http
假设你知道频道的 ID,你可以简单地调用
await client.http.delete_message(channel_id, message_id)
这种方法虽然对删除任意位置的任意消息很有用,但如果获取消息是一种可行的选择,则不应使用。
要删除而不获取消息,请使用 TextChannel.delete_messages and construct a snowflake using discord.Object。
await channel.delete_messages([discord.Object(id=message_id)])
我正在尝试使用消息的 ID 删除消息。我正在使用 discord.py。
逻辑流程
User sends command. example: !message hi
Bot deletes "!message hi" using User's message ID
Bot says "hi"
我已经弄清楚如何让它复制我的消息,但我很难让它删除它们。我不想说它会先删除消息,否则在繁忙的服务器上它可能无法工作。我想获取命令消息的 ID,然后使用它的 ID 删除它。
更新为 discord.py v1.2+
您应该使用 TextChannel.fetch_message
函数。
msg = await channel.fetch_message(message_id)
await msg.delete()
原答案(不再有效):
回答问题:要按 ID 删除消息,您必须获取消息对象(首选)或通过 client.http
(非首选)
第一个选项:查找邮件。
您可以使用Client.get_message
函数
msg = await client.get_message(channel, message_id)
或者,您的特定用例似乎只是删除已发送的消息,因此您可以只使用 on_message(msg)
提供的消息
收到消息后,您可以:
await client.delete_message(msg)
第二个选项:使用client.http
假设你知道频道的 ID,你可以简单地调用
await client.http.delete_message(channel_id, message_id)
这种方法虽然对删除任意位置的任意消息很有用,但如果获取消息是一种可行的选择,则不应使用。
要删除而不获取消息,请使用 TextChannel.delete_messages and construct a snowflake using discord.Object。
await channel.delete_messages([discord.Object(id=message_id)])