Php 不一致API错误#40001未经授权

Php 不一致API错误#40001未经授权,php,discord,php-curl,Php,Discord,Php Curl,我通过OAuth2URL对我的机器人进行身份验证(https://discordapp.com/api/oauth2/authorize?client_id=398437519408103444&permissions=59392&scope=bot) 我想将消息发送到discord服务器上的频道 代码: 但答案是: array(2) { ["code"]=> int(40001) ["message"]=> string(12) "Unauthorized" }

我通过OAuth2URL对我的机器人进行身份验证(
https://discordapp.com/api/oauth2/authorize?client_id=398437519408103444&permissions=59392&scope=bot

我想将消息发送到discord服务器上的频道

代码:

但答案是:

array(2) {
  ["code"]=>
  int(40001)
  ["message"]=>
  string(12) "Unauthorized"
}
API链接:

POST/channels/{channel.id}/messages

在使用此终结点之前,必须至少连接到网关并使用网关标识一次

向公会文本或DM频道发布消息。如果在公会频道上操作,此终结点要求当前用户具有“发送消息”权限

您的机器人是否具有该频道中的“发送消息”权限

没有?好的,转到频道设置并给予它权限

您的机器人是否至少与网关连接并标识了一个网关

没有?嗯,你可能应该去做,最好用一个已经为它做了


如果尽管尝试了上述解决方案,但此问题仍然存在,则可能是您的POST请求有误。

从文档中我可以看出;Discord希望bot登录到Discord服务器并首先显示其存在。只有这样,Discord才允许Bot使用其API向同一服务器发送消息

文档不是很清楚——在我看来,Bot无法按常规登录到服务器。这是因为机器人没有电子邮件地址。它只有一个特殊的标记

我想Discord提供的一个内置库应该能够做到这一点。不管我能说什么,你的机器人需要先找到它必须连接的Websocket网关

这个API调用有效,它确实为您提供了网关端点

但我不擅长websocket连接(wss://protocol),所以我跳过了这一步,而且我很不耐烦

幸运的是,我找到了一条解决问题的途径。就是从这里下载基于电子的Windows可执行文件“LiveBot”:

警告:这是一个非常大的ZIP文件,因为基于电子的可执行文件通常都是这样。只需在Windows计算机上启动LiveBot;并在那里提供您的机器人令牌

这将使Bot像服务器上的普通用户一样工作。一旦Discord知道您的机器人能够连接到它所连接的服务器;然后在这一点之后,它将允许发送消息

我的经验表明,如果您的机器人至少一次无法连接到您的服务器,您将始终收到40001错误代码。就像你描述的那样

这不是一种程序化的方法,但对我来说很有效。因为只需要一个连接,这就是我所做的。之后,我能够使用RESTAPI使用普通的旧Curl发送直接消息;而不是一个不和谐的库


希望您也能这样做。

事实证明,您只需要使用auth令牌连接到网关一次,它应该允许从该点开始通过api发送消息。从那时起,我使用链接中的html文件一劳永逸地完成了这项工作

让我想到这一点的最初github问题就在这里

阅读或更好。特别是:
4001未知操作码您发送了无效的网关操作码或操作码的无效负载。不要那样做
array(2) {
  ["code"]=>
  int(40001)
  ["message"]=>
  string(12) "Unauthorized"
}