使用 XHR 请求将 Discord 嵌入发送到 Webhook
Posted
技术标签:
【中文标题】使用 XHR 请求将 Discord 嵌入发送到 Webhook【英文标题】:Send Discord Embed to Webhook with XHR Request 【发布时间】:2020-07-08 17:25:37 【问题描述】:我正在编写一个 chrome 扩展,其中嵌入应该被发送到一个不和谐的 webhook。在 chrome 扩展中,不能导入模块,所以我必须使用 XMLHttpRequests。
这是我的代码:
const el = document.getElementById("sendwebhook");
el.addEventListener("click", sendMessage, false);
function sendMessage()
var request = new XMLHttpRequest();
request.open("POST", "https://discordapp.com/api/webhooks/693222334567415919/dT2OrV7pQa8_MuiS3kmFRPBTD_lh1nfXVR04OeRS9YKGEVPZXp7cOListUBI-c-32HM7");
request.setRequestHeader('Content-type', 'application/json');
var params =
username: "My Webhook Name",
avatar_url: "https://pbs.twimg.com/profile_images/1214545814745300992/7OLFRhok_400x400.jpg",
content: "The message to send"
request.send(JSON.stringify(params));
不幸的是,我当前的代码只通过 webhook 发送消息,但我需要它发送一个 Rich Embed 通过看起来像这样的 webhook:
【问题讨论】:
在 JS 中发送“Rich Embed”是什么样的?您能否使用 Chrome 开发工具捕获成功发送的内容? 你当然可以在chrome扩展pages中使用模块,其中包括后台页面脚本(你只需要通过`"page"键声明它,example)。唯一不能运行模块的部分是内容脚本,因为它们在网页中运行。但是,如果您使用编译器/捆绑器,这一切都不是问题。 【参考方案1】:发送嵌入的正确方法是使用:
"embeds":["color": 0, "title": "title", "description": "description"]
要调整颜色,您需要将所需颜色的十六进制代码转换为十进制(并删除数字之间的任何“.”)。如果您是 Windows 用户,您可以使用 calc.exe 轻松完成此操作 如果你不是,有很多在线单位转换器可以做同样的事情。
<button onclick="sendMessage()">Send</button>
<script>
webhook_url = "your webhook's url";
function sendMessage()
var request = new XMLHttpRequest();
request.open("POST", $webhook_url);
request.setRequestHeader('Content-type', 'application/json');
var params =
username: "Sosi",
embeds:["color": 16711680,"title":"title text", "description":"description text"]
request.send(JSON.stringify(params));
</script>
【讨论】:
【参考方案2】:只需将嵌入添加到我的参数中:
var params =
username: "Jokz' Tools",
avatar_url: "https://pbs.twimg.com/profile_images/1243255945913872384/jOxyDffX_400x400.jpg",
embeds: [
title: title,
author:
'name': authorname,
'icon_url': authorimage,
,
description: descriptiontext,
footer:
'icon_url': 'https://pbs.twimg.com/profile_images/1243255945913872384/jOxyDffX_400x400.jpg',
'text': 'Embed Sender | @JokzTools',
,
color: 0xff0000,
timestamp: new Date(),
]
request.send(JSON.stringify(params));
【讨论】:
【参考方案3】:要获取 url,请转到:服务器设置 > webhook > 创建/编辑 webhook
function send()
var url = "see above";
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Content-type', 'application/json');
var myEmbed2 =
"author":
"name": "Birdie♫ 3",
"url": "https://www.reddit.com/r/cats/",
"icon_url": "https://i.imgur.com/R66g1Pe.jpg"
,
"title": "FINALLY!!!... bot embeds!",
"url": "https://google.com/",
"description": "Text message. You can use Markdown here. *Italic* **bold** __underline__ ~~strikeout~~ [hyperlink](https://google.com) `code`",
"color": 15258703,
"fields": [
"name": "Admins",
"value": "Day/Acti",
"inline": true
,
"name": "Helpers",
"value": "Wombat,Phaedra",
"inline": true
,
"name": "Use `\"inline\": true` parameter, if you want to display fields in the same line.",
"value": "okay..."
,
"name": "Thanks!",
"value": "You're welcome :wink:"
],
"thumbnail":
"url": "https://upload.wikimedia.org/wikipedia/commons/3/38/4-Nature-Wallpapers-2014-1_ukaavUI.jpg"
,
"image":
"url": "https://upload.wikimedia.org/wikipedia/commons/5/5a/A_picture_from_China_every_day_108.jpg"
,
"footer":
"text": "Woah! So cool! :smirk:",
"icon_url": "https://i.imgur.com/fKL31aD.jpg"
var params =
username: "Codepen BOT-03",
embeds: [ myEmbed2 ]
request.send(JSON.stringify(params));
// end send
【讨论】:
以上是关于使用 XHR 请求将 Discord 嵌入发送到 Webhook的主要内容,如果未能解决你的问题,请参考以下文章
Discord with Python:将嵌入发送到用户指定的特定频道
Discord.js 分片,如何使用 broadcastEval 发送嵌入消息?
使用 discord.py 将已经存在的 json 文件作为嵌入发送