Документация по функциям платформы Bilibili
BilibiliAdapter — это адаптер личных сообщений Bilibili, основанный на bilibili-api-python. Поддерживает двойную авторизацию по Cookie и сканированию QR-кода, а также обмен личными сообщениями на основе событий.
Информация о документации
- Версия соответствующего модуля: 0.1.0
- Поддержка: ErisPulse
Основная информация
- Краткое описание платформы: Бот для личных сообщений Bilibili (без официального API для личных ботов, использует веб-интерфейс личных сообщений через эмуляцию входа)
- Название адаптера: BilibiliAdapter
- Поддержка нескольких аккаунтов: Поддерживается (каждый аккаунт — отдельный личный аккаунт Bilibili, независимый слушатель сессии)
- Способ подключения: Слушание сессии на основе событий (bilibili-api
Session) - Способ аутентификации: Cookie (SESSDATA / bili_jct / buvid3 / dedeuserid) или вход через сканирование QR-кода
- Поддержка цепочки модификаторов: Поддерживается
.Reply()и другие цепочные методы модификаторов - Совместимость с OneBot12: Поддерживает стандартные сегменты сообщений (text / image)
Инструкция по настройке
[BilibiliAdapter.accounts.default]
login_mode = "cookie" # cookie=ввод凭据 / qrcode=вход через сканирование QR-кода (рекомендуется)
sessdata = "YOUR_SESSDATA" # cookie-режим обязательно
bili_jct = "YOUR_BILI_JCT" # cookie-режим обязательно
buvid3 = "YOUR_BUVID3" # необязательно, снижает вероятность риска
dedeuserid = "YOUR_UID" # необязательно, UID аккаунта
bot_id = "" # оставить пустым для автоматического получения после входа
enabled = true
Описание параметров (для каждого аккаунта):
login_mode: Способ входа.cookie— ввод凭据;qrcode— вход через сканирование QR-кода (рекомендуется).凭据 для обоих режимов в конечном итоге попадают в поля sessdata/bili_jct и т.д.sessdata/bili_jct: Cookie-凭据 для сессии (обязательно для режима cookie; отображаются как пароль в панели)buvid3: Cookie-凭据 для идентификации устройства (необязательно), при наличии значительно снижает вероятность рискаdedeuserid: UID аккаунта (необязательно), также служит источником по умолчанию дляbot_idbot_id: UID аккаунта, оставить пустым для автоматического получения черезget_self_infoпосле входа
Процесс входа через сканирование QR-кода: login_mode = "qrcode" после сохранения, в Dashboard → Компоненты → Настройка аккаунта выберите «Вход через сканирование Bilibili» → Сканируйте QR-код в мобильном приложении Bilibili → Подтвердите на телефоне → Адаптер опрашивает статус входа (scan → confirm → done),凭据 автоматически записываются в конфигурацию аккаунта и вступают в силу.
Адаптер также регистрирует эндпоинты
POST /bilibili/qr/start(получение QR-кода, возвращает URL изображения + токен сессии) иPOST /bilibili/qr/poll(опрос статуса входа). Третьи стороны могут напрямую подключаться к этим эндпоинтам. Запросы опроса должны содержатьpoll_token, возвращенный start, для предотвращения несанкционированного опроса.
Отправка сообщений
Все методы отправки возвращают задачу (Task), ожидание которой дает стандартный ответ (см. «Формат ответа»).
Основная отправка
from ErisPulse import sdk
bili = sdk.adapter.get("bilibili")
# Личное текстовое сообщение (target — UID получателя)
await bili.Send.To("user", "123456789").Text("Hello Bilibili!")
# Личное сообщение с изображением (URL или локальный путь, преобразуется в изображение для личных сообщений Bilibili)
await bili.Send.To("user", "123456789").Image("https://example.com/pic.jpg")
await bili.Send.To("user", "123456789").Image("./local.png")
Цепочка модификаторов
# Ответ на указанное сообщение (msg_key из message_id полученного сообщения)
await bili.Send.To("user", "123456789").Reply("msg_key").Text("Получено!")
Отправка стандартных сегментов OneBot12
message = [
{"type": "text", "data": {"text": "Первая строка"}},
{"type": "image", "data": {"file": "https://example.com/img.jpg"}},
]
await bili.Send.To("user", "123456789").Raw_ob12(message)
Отправка с использованием нескольких аккаунтов
await bili.Send.Using("account2").To("user", "123456789").Text("От второго аккаунта")
Поддерживаемые и не поддерживаемые сегменты сообщений
| Сегмент | Поддерживается | Описание |
|---|---|---|
text |
Поддерживается | Сегменты объединяются и отправляются через send_msg (TEXT) |
image |
Поддерживается | file — URL или локальный путь, отправляется через send_msg (PICTURE) |
reply |
Частично поддерживается | Модификатор принимает, в личных сообщениях Bilibili нет отображения цитат, используется только для контекста отправки |
mention / face / voice / video / file и др. |
Не поддерживается | Возвращает retcode=10002 и перечисляет полученные типы сегментов |
Стандартные API-действия (Api)
from ErisPulse import sdk
bili = sdk.adapter.get("bilibili")
# Информация о себе (ник/аватар/UID)
result = await bili.Api.get_self_info()
# Открытая информация о пользователе (любой пользователь, ник/аватар)
result = await bili.Api.get_user_info("123456789")
# Получение истории сообщений указанной сессии (begin_seqno для прокрутки)
result = await bili.Api.get_session_msgs("123456789", begin_seqno=0)
# Статус и версия
result = await bili.Api.get_status()
result = await bili.Api.get_version()
# Множественные аккаунты
result = await bili.Api.Using("account2").get_self_info()
Поддерживаемые стандартные действия
| Метод | Описание | Источник данных |
|---|---|---|
get_self_info() |
Информация о себе (mid/name/face) | Web API (пространство информации) |
get_user_info(user_id) |
Открытая информация о пользователе (ник/аватар) | Web API (карточка информации пользователя) |
get_session_msgs(talker_id, begin_seqno) |
История сообщений сессии | Web API личных сообщений (session_msgs) |
get_status() |
Статус работы адаптера | Локальный |
get_version() |
Версия адаптера | Локальный |
Не поддерживаемые стандартные действия
Следующие стандартные действия отсутствуют в личных сообщениях Bilibili, вызов возвращает retcode=10002:
get_friend_list/get_group_list/get_group_member_infodelete_message(в личных сообщениях Bilibili только отправитель может отозвать собственное сообщение)set_group_name/leave_groupи другие действия управления группами
Общий вход в действия
# send_message: отправка комбинированных текстовых и изображений сегментов (эквивалентно Send цепочке)
result = await bili.call_api(
"send_message",
_account_id="default",
target_id="123456789",
message=[{"type": "text", "data": {"text": "hi"}}],
)
Формат ответа
Все методы отправки и API следуют стандартизированной схеме ответа адаптера ErisPulse:
{
"status": "ok", # ok / failed
"retcode": 0, # 0 — успех; 10002 — не поддерживается; 10003 — параметры/цель неверны; 34000 — ошибка API Bilibili
"data": {...}, # Данные ответа (оригинальный ответ send_msg)
"self": {"platform": "bilibili", "user_id": "..."},
"message_id": "123456", # msg_key Bilibili
"message": "", # Сообщение об ошибке
"bilibili_raw": {...} # Оригинальный ответ
}
Типы событий
Необходимо использовать platform == "bilibili" для проверки и использования функций данной платформы.
Сопоставление событий
| Событие личных сообщений Bilibili | Событие адаптера | Описание |
|---|---|---|
| TEXT (текстовое сообщение) | message (сегмент text) | Обычное личное сообщение |
| PICTURE (изображение) | message (сегмент image) | content.pictures → сегмент image (URL) |
| WITHDRAW (отмена) | Только логирование | Пользователь отозвал сообщение |
Пример полей события
{
"id": "uuid",
"time": 1793277000,
"type": "message",
"detail_type": "private",
"platform": "bilibili",
"self": {"platform": "bilibili", "user_id": "10000", "user_name": "Bot昵称", "account_id": "default"},
"user_id": "123456789", # UID получателя (sender_uid)
"user_nickname": "小王", # content.sender_name (возможно отсутствует)
"message": [{"type": "text", "data": {"text": "Привет"}}],
"alt_message": "Привет",
"bilibili_raw": {...}, # Оригинальные данные личного сообщения Bilibili
"bilibili_raw_type": "text" # text / picture
}
Описание дополнительных полей
- Все специфические поля имеют префикс
bilibili_(bilibili_raw/bilibili_raw_type) - Полученные изображения представлены как сегмент image,
data.file— URL изображения Bilibili user_nicknameполучается из поляsender_nameсообщения, в некоторых типах сообщений может отсутствовать
Примечания
- Bilibili не предоставляет официальный API для личных ботов: данный адаптер использует веб-интерфейс личных сообщений через эмуляцию входа, что является неофициальным методом, и интерфейс может измениться с обновлениями Bilibili
- Риск: частая/массовая отправка личных сообщений легко вызывает риск (временная блокировка функции личных сообщений аккаунта). Обязательно настройте ограничение частоты в модуле; наличие
buvid3снижает вероятность - Истечение срока действия凭据: после истечения срока действия凭据 адаптер будет записывать ошибки в журнал, необходимо повторно войти через сканирование QR-кода или обновить凭据;凭据 отображаются как пароль в панели
- Ограничения личных сообщений: поддерживается только личные сообщения в формате один на один; группы подписчиков пока не поддерживаются
- Соблюдение правил: не используйте для рассылки спама, маркетинга и других нарушений, соблюдайте правила сообщества Bilibili