delphi 通过HTTP授权Discord机器人?

pod7payv  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(130)

是否可以通过Indy的TIdHTTP组件在Discord中授权机器人?
有一个向客户端发送消息的很好的例子,但不清楚如何为机器人输入令牌。

params: TStringStream;
begin
  params := TStringStream.Create('{"content": "Test", "username": "testname", "avatar_url": "https://i.imgur.com/ivUiaOr.png"}', TEncoding.UTF8);
  try
    httpclient1.Request.ContentType := 'application/json';
    httpclient1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36';
    httpclient1.Post('https://discordapp.com/api/webhooks/443763508073594880/r8Oba0ws7WeN-n57TeF6BF6CKFFjviov6XMrMVVDUY_G18zmmY7VUwZqCiAOs9nz-CyC', params);
  finally
    params.Free;
  end;

字符串

ruoxqz4g

ruoxqz4g1#

这是可能的,我已经做了它之前使用休息组件。
你需要通过一个auth头来传递bot令牌,如discord文档中所述。
因此,您需要做的就是在发布之前将其添加到IdHTTP报头中。

// Use Custom auth header
httpclient1.Request.BasicAuthentication := False

// Notice the spacing after "Bot"
httpclient1.Request.CustomHeaders.Add('Authorization: Bot ' + 'TOKEN HERE');

// User Agent
httpclient1.Request.UserAgent := 'MyBot (https://example.com,25)';

字符串

使用Rest组件而不是indy我已经为你做了一个要点,我每天使用这些代码来发送消息给不和谐。Send Message to discord using TRestClient
重要

discord机器人必须至少连接到websocket gateway一次。如果你最近刚刚创建了一个bot应用程序,而令牌还没有被用来将bot连接到网关,那么在你这样做之前,它不会接受任何API请求。
你还需要一个机器人的用户代理。不提供一个也会让他们拒绝API请求。

qcuzuvrc

qcuzuvrc2#

我试着发送消息,没有错误...我做错了什么(很抱歉,我用C++Builder编写,但它们的语法相同):

TStringList *param =  new  TStringList;
param->Add("{\"content\": \"Hello, World!\"}");
    
IdHTTP1->Request->ContentType = "application/json";
IdHTTP1->Request->CustomHeaders->AddPair("Authorization", "Bot MyToken");
IdHTTP1->Request->UserAgent   = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36";
IdHTTP1->Post("https://discord.com/channels/my_group/messages", param);
IdHTTP1->Disconnect();
    
delete param;

字符串

相关问题