Как писать плагины?

Больше
15 года 8 мес. назад - 15 года 8 мес. назад #1 от twix47
twix47 создал тему: Как писать плагины?
Доброго времени суток всем форумчянам.
Вчера вечером в процессе поиска хорошего ICQ клиента наткнулся на RNQ. Клиент очень понравился, так как удобен и без излишеств.
Люблю программировать в delphi7 решил написать какой нибудь палагин. Вопрос в следующем. Нет ли у кого пустого исходника плагина... или статейки как его писать...
Заранее извиняюсь если тема уже поднималась, честно искал но ничего не нашел.
Спасибо всем кто отзовется.
Последнее редактирование: 15 года 8 мес. назад пользователем vazooza.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #2 от invisiblekid
invisiblekid ответил в теме RE: Как писть плагины?
скачать -> исходники
там посмотри.

так же посмотри темы с плагинами, часто выкладывают с сорсами.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #3 от manuj

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #4 от dek
dek ответил в теме RE: Как писть плагины?
twix47 Плагины RnQ Eye Plugin , RnQ Highlighter с исходниками. ;)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад - 15 года 8 мес. назад #5 от xternalx
xternalx ответил в теме RE: Как писть плагины?
глупый вопрос.
"событие" PE_MSG_SENT обрабатывается когда набранный текст уже отправлен.
подскажите пожалуйста, на какое "событие" нужно "подписаться", чтобы по нажатию на Enter, или "Отправить" сначала сработал код из плагина, а потом уже введенный текст отправился?
т.е. нужно перехватить данные перед отправкой, обработать их в своем плагине и вернуть крыске, чтобы она спокойно могла отправить их.
существует такая возможность?
Последнее редактирование: 15 года 8 мес. назад пользователем xternalx.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #6 от Vinum
Vinum ответил в теме RE: Как писть плагины?
Когда-то был популярен плагин игровой Janus, дак в нем всю игру лезли в чат ходы, пришла идея написать плагин.
Внизу приаттачу его. Плагин не пускает в окно чата текст.

Код:
PE_MSG_SENT:
begin
RQ__ParseMsgSentString(data, uino, flagso, msgo);
if (pos('pbiChess:',msgo)=1) or
(pos('pbiReverse:',msgo)=1) or
(pos('pbiCorners:',msgo)=1) or
(pos('pbiCheckersInt:',msgo)=1) or
(pos('pbiCheckersRus:',msgo)=1) or
(pos('pbiCheckersPool:',msgo)=1)
then
result:=str2comm(char(PM_DATA)+_istring(msgo)+_istring(''));
end;

PE_MSG_GOT:
begin
RQ__ParseMsgGotString(data, uini, flagsi, wheni, msgi);

if (pos('pbiChess:',msgo)=1) or
(pos('pbiReverse:',msgo)=1) or
(pos('pbiCorners:',msgo)=1) or
(pos('pbiCheckersInt:',msgo)=1) or
(pos('pbiCheckersRus:',msgo)=1) or
(pos('pbiCheckersPool:',msgo)=1)
then
result:=str2comm(char(PM_DATA)+_istring(''));

Теперь по сабжу:
делаешь RQ__ParseMsgSentString(data, uino, flagso, msgo);
Потом смотришь что нужно и отправляешь
result:=str2comm(char(PM_DATA)+_istring(msgo)+_istring(''));

_istring(msgo) - такое сообщение придет собеседнику
_istring('') - такое отобразится в окне чата

Вложение FixJanus.rar не найдено

Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #7 от ObServeR
ObServeR ответил в теме RE: Как писть плагины?
xternalx писал(а):

глупый вопрос.
"событие" PE_MSG_SENT обрабатывается когда набранный текст уже отправлен.
подскажите пожалуйста, на какое "событие" нужно "подписаться", чтобы по нажатию на Enter, или "Отправить" сначала сработал код из плагина, а потом уже введенный текст отправился?
т.е. нужно перехватить данные перед отправкой, обработать их в своем плагине и вернуть крыске, чтобы она спокойно могла отправить их.
существует такая возможность?

Не совсем понял способ, который описал Vinum, поэтому отвечу немного по-другому.

Чтобы сообщение не отправилось, надо при обработке PE_MSG_SENT отправить в RnQ в качестве ответа PM_ABORT. После этого обрабатываешь сообщение как тебе надо и уже самостоятельно отправляешь его собеседнику через PC_SEND_MSG.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад - 15 года 8 мес. назад #8 от Mikanoshi
Mikanoshi ответил в теме RE: Как писть плагины?
ObServeR писал(а):

Чтобы сообщение не отправилось, надо при обработке PE_MSG_SENT отправить в RnQ в качестве ответа PM_ABORT. После этого обрабатываешь сообщение как тебе надо и уже самостоятельно отправляешь его собеседнику через PC_SEND_MSG.

А PC_SEND_MSG снова вызывает событие PE_MSG_SENT, так что там нужно это обрабатывать :) Vinum написал всё правильно, курите SDK. Можно подменить данные в сообщении и не вызывая снова посылку.

if event = PE_MSG_SENT
INT dest uin
INT flags
ISTRING text
possible replies:
1) PM_DATA
ISTRING message for sending
2) PM_DATA
ISTRING message for sending
ISTRING message for history

З.Ы. Ещё при PM_ABORT сообщение умирает и не передаётся другим плагинам по цепочке, поэтому они и не пашут) Типа моего SEOInclude
Последнее редактирование: 15 года 8 мес. назад пользователем Mikanoshi.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #9 от ObServeR
ObServeR ответил в теме RE: Как писть плагины?
Договорились. Пошел курить SDK... :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад - 15 года 8 мес. назад #10 от xternalx
xternalx ответил в теме RE: Как писть плагины?
Vinum, ObServeR спасибо, буду пробовать...


2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения :D
Последнее редактирование: 15 года 8 мес. назад пользователем xternalx.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #11 от sds
sds ответил в теме RE: Как писть плагины?
xternalx писал(а):

Vinum, ObServeR спасибо, буду пробовать...


2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения :D


Былоб просто супер!:side:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #12 от Mikanoshi
Mikanoshi ответил в теме RE: Как писть плагины?
xternalx писал(а):

Vinum, ObServeR спасибо, буду пробовать...


2all есть мегасуперидея - расписать все модули - plugin, pluginutil, callexec, т.е. какая константа для чего нужна, какая функция что делает, что возвращает в результате выполнения :D

Там вроде всё достаточно ясно)
З.Ы. Исходник DIR не дам :P

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #13 от xternalx
xternalx ответил в теме RE: Как писть плагины?

Mikanoshi писал(а):
З.Ы. Исходник DIR не дам :P

ну и ненада, без него уже разобрался :P

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #14 от xternalx
xternalx ответил в теме RE: Как писть плагины?
Ребят, подскажите пожалуйста где моя ошибка:
//modMsg: string; - будет хранить модифицированный текст
//lres: boolean; - показывает результат выполнения моей предопределенной функции ProcessImcomingMessage
//если lres=true - тогда проверяем, что с с текстом, если он модифицирован - передаем модифицированный текст
//если не модифицирован - все равно его передаем.
//если lres=false то ничего не показываем пользователю.
        PE_MSG_GOT:
          begin
            RQ__ParseMsgGotString(data, uin, flags, dt, msg);
            lres:=ProcessIncomingMessage(msg);
            if lres=true then
            begin
              modMsg:=getModifiedMessage;
              if modMsg<>'' then
              begin
                //showmessage('modified:: '+modMsg);
                result:=str2comm(char(PM_DATA)+_istring(modMsg));
              end else
              begin
                //showmessage('original:: '+msg);
                result:=str2comm(char(PM_DATA)+_istring(msg));
              end;
            end
                else
              result:=0;
          end;
этот код в принципе работает, но в моей крысе если мне кто то пишит - сообщения ко мне в чат не попадают, и не важно, что вернула моя функция, true или false :(
может быть я что то не так делаю?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #15 от Mikanoshi
Mikanoshi ответил в теме RE: Как писть плагины?
Да вроде всё так, getModifiedMessage точно возвращает что-то?)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #16 от xternalx
xternalx ответил в теме RE: Как писть плагины?
точно возвращает. проверено многочисленными опытами

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #17 от xternalx
xternalx ответил в теме RE: Как писть плагины?
xternalx писал(а):

точно возвращает. проверено многочисленными опытами

АХТУНК! завелось! мой плагин конфликтовал с Do It Remotely - тот видать сообщения просто блокировал...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #18 от xternalx
xternalx ответил в теме RE: Как писть плагины?
xternalx писал(а):

xternalx писал(а):

точно возвращает. проверено многочисленными опытами

АХТУНК! завелось! мой плагин конфликтовал с Do It Remotely - тот видать сообщения просто блокировал...

теперь другой трабл, вот этот код:
if modMsg<>'' then
begin
//showmessage('modified:: '+modMsg);
result:=str2comm(char(PM_DATA)+_istring(modMsg));
end else
если я правильно понял должен выводить в моем окне чата текст из переменной modMsg, но он почему то выводит тот текст, который был принят. т.е. не модифицированный моей функцией. Хотя та же самая проверка показала, что в функции _istring показала что функции скармливается именно модифицированный текст. В чем может быть дело? кто нибудь знает?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад #19 от Toxa
Toxa ответил в теме RE: Как писть плагины?
может опять из-за какого-нибудь плагина данный код не выполняется? если строку раскомментарить, то сообщение выдается?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 8 мес. назад - 15 года 8 мес. назад #20 от xternalx
xternalx ответил в теме RE: Как писть плагины?
Toxa писал(а):

может опять из-за какого-нибудь плагина данный код не выполняется? если строку раскомментарить, то сообщение выдается?

если строку раскомментить то все показывается верно... отключил все плагины вообще, сейчас буду тестить :D

*** UPD ***
и ведь действительно моя плюшка конфликтовала с другими плагинами... =((

Уважаемый Rapi D & Co, респект Вам и уважуха за столь быстрый и маленький ICQ клиент, но не могли бы вы оптимизировать плагиновую систему, чтобы не возникало таких дурацких конфликтов? :(
Последнее редактирование: 15 года 8 мес. назад пользователем xternalx.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: bassvazoozaDelphukdekRapid D
Время создания страницы: 0.483 секунд
Работает на Kunena форум