x11

Пользователи
  • Публикаций

    764
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

x11 стал победителем дня 24 октября

x11 имел наиболее популярный контент!

Информация о x11

  • Звание
    Продвинутый пользователь
  • День рождения 01.01.1978

Информация

  • Пол
    Мужчина
  • Город
    Kharkiv

Посетители профиля

891 просмотр профиля
  1. вряд ли исходники откроют, но на гитхабе есть штук 20 примеров
  2. Правда в самом приложении используются другие жабьи обёртки, типа leo lin и bolts framework. Ну т.е. от самой FMX и Delphi ничего кроме компилятора и IDE. Печально, что Idera не развивает и забросила FMX.
  3. На просторах sql.ru нашёл ссылку на приложение kiskis на Delphi/FMX. Что-то типа мессенджер+инстаграм. https://youtu.be/WEsEhGfrW-g Alcinoe is a library visual and non-visual components for Delphi. https://github.com/Zeus64/alcinoe
  4. Начинает доходить, как скачать, переданные боту картинки. У TItgMessage есть свойство "&Type", не знаю, зачем разработчики сделали с "&". Этот "TItgMessage.&Type" определяет тип сообщения: картинка, видео, контакт и т.д. И вот в событии tgReceiverUI.OnUpdate можно определить тип сообщения: if Assigned(AUpdate.message) then begin case AUpdate.message.&Type of TtgMessageType.Photo: ReceivePhoto(AUpdate.message.Photo); end;// case end; обрабатываем массив полученных фото procedure TForm1.ReceivePhoto(Photos: TArray<TelegAPi.Types.ItgPhotoSize>); Var PhotoSize: TelegAPi.Types.ItgPhotoSize; tgFile: ItgFile; FileUrl: string; begin for PhotoSize in Photos do begin tgFile := TelegramBot1.GetFile(PhotoSize.FileId); if tgFile.CanDownload then begin FileUrl := tgFile.GetFileUrl(TelegramBot1.Token); Memo1.Lines.Add('ReceivePhoto, FileUrl: ' + FileUrl);// получаем прямую https-ссылку на картинку jpg. end; end; end; Дальше пока не разобрался с методом скачивания. То ли у библиотеки уже есть встроенные методы скачивания, то я сам должен скачать. Поискал по исходникам слово Download - ничего такого не нашёл
  5. x11

    Непонятный LiveBinding Object

    Я не смотрел проект и буду подсказывать, как. Просто напишу, что LiveBinding - тормознутая и глючная технология. Разработчики так и не довели её до ума. Если есть возможность, лучше отказаться от LiveBinding.
  6. А как получить фото из канала и из личного сообщения, есть примеры?
  7. Разобрался. когда бот отправляет личное сообщение пользователю, то нужно заполнять только ID, а когда сообщение в канал, то - имя. Пользователю: UserLink.ID := StrToIntDef64(edUserId.Text, 0); В канал UserLink.Username := edUserName.Text; Для отправки сообщения в канал можно в качестве ID подставить отрицательное значение chat_ID, у каналов всегда оно отрицательное. Т.е. в любом случае можно всегда заполнять только UserLink.ID В документации Телеграм этого нет https://tlgrm.ru/docs/bots/api#sendmessage
  8. Проблему решил следующим путём. 1. Нужно проверить, что в поле Domain нет токена, т.е. чтобы было только значение URL "https://api.telegram.org/bot" без кавычек, конечно же. 2. Не нужно заполнять UserName, вот код отправки личного сообщения от бота - пользователю: procedure TForm1.btnSendMsgClick(Sender: TObject); Var UserLink: TtgUserLink; begin UserLink.ID := StrToIntDef64(edUserId.Text, 0); // UserLink.Username := edUserName.Text; if UserLink.ID = 0 then begin Memo1.Lines.Add('SendMsg: ' + edUserId.Text + ' is not valid integer value'); exit; end; TelegramBot1.SendMessage(UserLink, edMsgText.Text); end; т.е. я закоментировал "UserLink.Username := edUserName.Text;", как видите. То ли это баг, то ли фича, то ли фиг его знает. Если раскомментировать строку "UserLink.Username := edUserName.Text;", то сообщение будет передаваться вот такой ссылкой: "https://api.telegram.org/bot<token>/sendMessage?chat_id=@channelusername&text=12345" и по такой ссылке я получаю ошибку: 400 bad request: chat not found, хотя согласно документации https://tlgrm.ru/docs/bots/api#sendmessage - (см. снимок) написано, что можно отправлять @имя_юзера_канала, кому предназначено сообщение. Но когда я закоментировал строку, то библиотека создала вот такой URL: "https://api.telegram.org/bot<token>/sendMessage?chat_id=12345678&text=12345" т.е. в параметр chat_id библиотека подставила уже ID пользователя-получателя (12345678). И тогда бот успешно отправил сообщение.
  9. В структуре TtgUserLink я указываю только UserID получателя. Или здесь нужно заполнять обязательно ещё и Username? Вот сейчас такой код: procedure TForm1.btnSendMsgClick(Sender: TObject); Var UserLink: TtgUserLink; begin UserLink.ID := StrToIntDef(edUserId.Text, 0); if UserLink.ID = 0 then begin Memo1.Lines.Add('SendMsg: ' + edUserId.Text + ' is not valid integer value'); exit; end; TelegramBot1.SendMessage(UserLink, edMsgText.Text); end;
  10. Я так понял, старт отправляется автоматически, как только пользователь "входит" в чат к боту или пишет первое сообщение (не знаю), т.к. я увидел, что боту пришло /start, хотя пользователь ничего ещё не писал. Далее... В общем, /start приходит боту автоматически или пользователь сам отправляет. И мой бот должен что-то отправить в ответ пользователю? Вот здесь проблема. https://tlgrm.ru/docs/bots#global-commands как реализовать ответ правильно, если при отправке любого сообщения, я получаю 401?
  11. потом я беру этот "from":{"id":63618xxxx и хочу отправить этому пользователю, т.е. себе, личное сообщение, в итоге получаю 401
  12. да, я данные из чата и личные сообщения от пользователей получаю вот, RAW из события OnUpdate
  13. а для отправки сообщения от бота - пользователю Телеграма, нужны какие-то специфические ключи? или перед отправкой я должен что-то выполнить? выполняю: TelegramBot1.SendMessage(UserLink, edMsgText.Text); получаю: (401) Unauthorized: wrong token specified
  14. Перепроверил. Извиняюсь. Беру слова обратно - OnOpdates срабатывает.
  15. По идее, OnUpdates в любом случае должно срабатывать, даже если приходит одно сообщение. Только там будет количество = 1. Я так понимаю, что у вас запрограммировано только есть > 1?