VKBot поддерживает плагины, написанные на python.
Все встроенные команды реализованы через плагины. Для добавления плагина, его необходимо назвать его по образцу: plugin_длинное_название.py
.
Если плагин назван неправильно, он не будет загружен.
При необходимости, можно заменить встроенный плагин на свой, указав такое же имя плагина (не путать с именем файла!)
# coding:utf8
class Plugin(object):
__doc__ = """Плагин предназначен для ответа на команду.
Для использования необходимо иметь уровень доступа {protection} или выше
Ключевые слова: [{keywords}]
Использование: {keyword}
Пример: {keyword}"""
name = 'plugin'
keywords = (name, u'плагин')
protection = 0
argument_required = False
def respond(self, msg, rsp, *args, **kwargs):
# ваш код
# ...
rsp.text = u'Результат работы'
return rsp
Плагину необходимо иметь следующие элементы (в соответствующем порядке):
- основной класс с названием
Plugin
, к которому будет обращаться программа - документацию
- переменную
name
, содержащую имя плагина - переменную
keywords
, содержащую ключевые слова для вызова плагина - переменную
protection
- переменную
argument_required
, обозначающую, нужно ли передавать дополнительный аргумент для работы команды - функцию
respond
Класс плагина должен иметь переменную __doc__
.
Рекомендация по структуре строки документации:
1 строка: Плагин предназначен для <предназначение>.
2 строка: Для использования необходимо иметь уровень доступа {protection} или выше
3 строка: Ключевые слова: [{keywords}]
4 строкк: Использование: {keyword} <использование>
5 строка: Пример: {keyword} <пример>
*Необходимо указать свои значения вместо объектов в угловых скобках <>
**Если плагин не предназначен для прямого вызова, 3, 4 и 5 строки должны иметь вид:
Ключевые слова: -
Использование: -
Пример: -
Имя плагина
Список клбчевых слов, при обнаружении которых будет вызван плагин
Если уровень доступа пользователь меньше (вызывается после функции _accept_request), команда не будет вызвана
Если True
и команде не передан дополнительный аргумент, функция respond
не будет вызвана (функция _accept_request
вызывается)
Если True
, плагин не будет загружен. По умолчанию False
Чем выше значение, тем раньше плагин будет вызван. По умолчанию 0
Вызывается до функции respond
, возвращаемое значение определяет, будет ли вызван данный плагин. Определена по умолчанию:
def _accept_request(self, msg, rsp, utils, *args, **kwargs):
if msg.was_appeal and msg.args[0].lower() in self.keywords:
return True
return False
Обратите внимание: функция вызывается до проверки уровня доступа пользлвателя
Принимает на вход объект сообщения msg, объект ответа rsp, объект класса дополнительных инструментов utils. (если не используется, можно не указывать явно:
def respond(self, msg, rsp, *args, **kwargs):
Описание передаваемых объектов приводится ниже.
Возвращает полученный объект ответа rsp
Объект, сообщения, имеющий следующие переменные:
Текст полученного сообщения (без изменений)
raw_text
в нижнем регистре
raw_text
с вырезанным обращением(если было)
Список слов из raw_text
(разделён пробелами)
True
, если было оращение к боту
True
, если сообщение пришло от пользователя
True
, если сообщение пришло из беседы
True
, если сообщение пришло от группы
id диалога с пользователем (если from_user
)
id автора сообщения (если from_user
или from_chat
)
id беседы, из которой пришло сообщение (если from_chat
)
Список id пользователей беседы (если from_chat
)
Название беседы (если from_chat
)
True
, если сообщение отправлено со страницы владельца бота
Поле action_mid
полученного сообщения
Поле action_text
полученного сообщения
id полученного сообщения
Объект ответа, имеющий следующие переменные:
Сообщение будет отправлено на этот id
id стикера, который необзодимо прикрепить
Текст сообщения, который необходимо отправить
Если True
, сообщение будет отмечено (в соответствии с соответствующей опцией)
id сообщения, которое необходимо переслать
Функция позволяет моментально отправить сообщение с текущими параметрами
Объект, содержащий вспомогательные функции и переменные:
Читает файл настроек и возвращает значения.
Возврщает словарь {key: value}
, если keys является кортежем или списком, иначе возвращается только значение
Возращает None, если данного ключа/секции не существует.
Устанавливает/создаёт значение ключа и сохраняет файл конфига.
Возращает словарь заблокированных id: {id(str): 'Причина'}
Возвращает словарь id с повышенным доступом {id(str): уровень(int)}
Возвращает словарь пользовательских команд. Структура словаря:
{
'команда 1':
['ответ 1', 0, 0, 0, 0, 0],
['ответ 2', 0, 0, 0, 0, 0]
'команда 2':
...
}
# 2-6 элементы ответа - опции, стоящие в позиции 0, 1 или 2
(1 существует не для всех)
Функция сохраняет настройку key
со значением val
в секции конфига General
Функия сохраняет словарь id с повышенным доступом (структура описана выше)
Функия сохраняет словарь заблокированных id (структура описана выше)
Функия сохраняет словарь пользовательских команд (структура описана выше)
Функция заставляет бота забыть пришедшие к нему сообщения (если такие были)
Возвращает уровень доступа пользователя
Функция форматирует строку, пропуская отсутствующие ключи
Возвращает список загруженных плагинов (отсортированы в порядке приоритета)
Возвращает список загруженных встроенных плагинов (не отсортированы)
Возвращает список загруженных пользовательских плагинов (не отсортированы)
Возвращает объект плагина по имени
Останавливает бота (сначала будет отправлено сообщение, возвращённое функцией respond
)
Перезапускает бота (сначала будет отправлено сообщение, возвращённое функцией respond
)
Позволяет установить сообщение, которое будет отправлено сразу после выполнения
функции restart_bot
Функция предназначена для отправки сообщений в панель логов на главном экране приложения.
Принимает параметры message
(str), importance
(int) (от 0 до 3)
TODO