Messengers(Telegram,Viber,Discord)
Work with bots in Stealth realized with messengers bots technology.
At then moment has been done realization of Telegram, Viber and Discord.
’’ ‘Skype’ ’’ can’t be done due to to technical reson
In the internal scripts (PS and PAX) there is a TMessenger class
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;
and 3 variables:
ViberMessenger : TMessenger;
TelegramMessenger : TMessenger;
DiscordMessenger : TMessenger;
Content of this classes you can inspect when debugging scripts in Editor window.
Token must be set before connection (Bot Registration instruction - [[Doc:RU/Manual/Reference/Messengers/BotRegistration]] )
Warning! For correct work of Viber Ngrok needed, if Ngrok not installеd - Stealth will offer you to download it and put to Stealth folder.
WARNING! In external scripts first parameter in evMessengerEvent is not a TMessenger object, but messenger code - 1 is telegram, 2 - viber, 3 - Discord
Big example for messenger all-side using
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 + '), ChatID: ' + SenderId + ' :' + EventMsg);
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');
if not DiscordMessenger.Connected then
begin
DiscordMessenger.Token := 'your_token_here';
DiscordMessenger.Connected := True;
end;
DiscordMessenger.SendMessage('hello from Stealth DiscordBot!','channel_id_here');
While True do
begin
wait(200);
end;
end.
Example 2, external script on 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;
3:
case EventCode of
0 : AddToSystemJournal('Discord' + ' Connected');
1 : AddToSystemJournal('Discord' + ' Disconnected');
2 : begin
AddToSystemJournal('Discord' + ' Message incoming from "' + SenderNickName
+ '" (SenderId: ' + SenderId + ') on ChannelId '
+ ChatId + ' : ' + EventMsg);
// DiscordMessenger.SendMessage('response from Stealth : ' + EventMsg,ChatId)
end;
3 : AddToSystemJournal('Discord' + ' 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');
Script.SetEventProc(evMessengerEvent, @MessengerEventHandler);
Script.DiscordMessenger.Connected := False;
if not Script.DiscordMessenger.Connected then
begin
Script.DiscordMessenger.Token := 'your_token_here';
Script.DiscordMessenger.Connected := True;
end;
Script.DiscordMessenger.SendMessage('hello from Stealth DiscordBot!','channel_id_here');
While True do
Script.wait(200);
end.
ID of user-sender can be easy taken - just send any message from this user to our bot, connected by Stealth with script from examples. In Sysjournal will come message like
17:27:37:759 [Test - Test]: Telegram Message incoming from “Vizit0r” (SenderId: 435486649) : testtest
where 435486649 is sender ID. (id - fake, given for example).
For Discord you should use not userID, but channel ID. Can be taken from receiving message as well.
Example 3, external script on Python:
MSG = 'Event test'
ID = 0 # 1-Telegram, 2-Viber, 3-Discord, 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()
Example 4, external script on C#
Stealth _s = Stealth.Default;
_s.Viber.Connected += (o, e) => { _s.Journal.AddToSystemJournal("Viber connected"); };
_s.Viber.Disconnected += (o, e) => { _s.Journal.AddToSystemJournal("Viber disconnected"); };
_s.Viber.IncomingMessage += (o, e) =>
{
_s.Journal.AddToSystemJournal($"Viber incoming from '{e.SenderNickname}' (SenderId: { e.SenderId}): {e.Message}");
_s.Viber.SendMessage($"Viber response from Stealth: {e.Message}", e.SenderId);
};
_s.Viber.Error += (o, e) => { _s.Journal.AddToSystemJournal($"Viber error: {e.Message}"); };
_s.Telegram.Connected += (o, e) => { _s.Journal.AddToSystemJournal("Telegram connected"); };
_s.Telegram.Disconnected += (o, e) => { _s.Journal.AddToSystemJournal("Telegram disconnected"); };
_s.Telegram.IncomingMessage += (o, e) =>
{
_s.Journal.AddToSystemJournal($"Telegram incoming from '{e.SenderNickname}' (SenderId: { e.SenderId}): {e.Message}");
_s.Telegram.SendMessage($"Telegram response from Stealth: {e.Message}", e.SenderId);
};
_s.Telegram.Error += (o, e) => { _s.Journal.AddToSystemJournal($"Telegram error: {e.Message}"); };
_s.Viber.Connect(VIBER_TOKEN);
_s.Telegram.Connect(TELEGRAM_TOKEN);