MyChat Scripts: функция mSendPrivateMessage, отправка приватного сообщения

MyChat Scripts: функция mSendPrivateMessage, отправка приватного сообщения

"Для разработчиков", "Серверные скрипты", "Описание функций", "Сообщения", "mSendPrivateMessage".

 

Отправить приватное сообщение от имени одного пользователя — другому.

 

Синтаксис

function mSendPrivateMessage(iUINFrom, iUINTo: integer; sMsg: string; iMsgType: integer): integer;

 

Параметры и возвращаемые значения

Параметр

Тип

Значение

iUINFrom

integer

идентификатор отправителя. Можно использовать встроенного робота (UIN 0) или любого другого зарегистрированного на сервере пользователя;

iUINTo

integer

идентификатор получателя сообщения (UIN);

sMsg

string

текст сообщения. Можно использовать переносы строк (CRLF);

iMsgType

integer

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

 

Результат функции

Результат

Значение

>0

всё Ок, сообщение успешно отправлено, результат — индекс сообщения в базе данных;

-1

UIN отправителя не существует;

-2

UIN получателя не существует;

-3

сообщение не может быть пустым;

-4

сообщение не может быть отправлено самому себе.

 

Пример

Функция "повешена" на обработчик OnPrivateRequest. При попытке открытия приватного разговора скрипт определяет, что пользователь пришёл с сайта, из чата WEB-поддержки.

 

Если это так — скрипт отправляет приватное сообщение с информацией, с какого IP адреса пришёл этот человек, а также User Agent браузера, язык локали, операционную систему и реферальную страницу, с которой был переход.

 

Код скрипта реально используется в чате поддержки компании Network Software Solutions.

function OnPrivateRequest(iCID, iUIN, iUINTo, iRole, iRoleReciever, iTask: integer): boolean;
var
  s,
  sCountry, sCity, sGeoIP,
  sIP,                            // remote user IP address
  sWEBSupportBrowserInfo,         // WEB-browser info
  sWEBSupportRefLink,             // reflink
  sWEBSupportsSysLanguage,        // browser locale language
  sWEBSupportsPlatformOS: string; // user's operation system
  iCIDTo: integer;
begin
  SetScriptTimeOut(10000);
  
    if (mGetRoleNameByID(iRole) = 'WEB guests') and mIsUINOnline(iUINTo) then begin
      sIP                     := mGetCIDAttribute(iCID, 'IP');
      sWEBSupportBrowserInfo  := mGetCIDAttribute(iCID, 'UserAgent');
      sWEBSupportRefLink      := mGetCIDAttribute(iCID, 'Reflink');
      sWEBSupportsSysLanguage := mGetCIDAttribute(iCID, 'Lang');
      sWEBSupportsPlatformOS  := mGetCIDAttribute(iCID, 'OS');
    
      s := '---------------' + CRLF + 
           '-=WEB Support=-' + CRLF + CRLF + 
           'IP: ' + sIP;
      
        if length(sWEBSupportBrowserInfo) > 0 then s := s + CRLF + 'Browser: ' + sWEBSupportBrowserInfo + CRLF;
        if length(sWEBSupportRefLink) > 0 then s := s + CRLF + 'Reflink: ' + sWEBSupportRefLink;
        if length(sWEBSupportsSysLanguage) > 0 then s := s + CRLF + 'System language: ' + sWEBSupportsSysLanguage;
        if length(sWEBSupportsPlatformOS) > 0 then s := s + CRLF + 'OS: ' + sWEBSupportsPlatformOS;
          
      sGeoIP   := GeoIPGetQuickInfo(sIP);
      sCountry := Fetch(sGeoIP, '|');
      sCity    := sGeoIP;
        
        if length(sCountry) > 0 then begin
          sGeoIP := sCountry;
            
            if length(sCity) > 0 then sGeoIP := sGeoIP + ', ' + sCity;
              
          s := s + CRLF + CRLF + sGeoIP;  
        end else sGeoIP := '';  
      
      mSendPrivateMessage(iUIN, iUINTo, s, 21);
  
      s := mGetCIDSByUINAndClientType(iUINTo, 'win32');
        
        while length(s) > 0 do begin
          iCIDTo := StrToInt(Fetch(s, ','));
          mSendCustomMsgToClientConsoleByCID(iCIDTo, 'WEB support session from UIN ' + inttostr(iUIN), 'newmsg', false, true, 78);
        end;  
    end;

  result := true;
end;

begin

end.

 
Результат работы скрипта

Отправка приватного сообщения из серверного скрипта в MyChat Client (win32)
 

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

CRLF

Fetch

GeoIPGetQuickInfo
IntToStr

Length

mGetCIDAttribute

mGetCIDSByUINAndClientType

mGetRoleNameByID

mIsUINOnline

mSendCustomMsgToClientConsoleByCID

SetScriptTimeOut