initial commit
This commit is contained in:
84
statusbot.pas
Normal file
84
statusbot.pas
Normal file
@@ -0,0 +1,84 @@
|
||||
program DiscordCreateThread;
|
||||
{$MODE OBJFPC}
|
||||
{$H+} // Enable AnsiString
|
||||
uses
|
||||
SysUtils, Classes, fphttpclient, opensslsockets, DateUtils;
|
||||
|
||||
const
|
||||
DISCORD_API = 'https://discord.com/api/v10';
|
||||
|
||||
function GetEnvDef(const Name, Def: string): string;
|
||||
begin
|
||||
if GetEnvironmentVariable(Name) = '' then
|
||||
GetEnvDef := Def
|
||||
else
|
||||
GetEnvDef := GetEnvironmentVariable(Name);
|
||||
end;
|
||||
|
||||
function GetArchiveDuration: Integer;
|
||||
begin
|
||||
GetArchiveDuration := StrToIntDef(GetEnvironmentVariable('ARCHIVE_DURATION'), 10080);
|
||||
end;
|
||||
|
||||
function GetThreadName: string;
|
||||
var
|
||||
Base: string;
|
||||
begin
|
||||
Base := GetEnvironmentVariable('THREAD_NAME');
|
||||
GetThreadName := Base + ' (' + FormatDateTime('yyyy-mm-dd', Now) + ')';
|
||||
end;
|
||||
|
||||
function HttpPost(const URL, Body, Token: string): string;
|
||||
var
|
||||
Client: TFPHttpClient;
|
||||
BodyStream, ResponseStream: TStringStream;
|
||||
begin
|
||||
Client := TFPHttpClient.Create(nil);
|
||||
BodyStream := TStringStream.Create(Body);
|
||||
ResponseStream := TStringStream.Create('');
|
||||
try
|
||||
Client.AddHeader('Authorization', 'Bot ' + Token);
|
||||
Client.AddHeader('Content-Type', 'application/json');
|
||||
Client.RequestBody := BodyStream;
|
||||
Client.Post(URL, ResponseStream);
|
||||
HttpPost := ResponseStream.DataString;
|
||||
finally
|
||||
ResponseStream.Free;
|
||||
BodyStream.Free;
|
||||
Client.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
Token, ChannelID, ThreadMessage: string;
|
||||
ThreadBody, MessageBody, Response: string;
|
||||
ThreadIDStart, ThreadIDEnd: Integer;
|
||||
ThreadID: string;
|
||||
|
||||
begin
|
||||
Token := GetEnvironmentVariable('DISCORD_BOT_TOKEN');
|
||||
ChannelID := GetEnvironmentVariable('DISCORD_CHANNEL_ID');
|
||||
ThreadMessage := GetEnvironmentVariable('THREAD_MESSAGE');
|
||||
|
||||
ThreadBody := Format(
|
||||
'{"name":"%s","auto_archive_duration":%d}',
|
||||
[StringReplace(GetThreadName,'"','\"',[rfReplaceAll]), GetArchiveDuration]
|
||||
);
|
||||
|
||||
Response := HttpPost(DISCORD_API + '/channels/' + ChannelID + '/threads', ThreadBody, Token);
|
||||
|
||||
// egyszerű parsing az id kinyeréséhez
|
||||
ThreadIDStart := Pos('"id":"', Response);
|
||||
if ThreadIDStart > 0 then
|
||||
begin
|
||||
Inc(ThreadIDStart, 6);
|
||||
ThreadIDEnd := Pos('"', Response, ThreadIDStart);
|
||||
ThreadID := Copy(Response, ThreadIDStart, ThreadIDEnd - ThreadIDStart);
|
||||
|
||||
if ThreadID <> '' then
|
||||
begin
|
||||
MessageBody := Format('{"content":"%s"}',[StringReplace(ThreadMessage,'"','\"',[rfReplaceAll])]);
|
||||
HttpPost(DISCORD_API + '/channels/' + ThreadID + '/messages', MessageBody, Token);
|
||||
end;
|
||||
end;
|
||||
end.
|
||||
Reference in New Issue
Block a user