Добрый.
Всё достаточно просто. Вам нужно событие
OnPrivateMessage и функция скрипт-языка
function mGetLastPrivateMessage(iUINFrom, iUINTo: integer): string;Я написал простой пример с обычным текстовым файлом. Файл выглядит так (одна строка, кодировка ASCII, Win1251):
Код: Выделить всёШ/К 4811230000694|32 ЖЕМЧУЖИНЫ 100г отбеливающ. з/паста
Т.е. сначала идёт код (в UpperCase), потом знак | и потом уже текст, который вы будете выводить. Но это так, для примера. Если в файле будут десятки тысяч строк, такой скрипт будет не эффективен, конечно. Но для примера сойдёт.
scriptexample.png
Текст скрипта:
Код: Выделить всёconst
sDataFile = 'c:\data\base.txt';
var
iUINFrom, iUINTo, iCount, i: integer;
sMsg, sData: string;
begin
// получаем последнее сказанное приватное сообщение
sMsg := UpperCase(mGetLastPrivateMessage(iUINFrom, iUINTo));
if iUINTo=0 then begin // если получатель - Elisa (UIN=0)
// смотрим, сколько в текстовом файле строк
iCount := GetTextFileLinesCount(sDataFile);
// идём по всему файлу в надежде встретить нужную нам строку
for i := 1 to iCount do begin
LoadLineFromFile(sDataFile, i, sData);
// если нашли
if pos(sMsg+'|', sData) = 1 then begin
delete(sData, 1, length(sMsg)+1);
// удаляем последнее приватное сообщение
mModifyLastPrivateMessage(iUINFrom, iUINTo, '');
// и отправляем пользователю новое сообщение от имени робота Elisa
mSendPrivateMessage(iUINFrom, sData);
end;
end;
end;
end.
В примере я предположил, что текстовый файл, откуда вы будете доставать данные, лежит в
c:\data\base.txt. В самом скрипте, когда сервер видит, что сообщение пришло роботу (UIN получателя равен нулю), обрабатывается текст запроса, и если в текстовом файле есть нужные данные, то сообщение, которое пришло к Элизе - удаляется и формируется нужный ответ. В приват придёт что-то вроде этого:
elisaresponse.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Team lead
Чат со мной