
Вс сен 16, 2018 5:30 pm Вс сен 16, 2018 5:30 pm
Для примера я сделал обработку для IP адреса. Вы пишете роботу IP-адрес, а он в ответ — страну и город. Для этого была включена интеграция с GeoIP. В скрипте используется регулярное выражение для определения, что введённая строка — действительно текстовый IPv4-адрес.
Как это выглядит в редакторе скриптов:
Текст скрипта:
// ---------------------------------------
// Script created by Alexey Pikurov (UIN 1)
// 15.09.2018 14:23:27
// ---------------------------------------
const
BOT_VERSION = '1';
BOT_RELEASE_DATE = 'Sep 15, 2018';
IP_ADDRESS_REGEXP = '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' +
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' +
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' +
'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b';
var
bFlag: boolean;
sReplyText: string;
function GetGeoIPInfo(sIP: string): boolean;
var
sCountry, sTown, s: string;
begin
if RegExpIsMatch(sIP, IP_ADDRESS_REGEXP) then begin
s := GeoIPGetQuickInfo(sIP);
if length(s) = 0 then sReplyText := 'IP: ' + sIP + CRLF + 'unknown IP address (maybe local?)'
else begin
sCountry := Fetch(s, '|');
sTown := s;
if length(sTown) > 0 then sTown := ', ' + sTown;
sReplyText := 'IP: ' + sIP + CRLF + sCountry + sTown;
end;
result := true;
end else result := false;
end;
procedure BotHelp;
begin
sReplyText := '-=Elisa Bot=-' + CRLF +
'v.' + BOT_VERSION + ' / ' + BOT_RELEASE_DATE + CRLF + CRLF +
'? - справка по командам' + CRLF +
'<IP адрес> - узнать страну и город по адресу IPv4';
end;
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
var
sCmd: string;
begin
bFlag := true;
sReplyText := '';
// если получатель сообщения - встроенный робот Elisa с UIN = 0
if iUINTo = 0 then begin
// получить текст команды
sCmd := UpperCase(mConvertMsgToPlainText(sMsg, iMsgType));
if GetGeoIPInfo(sCmd) then bFlag := false // если это IP-адрес
else begin
BotHelp; // показываем справку
bFlag := false;
end;
end;
// если команда была обработана, то "гасим" исходное сообщение
// и отправляем новое, от имени встроенного бота Elisa с UIN = 0
if not bFlag then
mSendPrivateMessage(0, iUIN, sReplyText, 1);
result := bFlag;
end;
begin
end.
Как это выглядит в MyChat Client?
Чат со мной