Давненько я скрипты не писал, не знаю будет ли работать, но если что - доведем это чудище до ума
Короче есть защита от ботов интересная. Пишет время от времени в френд чат и задает глупые вопросы. Вот пример:
[Ссылки могут видеть только зарегистрированные пользователи. ]
С этой защитой столкнулся vlaha, ну и обратился с идеей написать скрипт обхода, чем и занялись. Вот какой скрипт получился:
Код:
var
base : array [0..99] of string;
a : integer;
name1, name2, msg1 : string;
Procedure OnDestroy;
Begin
gSys.SetTimer(1,0);
end;
Procedure OnCreate;
Begin
//==============================================
base[0]:='ноль';
base[1]:='один';
base[2]:='два';
//==============================================
//Позже дополню массив base
a:=-1;
name1:='';
name2:='';
msg1:='';
end;
procedure SendMsg(msg : string);
begin
if (gSys.isGS > 0) and (gSys.TrafType = 2) then begin
gSys.EnSendC(FormatPck('%cddss',[#$4A,0,10,#0,msg+#0]));
gSys.sleep(10);
end;
end;
function OnTimer(ntimer, count : integer) : boolean;
begin
result := true;
if a=-1 then begin SendMsg('Строка не распознана'); exit; end;
gSys.EnSendS(FormatPck('%css',[$CC, IntToStr(a), 'Bot catcher system']));
SendMsg('Ответили : '+IntToStr(a));
end;
function deco_base(str : string) : integer;
var
i : integer;
begin
result := -1;
for i:=0 to 99 do
if base[i]=str then begin result:=i; exit; end;
end;
function text_dec(msg1:string) : integer;
var
temp1, temp2 : string;
b : boolean;
begin
result := -1;
//Сколько будет сорок девять + двадцать девять?
//У вас есть 3 попытки и 5 минут, чтобы правильно ответить на вопрос.
//В случае 3х ошибок или по истечении времени, вы будете автоматически отправлены в тюрьму на 500 минут.
//Ответ введите цифрами.
temp1 := copy (msg1 , 1, pos ('?', msg1) );
temp1 := copy (temp1 , 1, 14 );
if (pos ('+', temp1)>1) then
begin
temp2:= copy (temp1, 1, pos('+', temp1)-1);
temp1:= copy (temp1, pos('+', temp1)+2, length(temp1)-2-pos('+', temp1));
result := deco_base(temp1)+deco_base(temp2);
end else
if (pos ('плюс' , temp1)>1) then
begin
temp2:= copy (temp1, 1, pos('плюс', temp1)-1);
temp1:= copy (temp1, pos('плюс', temp1)+2, length(temp1)-2-pos('плюс', temp1));
result := deco_base(temp1)+deco_base(temp2);
end else
if (pos ('-', temp1)>1) then
begin
temp2:= copy (temp1, 1, pos('-', temp1)-1);
temp1:= copy (temp1, pos('-', temp1)+2, length(temp1)-2-pos('-', temp1));
result := deco_base(temp2)-deco_base(temp1);
end else
if (pos ('минус' , temp1)>1) then
begin
temp2:= copy (temp1, 1, pos('минус', temp1)-1);
temp1:= copy (temp1, pos('минус', temp1)+2, length(temp1)-2-pos('минус', temp1));
result := deco_base(temp2)-deco_base(temp1);
end;
end;
begin
if (_gFromServ) and (_gBuff[3]=#$FD) then
begin
ScanPck5(_gBuff,8,'sss', name1, name2, msg1, nil, nil);
if name1='Bot catcher system'+#0 then //возможно без +#0
begin
SendMsg('Активация');
a:=text_dec(msg1);
gSys.SetTimer(1,3000);
end;
end;
end.
Ниже vlaha выложит дополнение массива возможных чисел. Протестирует скрипт и дополнит его если что
Понимаю что алгоритм реализации распознавания вопроса глуп, но я не придуал более оптимальная варианта чем атака в лоб)
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
[ Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ]
[ Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ][ Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). ]
==============>[[Ссылки могут видеть только зарегистрированные пользователи. ]]<==============