python-3.x Discord.py,有什么方法可以编辑webhook发送的消息吗?

wfveoks0  于 2023-06-07  发布在  Python
关注(0)|答案(4)|浏览(151)

我目前正在做一个建议系统,但我有一个问题,我不知道如何编辑一个消息(嵌入)通过webhook发送,这是我的代码:

async def suggestion(ctx):
    async with aiohttp.ClientSession() as session:
        webhook = Webhook.from_url('...', adapter=AsyncWebhookAdapter(session))
        embed = discord.Embed(color=color)
        embed.add_field(name="Nouvelle suggestion !", value=ctx.message.content.lstrip(f"{prefix}suggest"))
        embed.set_footer(text=f"""{ctx.message.author} • {datetime.now().strftime("%d %b %Y %H:%M:%S")}""",
                         icon_url=str(ctx.message.author.avatar_url))
        await webhook.send(embed=embed, username=ctx.author.name, avatar_url=ctx.author.avatar_url)

对于添加React:

@bot.event
async def on_message(message):
    if message.channel.id == 650397901893140481 and message.author.id not in [296687703851008002, 639138362673987584, 632575363830120448]:
        await message.add_reaction("<:yes:710947936372129854>")
        await message.add_reaction("<:neutral:710949706296983603>")
        await message.add_reaction("<:no:710947944823652362>")

用于编辑消息:

@bot.command()
async def test(ctx, *args):
    message = await ctx.channel.fetch_message(args[0])
    embed = discord.Embed(color=color)
    embed.add_field(name="Nouvelle suggestion !", value=args[1])
    await message.edit(embed=embed)

错误:discord.ext.commands.errors.CommandInvokeError:命令引发异常:403 Forbidden(错误代码:50005):无法编辑由其他用户创作的邮件

0ve6wy6x

0ve6wy6x1#

也许这在你问这个问题的时候是不可能的,但现在是了。作为参考,我用Ruby做了一个例子,没有Python的例子,但它是一样的。最重要的部分是构建json并通过API发送它。

require 'discordrb/webhooks'

SECONDEN              = ARGV[0] || 3
WEBHOOK_URL           = "your discord webhook url"
WAIT                  = true
client                = Discordrb::Webhooks::Client.new(url: WEBHOOK_URL)
@my_builder           = Discordrb::Webhooks::Builder.new
@my_builder.content   = "test"
@my_builder.username  = 'discordrb' # you can use whatever
message               = client.execute(@my_builder, WAIT).body
message_id            = JSON.parse(message)["id"]
while true
  sleep SECONDEN
  @my_builder.content = Time.now().strftime("%H:%M:%S")
  RestClient.patch("#{WEBHOOK_URL}/messages/#{message_id}", @my_builder.to_json_hash.to_json, content_type: :json)
end

kkih6yb8

kkih6yb82#

我做了一个图书馆。一个不和谐的webhooks工具
名称:disWebhook

from DisWebhook import Message

url = "url"
# editing an existing message
mymsg = Message(url)
msg = mymsg.edit("Hello, World!")
print(msg)
# delete the message
#msg.delete()

编辑:研究后。在discord.py文档
discord.Webhook
您可以像普通消息一样编辑和删除。
我没有测试代码,但它看起来很好

# webhook
from discord import Webhook, AsyncWebhookAdapter
import aiohttp
import asyncio
async def foo():
    async with aiohttp.ClientSession() as session:
        webhook = Webhook.from_url('url-here', adapter=AsyncWebhookAdapter(session))
        mymassge = await webhook.send('Hello World', username='Foo')
        await asyncio.sleep(5)
        await mymessage.edit(content="the new content of the message")
        await asyncio.sleep(5)
        await mymessage.edit(content="going to delete this message after 5")
        await asyncio.sleep(5)
        await mymassge.delete()
jecbmhm3

jecbmhm33#

我为我之前回答中的错误信息道歉。
Webhooks没有编辑消息的能力--它们只能发送消息。这意味着如果你想给予人一种你已经编辑了一封邮件的错觉,你需要删除邮件,然后用新的内容重新发送。

参考文献:

  • discord.Webhook()
  • Discord docs - webhook-特别指出它们是“在Discord中向频道发布消息的低成本方式”,并且没有提到能够编辑消息。
  • Discord文档-编辑消息
nhaq1z21

nhaq1z214#

有可能;重要的是执行PATCH请求而不是POST请求。而不是webhook URL,用途:“WEBHOOK_URL/messages/MESSAGE_ID”消息ID可从从发送到webhook接收的返回消息对象中获得,当使用URL“WEBHOOK_URL?wait=true”
我花了很长时间才发现,但它是在PHP中,也许它对Python的工作方式不同。

相关问题