MyChat Scripts: IntegrationTelegramGetMyChatUINByTelegramID, получить UIN пользователя по его TelegramID
Получить UIN зарегистрированного пользователя MyChat по его Telegram ID.
Обычно эта функция используется в связке с событием OnRequestByREST, чтобы отправить сообщение-ответ из Telegram в MyChat.
Синтаксис
function mIntegrationTelegramGetMyChatUINByTelegramID(sID: string): integer;
Параметры и возвращаемые значения
Параметр |
Тип |
Значение |
sID |
string |
идентификатор пользователя Telegram. |
Результат функции
-1 |
такой Telegram ID не зарегистрирован в базе; |
-2 |
ID найден, но пользователь MyChat либо не привязан к этому ID, либо ещё не активирован; |
>0 |
UIN пользователя MyChat, связанный с указанным пользователем Telegram. |
Пример
Обработка события OnRequestByRest, скрипт "Telegram" обрабатывает входящее сообщение, и если это не команда боту "/start", то считает, что это ответ и его нужно направить из Telegram конкретному MyChat пользователю.
function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
var
sFirstName, sLastName, sNickName, sTelegramID, sText, sData: string;
iResult, x, iUIN, iUINFrom: integer;
begin
sFirstName := '';
sLastName := '';
sNickName := '';
sTelegramID := '';
sText := '';
// get request data
JSONGetString(sBody, 'message.from.id', sTelegramID);
JSONGetString(sBody, 'message.from.first_name', sFirstName);
JSONGetString(sBody, 'message.from.last_name', sLastName);
JSONGetString(sBody, 'message.from.username', sNickName);
JSONGetString(sBody, 'message.text', sText);
// if user is connecting to the Telegram bot for the first time
if LowerCase(sText) = '/start' then mIntegrationTelegramAddUser(sTelegramID, sFirstName, sLastName, sNickName)
else begin // maybe user send reply message to the bot
iResult := JSONGetString(sBody, 'message.reply_to_message.entities[0].url', sData);
if iResult = 0 then begin
// get receiver's UIN
x := pos('?uin=', sData) + 5;
iUIN := StrToIntDef(copy(sData, x, pos('&', sData) - x), -1);
// get sender's UIN by user Telegram ID
iUINFrom := mIntegrationTelegramGetMyChatUINByTelegramID(sTelegramID);
// if sender and receiver are exists
if (iUIN <> -1) and (iUINFrom > 0) then begin
// multi-line text
sData := '[Telegram] ' + ReplaceString(sText, #10, CRLF, true, false);
// send private message into MyChat
mSendPrivateMessage(iUINFrom, iUIN, sData, 1, true);
end;
end;
end;
result := '{}';
end;
begin
end.
Результат работы скрипта
Отправка ответа из Telegram:
Получение сообщения в MyChat: