Событие, возникающее в момент приёма сервером приватного сообщения от одного пользователя — другому. При отправке приватного сообщения с помощью функции mSendPrivateMessage событие не возбуждается, чтобы избежать зацикливания.

 

Шаблон события

function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
begin
  // your own code
  result := true;
end;
begin
end.

Вместо комментария может быть любой ваш код.

 

Описание параметров

Параметр

Тип

Значение

iCID

integer

Connection ID клиента, уникальный сеансовый идентификатор в онлайн-структуре сетевых подключений к серверу;

iUIN

integer

уникальный идентификатор отправителя сообщения (число >=0);

iUINTo

integer

уникальный идентификатор получателя сообщения (число >=0);

iMsgType

integer

тип приватного сообщения;

sMsg

string

текст сообщения.

 

Возвращаемое значение

По умолчанию функция должна возвращать true, однако, если вы решаете "подавить" приватное сообщение, можно вернуть false, и тогда отправленное сообщение будет уничтожено и не отобразится ни у отправителя, ни у получателя.

 

Пример

const
  sHost     = 'mail.yourmailserver.com';
  sLogin    = 'support@yourmailserver.com';
  sPassword = 'yoursecretpassword';  
  iPort     = 25;
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
  sEmailTo, sEmailFrom, sTextBody, sNameFrom, sNameTo: string;
begin
  result := true;
  
    if not mIsUINOnline(iUINTo) then begin
      sEmailTo := mGetUserPrimaryEmail(iUINTo);
      sEmailFrom := mGetUserPrimaryEmail(iUIN);
      
        if (length(sEmailTo)>0) and (length(sEmailFrom)>0) then begin
          sNameFrom := mGetUserFullNameByPreset(iUIN, 0);
          sNameTo := mGetUserFullNameByPreset(iUINTo, 0);
        
          sTextBody := FormatDateTime('[dd.mm.yyyy hh:nn:ss]', Now)+
                       ' '+
                       sNameFrom+
                       '> '+
                       mConvertMsgToPlainText(sMsg, iMsgType);
                         
          SendEmail(sHost, iPort, sLogin, sPassword, sEmailFrom, false, sEmailTo,
                    'Offline MyChat message for ' + sNameTo, sTextBody, 0, '');
        end;
    end;
end;
begin
end.

Скрипт отслеживает, если получатель приватного сообщения находится в офлайн (отключен от сети), то производится отправка копии сообщения на email этого человека. Все необходимые данные достаются из базы данных сервера MyChat.

 

Для корректной работы скрипта вам нужно правильно заполнить раздел констант параметрами вашего почтового сервера (host, login, password и port) по аналогии с любым почтовым клиентом.

 

Ещё посмотреть

FormatDateTime

mConvertMsgToPlainText

mGetUserFullNameByPreset

mGetUserPrimaryEmail

mIsUINOnline

Now

SendEmail