Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
ВладимирШаблий
Драсьте всем!

Извиняюсь за то, что еще не успел перелопатить форум в поисках ответа на свой вопрос. Подскажите плиз - имеется ли возможность приема сообщений через апишник? (В документации не нашел такого, но вдруг недокументировано))
Если есть такое - ткните сопаткой пжлст...
Аватара пользователя
Алексей Пикуров
Добрый день.

Документация, скриптовое событие OnRequestByREST.

Ловите запрос и делаете скриптом дальше то, что вам нужно. Переношу тему в раздел скриптов.
Аватара пользователя
ВладимирШаблий
Ниче се... Это получается - пишем "свой" апи? Круто...
Спасибо за подсказку, пошел курить мануалы))
Аватара пользователя
ВладимирШаблий
А подскажите плиз, каким методом можно получить в скрипт список сообщений определенного чата?
И можно ли установить таймаут ответа клиенту?

Вообще глобальная задача - внешней программой зависнуть в режиме long-polling на сервере и при появлении новых сообщений в определенном чате - их, соотстветственно программой забирать. Возможно такое?
Аватара пользователя
Алексей Пикуров
каким методом можно получить в скрипт список сообщений определенного чата?

Загрузки сообщений из истории в скриптах ещё нет.

Может, логичнее, сбрасывать интересующие сообщения в файл, например, а вы внешней программой просто будете их подбирать? Или перехватчик сообщений в скрипте, а MyChat сервер REST запросом сбросит сообщение, куда вам надо.
Аватара пользователя
ВладимирШаблий
Алексей Пикуров писал(а):Может, логичнее, сбрасывать интересующие сообщения в файл, например, а вы внешней программой просто будете их подбирать?

Хотелось бы без костылей по феншую и крайне желательно - в реалтайме. То есть в принципе даже не обязательна история, если б был метод "подхватывания" сообщений в реальном времени...
Алексей Пикуров писал(а):Или перехватчик сообщений в скрипте, а MyChat сервер REST запросом сбросит сообщение, куда вам надо.
Пока не понял о чем это (только начал разбираться с начинкой))
Аватара пользователя
Алексей Пикуров
Перехват приватного сообщения: OnPrivateMessage.

Отправка данных через REST: HTTP(s) Get/Post запросы.
Аватара пользователя
ВладимирШаблий
Алексей Пикуров писал(а):Перехват приватного сообщения: OnPrivateMessage.
Ага... Этим значт забираю сообщение и добавляю к примеру в массив...
Алексей Пикуров писал(а):Отправка данных через REST: HTTP(s) Get/Post запросы.

А этим (если я правильно понял) - "вебхучу" собранные данные к себе? Если так, то не очень подходит. т.к. поднять вебхук на стороне проги - проблематично...
Аватара пользователя
Алексей Пикуров
Не надо никуда добавлять. Схватили — и отправили сразу. В общем, сами решайте, я не знаю детально вашей задачи, что ваша программа может, а что — нет.

Можно даже email отправить :)
Аватара пользователя
ВладимирШаблий
Вот такая схема возможна?
tQeYL83.png
tQeYL83.png (18.24 КБ) Просмотров: 6498
Аватара пользователя
Алексей Пикуров
Это плохая схема, медленная и тормозящая будет. Правильно не спрашивать сервер периодически, а отправлять сообщение с самого сервера.

Можете на OnPrivateMessage отловить сообщение, сделать JSON и положить его в файл, например. А на RequestByRest смотреть, есть файл, и, если да — отдавать его и удалять файл на сервере.
Аватара пользователя
Алексей Пикуров
P.S. Можете для временного хранения использовать mDBStorageGetData/mDBStorageSetData. Не забудьте только удалять данные из базы. Ключ для доступа придумайте сами.
Аватара пользователя
ВладимирШаблий
Алексей Пикуров писал(а):Это плохая схема, медленная и тормозящая будет. Правильно не спрашивать сервер периодически, а отправлять сообщение с самого сервера.

Дык вроде ж привел классическую схему петли лонгполинга, по которой работает множество чатов/мессенждеров... Сервер вешает клиента в "безответное" соединение в отдельном потоке на таймаут 20-100 секунд. При появлении сообщений - сервер [мгновенно] отдает клиенту контент и сбрасывает соединение (клиент в свою очередь его забирает и выполняет новый аналогичный запрос для "следующей порции"). Если на сервере ничего не появилось - просто выполняется сброс коннекта, клиент переподрубается и далее по кругу.
А через какую-то глобальную переменную нет возможности..? Если честно - не очень по душе затея с обменом через файл или базу... Давеча костылил нечто подобное на Pascal Script - в нем правда был объект TStringList и я обрабатывал его событие OnChange и перечитывал.
Аватара пользователя
Алексей Пикуров
Глобальных переменных в скриптах пока нет. Я подумаю на будущие версии про это, но пока только так.
Аватара пользователя
ВладимирШаблий
Что не так делаю..?

Код: Выделить всё
function OnPrivateMessage(iCID, iUIN, iUINTo, iMsgType: integer; sMsg: string): boolean;
begin
  mDBStorageSetData('NewMessage123','Test message'); // не создается
  result := true;
end;

begin
// mDBStorageSetData('NewMessage123','Test message');  {так работает}
end.

Код: Выделить всё
function OnRequestByREST(sBody, sParams, sHeaders, sURL, sIPv4, sIPv6: string; iType: integer): string;
var s:string;
  begin
   if mDBStorageKeyExists('NewMessage123') then
   s:='true' else s:= 'false';
   result := '{"msg":"'+s+'"}';  // {"msg":"false"}
  end;

begin
end.
Аватара пользователя
Алексей Пикуров
Я не знаю, что именно вы не так делаете :) Событие срабатывает? Скрипт на событие OnPrivateMessage этот в дереве вы включили? Приватное сообщение оправляете в чате?
Аватара пользователя
ВладимирШаблий
Ха-ха,
ZQjSJe4.png
ZQjSJe4.png (2.31 КБ) Просмотров: 6482

а я думал - это "просто белый квадратик" [smilie=crazy.gif]
Аватара пользователя
Алексей Пикуров
Аватара пользователя
ВладимирШаблий
Оффтоп: насчет картинок - видел, но (проверено на практике на свем форуме) - imgur - вечный сервис.
Аватара пользователя
Алексей Пикуров
Это не важно. Мы просим вставлять картинки как приложения к сообщению, без ссылок на внешние сервисы. Спасибо за понимание.