当我的机器人发送时,Discord 没有嵌入链接

问题描述

我的代码运行良好,机器人发送了链接,但 Discord 无法识别它,也没有嵌入它.当我自己复制并粘贴它时,它会将其识别为链接并嵌入图像.这是我的代码:

My code works fine and the bot sends the link, but Discord does not recognize it as one and does not embed it. When I copy and paste it myself, it then recognizes it as a link and embed the image. Here is my code:

import requests
from bs4 import BeautifulSoup


if message.content.startswith(".dog"):

    response = requests.get("https://dog.ceo/api/breeds/image/random")
    soupRaw = BeautifulSoup(response.text, 'lxml')
    soupBackend = str(soupRaw).split("message")
    soup2 = soupBackend[1]
    soup3 = soup2[3:]
    soup = soup3[:-20]

    await bot.send_message(message.channel, soup)

这里是一个例子:https://imgur.com/m9GM2wQ

有谁知道如何让它在我的机器人发送链接时嵌入链接?感谢您的帮助!

Does anyone know how to make it embed the link when it is sent by my bot? Thanks for the help!

我不是在尝试发送嵌入消息,而是在尝试发送将被 Discord 嵌入的链接,如我的示例所示.这不是重复的问题.

I am not trying to send an embedded message, I am trying to send a link that will BE embedded by Discord, as shown in my example. This is not a duplicate question.


解决方案

很晚的答案,但如果有人在稍后查看此答案;我认为问题在于您的变量 soup 包含每个正斜杠的转义字符(反斜杠),例如https:\/\/images.dog.ceo\/breeds\/maltese\/n02085936_4480.jpg.

Very late answer, but if anyone is viewing this answer for later; I believe the problem is that your variable soup contains escape characters (backward slashes) for every forward slash, e.g. https:\/\/images.dog.ceo\/breeds\/maltese\/n02085936_4480.jpg.

将此作为消息发送(即使作为普通用户)会显示链接的外观,但不会自动为其创建嵌入.您可以使用函数 soup.replace("\", "") 替换反斜杠.

Sending this as a message (even as a regular user) shows the link as it should look, but does not automatically create an embed for it. You can replace the backslashes with the function soup.replace("\", "").

然而,我会推荐一种完全不同的方法,因为 response 对象有一个 .content 属性,它是 json 格式,可以很容易地被解析,并用作 pythondict,使用内置的 import json 库(它会自动为您留下转义码,您不必担心 response.text 的字符串长度).

I would however recommend a completely different approach as the response object has a .content attribute which is in json format and can easily be parsed, and used as a python dict, using the builtin import json library (It will automatically leave the escape codes for you and you don't have to worry about string length for response.text).

soup = json.loads(response.content).get("message") 应该可以解决问题.

相关文章