Необходимые методы для плагинов

Здесь обсуждаются технические аспекты создания дополнений.
Аватара пользователя
Dj Arktic
Сообщения: 99
Зарегистрирован: 22:55, 04.12.2010

Необходимые методы для плагинов

Сообщение Dj Arktic » 23:19, 12.08.2012

Здравствуйте разработчики, программисты и простые пользователи.
После обновления 5.50 появились группы - прекрасная вещь, мечтал о подобном.
Вот только не хочется работать с ними, а так же с другими функциями программы "окольными путями" - через конфиги или используя winapi.
Поэтому решил составить список методов, которые очень хотелось бы увидеть в документации :roll:

Клиент -> Прием событий

  • Наложение ограничения
  • Публикация на доске объявлений
  • Заявка на авторизацию


Клиент -> Инициирование событий

  • Одобрение/отклонение заявок на авторизацию
  • Публикация на доске объявлений
  • Индивидуальная настройка пользователя/канала/группы

Клиент -> Получение данных от программы

  • Получение доски объявлений
  • Получение информации об игнорировании пользователем
  • Получение анкеты другого пользователя
  • Получение списка групп
  • Получение списка пользователей в группе
  • Получение индивидуальной настройки пользователя/канала/группы

Клиент -> Премодерация

Добавить тип данных - приглашение в канал, с возможностью отклонения/одобрения приглашения.
Также, предлагаю внести поправку:
Если после премодерации плагин возвращает программе пустой блок данных - событие не отображается.
На данный момент - событие отображается с пустым текстом.

Maxim Mirgorodsky
Администратор
Сообщения: 6734
Зарегистрирован: 09:56, 27.06.2005
Благодарил (а): 1 раз

Re: Необходимые методы для плагинов

Сообщение Maxim Mirgorodsky » 08:39, 13.08.2012

Клиентские плагины ограничены данными, которыми располагает клиент. Плагины не отправляют запросы к серверу за данными.

Клиент -> Прием событий

Наложение ограничения
Публикация на доске объявлений
Заявка на авторизацию


"Публикация на доске объявлений" имеется ввиду сам факт появления нового объявления?

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

Клиент -> Инициирование событий

Одобрение/отклонение заявок на авторизацию
Публикация на доске объявлений
Индивидуальная настройка пользователя/канала/группы


Третье вероятно реализуем. А вот остальное, к сожалению, невозможно по причине отсутствия доступа клиента к этим данным.

Клиент -> Получение данных от программы

Получение доски объявлений
Получение информации об игнорировании пользователем
Получение анкеты другого пользователя
Получение списка групп
Получение списка пользователей в группе
Получение индивидуальной настройки пользователя/канала/группы

Возможна реализация только трех последних пунктов.

Если после премодерации плагин возвращает программе пустой блок данных - событие не отображается.
На данный момент - событие отображается с пустым текстом.

А если необходимо удалить текст?

Аватара пользователя
Dj Arktic
Сообщения: 99
Зарегистрирован: 22:55, 04.12.2010

Re: Необходимые методы для плагинов

Сообщение Dj Arktic » 11:20, 13.08.2012

Клиент -> Прием событий

Наложение ограничения

Ну клиент же отображает информацию о том, что на пользователя "Нарушитель" было наложено ограничение на доступ к серверу на 3 дня пользователем "Админ".
Я имею ввиду, что в это событие можно вывести только известные клиенту данные. Например, если ограничение анонимно - вместо ника ограничившего отправлять пустой блок данных.

Публикация на доске объявлений" имеется ввиду сам факт появления нового объявления?

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


Да, имеется ввиду факт появления нового объявления. И, если возможно, какие-то данные о нем.
Заявка на авторизацию:
Событие появляется только если у учетной записи есть право на управление учетными записями.
В этом случае клиент в состоянии получить всю информацию о заявке.

Клиент -> Инициирование событий

Одобрение/отклонение заявок на авторизацию
Публикация на доске объявлений


Клиент же, обладая соответствующими правами, без вмешательства плагинов, может инициировать эти события? Предлагаю, как и в событии ID: 52 сделать проверку прав, и если прав у учетной записи достаточно - инициировать эти события так же, как и без вмешательства плагинов.

Клиент -> Получение данных от программы

Получение доски объявлений
Получение информации об игнорировании пользователем
Получение анкеты другого пользователя


Аналогично. Клиентская версия программы сама может получить эти данные. Плагин же, по сути, заставляет ее получить эти данные. Вот только не отображать их, а передать плагину.

А если необходимо удалить текст?

В программе нет возможности отправлять сообщения с пустым текстом. Зачем оставлять эту возможность плагину? Не вижу смысла в удалении текста, без удаления события. Но, если это так необходимо, можно вставить "пустой пробел" - один из символов юникода.

Аватара пользователя
CrazyVirus
Сообщения: 747
Зарегистрирован: 13:40, 26.05.2007

Re: Необходимые методы для плагинов

Сообщение CrazyVirus » 12:09, 13.08.2012

Dj Arktic писал(а):Аналогично. Клиентская версия программы сама может получить эти данные. Плагин же, по сути, заставляет ее получить эти данные. Вот только не отображать их, а передать плагину.
Но клиент должен вернуть данные плагину без возврата (если делать не через события), а это чревато зависаниями, я так понимаю, что проблема и в этом тоже. Да и плагины тогда смогут заставлять клиента требовать от сервера тонны данных. :)

Dj Arktic писал(а):В программе нет возможности отправлять сообщения с пустым текстом. Зачем оставлять эту возможность плагину? Не вижу смысла в удалении текста, без удаления события. Но, если это так необходимо, можно вставить "пустой пробел" - один из символов юникода.
Можно ведь обнулить 3-й параметр функции PluginPremoderation и клиент не отобразит сообщение.

Maxim Mirgorodsky
Администратор
Сообщения: 6734
Зарегистрирован: 09:56, 27.06.2005
Благодарил (а): 1 раз

Re: Необходимые методы для плагинов

Сообщение Maxim Mirgorodsky » 13:28, 14.08.2012

Наложение ограничения
Ну клиент же отображает информацию о том, что на пользователя "Нарушитель" было наложено ограничение на доступ к серверу на 3 дня пользователем "Админ".

Это можно сделать.
Событие появляется только если у учетной записи есть право на управление учетными записями.
В этом случае клиент в состоянии получить всю информацию о заявке.

К сожалению, нет. Всю информацию клиент получает только когда открывает список заявок на активацию.
Клиент же, обладая соответствующими правами, без вмешательства плагинов, может инициировать эти события? Предлагаю, как и в событии ID: 52 сделать проверку прав, и если прав у учетной записи достаточно - инициировать эти события так же, как и без вмешательства плагинов.

Да, но клиент ведь не будет обладать данными о неактивированных заявках. И не будет обладать данными о структуре доски объявлений, поэтому не сможет указать, например, ID раздела.
Аналогично. Клиентская версия программы сама может получить эти данные. Плагин же, по сути, заставляет ее получить эти данные. Вот только не отображать их, а передать плагину.

То есть через запрос к серверу. Мы убрали все функции плагинов приводящие к запросам к серверу. Количество этих запросов жестко ограничено для предотвращения атак и контроля над нагрузкой. Серверным плагинам это все доступно, а вот клиентским - нет.
В программе нет возможности отправлять сообщения с пустым текстом. Зачем оставлять эту возможность плагину?

Почему же? Пустая тема, пустое состояние.

Аватара пользователя
Dj Arktic
Сообщения: 99
Зарегистрирован: 22:55, 04.12.2010

Re: Необходимые методы для плагинов

Сообщение Dj Arktic » 10:56, 06.09.2012

Все понятно, спасибо.
Надеюсь на расширение функционала настолько, насколько это возможно.
Было бы прекрасно добавить премодерацию личных сообщений.
Чтобы приходили уже премодерированые ЛС, а в историю сохранялись без премодерации, т.к. просмотрщик истории используется везде как док-во нарушения (скажем, рассылки спама).

Ответить