Wednesday, 02 September 2020
  2 Replies
  1.5K Visits
  Subscribe
Hi, My discord bot sends a message to each new guild member when they join. I have a issue when trying to pass german or russian characters it gives a bad request but it works fine with english. Maybe a UTF 8 issue? I test with postman and it's all fine in postman. See code below and attachment.

Content that fails to send:

{
    "content": "[DE] Willkommen zum Offiziellen RSMfmx Discord. Um unseren Discord Server nutzen zu können, müssen wir uns zunächst vergewissern, dass Sie ein Kunde sind. Bitte antworten Sie auf diesen Bot nur mit Ihrem Lizenzschlüssel."
}

AND

{
    "content": "[RUS] Добро пожаловать в официальный Discord RSMfmx. Прежде чем Вы начнёте использовать наш сервер Discord, нам нужно убедиться, что Вы являетесь нашим клиентом. Пожалуйста, ответьте этому боту указав свой лицензионный ключ."
}



procedure TdmComponents.OnGuildMemberAdd(const aText: string);
begin
  try
    var jdata := TdJSON.Parse(aText);
    try
      var member: TGuildMember;

      member.Username := jdata['d']['user']['username'].AsString;
      member.PublicFlags := jdata['d']['user']['public_flags'].AsInteger;
      member.ID := jdata['d']['user']['id'].AsString;
      member.Discriminator := jdata['d']['user']['discriminator'].AsString;
      member.JoinedAt := jdata['d']['joined_at'].AsString;

      var aChannelID := '';

      var jdm := TdJSON.Parse(discordAPI.POST_Request('/users/@me/channels', '{"recipient_id": "' + member.ID + '"}'));
      var msges := TStringList.Create;
      try
        msges.LoadFromFile('.\msg\join.txt', TEncoding.UTF8);
        aChannelID := jdm['id'].AsString;

        for var msg in msges do
        begin
          var StringWriter := TStringWriter.Create();
          var Writer := TJsonTextWriter.Create(StringWriter);
          Writer.Formatting := TJsonFormatting.Indented;

          with Writer do
          begin
            WriteStartObject;
            WritePropertyName('content');
            WriteValue(msg);
            WriteEndObject;
          end;

          Writeln(StringWriter.ToString);
          discordAPI.POST_Request('/channels/' + aChannelID + '/messages', StringWriter.ToString);
          Writer.Free;
          StringWriter.Free;
        end;
      finally
        msges.Free;
        jdm.Free;
      end;
    finally
      jdata.Free;
    end;
  except
    on E: Exception do
    begin
      Writeln(E.Message);
    end;
  end;
end;

f1HP0W7ILG.png
Attachments (1)