【发布时间】:2023-03-07 08:27:02
【问题描述】:
当某个事件被触发时,我想通过谷歌应用脚本在不和谐频道中发送一条机器人消息,但我不知道从哪里开始。这甚至可能吗?如果没有,有没有办法通过github做到这一点?
编辑:我已经弄清楚如何获取 OAuth 令牌,现在如何让机器人发送消息?
【问题讨论】:
标签: javascript google-apps-script discord
当某个事件被触发时,我想通过谷歌应用脚本在不和谐频道中发送一条机器人消息,但我不知道从哪里开始。这甚至可能吗?如果没有,有没有办法通过github做到这一点?
编辑:我已经弄清楚如何获取 OAuth 令牌,现在如何让机器人发送消息?
【问题讨论】:
标签: javascript google-apps-script discord
我知道 OP 几乎不可能仍然需要这个答案,但我把它放在这里,以便其他在谷歌上搜索这个问题的人能够找到答案
var webhooks = {
test: "Obtain a webhook for the channel you'd like and put it here."
};
function sendMessage(message, channel)
{
if(webhooks.hasOwnProperty(channel))
var url = webhooks[channel];
else {
Logger.log("Error Sending Message to Channel " + channel);
return "NoStoredWebhookException";
}
var payload = JSON.stringify({content: message});
var params = {
headers: {"Content-Type": "application/x-www-form-urlencoded"},
method: "POST",
payload: payload,
muteHttpExceptions: true
};
var res = UrlFetchApp.fetch(url, params);
Logger.log(res.getContentText());
}
// to call and send a message
sendMessage("Hi!", "test");
这是我通常用于发送消息的方式。不幸的是,据我所知,无法从 webhook 接收触发器。
注意:以上答案引用 discord.js,与 Google Apps Script 不兼容
【讨论】:
首先,这是来自discord.js 的文档。
要让您的应用脚本与 Discord 通信,您可以查看External APIs
Google Apps 脚本可以与来自整个网络的 API 进行交互。这 指南展示了如何在脚本中使用不同类型的 API。
提供的文档中提供了示例。
查看这些有用的链接了解更多详情。
【讨论】:
超级简单。只需转到您的 Discord 频道,选择“编辑频道”>“Webhooks”。您为机器人命名并设置其个人资料图片。它会给你一个已经包含授权令牌的 webhook URL。 然后您只需发布到该公共 URL。 TADA,一条消息将出现在给定的频道中,由机器人发送。
function postMessageToDiscord(message) {
message = message || "Hello World!";
var discordUrl = 'https://discordapp.com/api/webhooks/labnol/123';
var payload = JSON.stringify({content: message});
var params = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
method: "POST",
payload: payload,
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(discordUrl, params);
Logger.log(response.getContentText());
}
来源:https://ctrlq.org/code/20563-post-message-to-discord-webhooks
【讨论】:
对于仍在寻找之前的答案但没有运气的人,比如我:
制作完我的message_string后,这个sn-p成功发送到我想要的频道的webhook:
// Send the message to the Discord channel webhook.
let options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
},
"payload": JSON.stringify({
"content": message_string
})
};
Logger.log(options, null, 2);
UrlFetchApp.fetch("your_webhook_url_here", options);
【讨论】: