From Stealth Client

Jump to: navigation, search
Line 33: Line 33:
-
Внимание, во внешних скриптах первым параметром в evMessengerEvent приходит не объект TMessenger, а код мессенджера - 1 для телеграма, 2 - вайбер.
+
== Внимание, во внешних скриптах первым параметром в evMessengerEvent приходит не объект TMessenger, а код мессенджера - 1 для телеграма, 2 - вайбер. ==
 +
 

Revision as of 13:20, 7 March 2018

Мессенджеры

Работа с мессенджерами в стелсе построена на использовании ботов.

На текущий момент реализована поддержка Telegram и Viber.

Skype из-за технических ньюансов не получится встроить.

Discord - возможно будет встроен.

Во встроенных скриптах (PS и PAX) есть класс TMessenger

  TMessenger = class
  public
    procedure SendMessage(Msg, UserID : String); virtual;
    property MessengerName: string read GetMessengerName;
    property Connected : Boolean read fConnected write SetConnected default False;
    property Token : String read GetToken write SetToken;
  end;

и 2 переменных

  ViberMessenger : TMessenger;
  TelegramMessenger : TMessenger;

Эти 2 переменных и их свойства видны при отладке.


Перед подключением необходимо указать токен.


Внимание, во внешних скриптах первым параметром в evMessengerEvent приходит не объект TMessenger, а код мессенджера - 1 для телеграма, 2 - вайбер.

Большой пример работы с мессенджерами (внутренние скрипты):

Program New;
 
procedure MessengerEventHandler(Sender : TMessenger; SenderNickName : String; SenderId, ChatId : String; EventMsg : String; EventCode : Byte);
begin
  case EventCode of
    0 : AddToSystemJournal(Sender.MessengerName + ' Connected');
    1 : AddToSystemJournal(Sender.MessengerName + ' Disconnected');
    2 : begin
          AddToSystemJournal(Sender.MessengerName + ' Message incoming from "' + SenderNickName + '" (SenderId: ' + SenderId + ') : ' + EventMsg);
          Sender.SendMessage('response from Stealth : ' + EventMsg,SenderId)           
        end;
    3 : AddToSystemJournal(Sender.MessengerName + ' Error raised : ' + EventMsg);
  end;
end;
 
Begin
  SetEventProc(evMessengerEvent,'MessengerEventHandler');
 
 if not ViberMessenger.Connected then
  begin
    ViberMessenger.Token := 'your_token_here';
    ViberMessenger.Connected := True;
  end;
 
  ViberMessenger.SendMessage('hello from Stealth ViberBot!','receiver_id_here');
 
 
  if not TelegramMessenger.Connected then
  begin
    TelegramMessenger.Token := 'your_token_here';
    TelegramMessenger.Connected := True;
  end;
 
  TelegramMessenger.SendMessage('hello from Stealth TelegramBot!','receiver_id_here');
 
  While True do
  begin
    wait(200);
  end;
 
end.


Пример2, внешний скрипт на Delphi:

program Project2;
 
{$R *.res}
 
uses
  System.SysUtils,
  windows,
  stealth_script in '..\..\stealth_script.pas';
 
procedure MessengerEventHandler(MesID : Cardinal; SenderNickName : String;
SenderId, ChatId : String; EventMsg : String; EventCode : Byte);stdcall;
begin
  with Script do
  case MesID of
    0,1 :
    case EventCode of
      0 : AddToSystemJournal('Telegram' + ' Connected');
      1 : AddToSystemJournal('Telegram' + ' Disconnected');
      2 : begin
            AddToSystemJournal('Telegram' + ' Message incoming from "' + SenderNickName + '" (SenderId: ' + SenderId + ') : ' + EventMsg);
            TelegramMessenger.SendMessage('response from Stealth : ' + EventMsg,SenderId)
          end;
      3 : AddToSystemJournal('Telegram' + ' Error raised : ' + EventMsg);
    end;
 
    2:
    case EventCode of
      0 : AddToSystemJournal('Viber' + ' Connected');
      1 : AddToSystemJournal('Viber' + ' Disconnected');
      2 : begin
            AddToSystemJournal('Viber' + ' Message incoming from "' + SenderNickName + '" (SenderId: ' + SenderId + ') : ' + EventMsg);
            ViberMessenger.SendMessage('response from Stealth : ' + EventMsg,SenderId)
          end;
      3 : AddToSystemJournal('Viber' + ' Error raised : ' + EventMsg);
    end;
  end;
end;
 
Begin
  Script.SetEventProc(evMessengerEvent, @MessengerEventHandler);
  Script.ViberMessenger.Connected := False;
 
 if not Script.ViberMessenger.Connected then
  begin
    Script.ViberMessenger.Token := 'your_token_here';
    Script.ViberMessenger.Connected := True;
  end;
 
  Script.ViberMessenger.SendMessage('hello from Stealth ViberBot!','receiver_id_here');
 
 
  if not Script.TelegramMessenger.Connected then
  begin
    Script.TelegramMessenger.Token := 'your_token_here';
    Script.TelegramMessenger.Connected := True;
  end;
 
  Script.TelegramMessenger.SendMessage('hello from Stealth TelegramBot!','receiver_id_here');
 
  While True do
    Script.wait(200);
 
end.

ID юзера-получателя для отправки сообщений можно получить, просто отправив от него любое сообщение нашему боту, когда он подключен через стелс скриптом из примеров. Тогда в сисжурнале будет выдано 17:27:37:759 [Test - Test]: Telegram Message incoming from "Vizit0r" (SenderId: 435486649) : testtest где 435486649 и есть нужный ID. (id ненастоящий, дан для примера).


Пример3, внешний скрипт на Python:

MSG = 'Event test'
ID = 0  # 1-Telegram, 2-Viber, 0-default
TOKEN = 'your_token_here'
USER_ID = 'id'
 
 
def callback(*args):
    AddToSystemJournal('Callback args: ', args)
 
 
def main():
    AddToSystemJournal('Messenger test started')
    SetEventProc('evMessengerEvent', callback)
 
    MessengerSetToken(ID, TOKEN)
    AddToSystemJournal('Token set', MessengerGetToken(ID))
 
    AddToSystemJournal('Connecting...')
    MessengerSetConnected(ID, True)
    while not MessengerGetConnected(ID):
        Wait(100)
    else:
        AddToSystemJournal('Connected state: ', MessengerGetConnected(ID))
 
    AddToSystemJournal('Name is: ', MessengerGetName(ID))
 
    AddToSystemJournal('Sending message to {0}'.format(USER_ID))
    MessengerSendMessage(ID, MSG, USER_ID)
 
    AddToSystemJournal('Disconnecting...')
    MessengerSetConnected(ID, False)
 
    AddToSystemJournal('Done.')
 
 
if __name__ == '__main__':
    main()