aiobearychat.rtm.http 源代码

# -*- coding: utf-8 -*-
"""RTM HTTP 相关 API."""
from typing import Any, Optional

from attr import NOTHING

from aiobearychat.abc import API, Requester
from aiobearychat.sansio import Response, clean_nothing_keys


[文档]class RtmAPI(API): """RTM HTTP 相关 API. :param requester: 实际进行请求操作的 requester :type requester: aiobearychat.abc.Requester :param token: RTM token, 目前可以通过创建 hubot 机器人获得 :type token: str :param base_url: RTM HTTP API :type base_url: str """ #: RTM HTTP API 的基地址 base_url = 'https://rtm.bearychat.com' # type: str def __init__(self, requester: Requester, token: str = NOTHING, *, base_url: str = ''): #: RTM HTTP API 的基地址 self.base_url = base_url or self.base_url # type: str self._token = token # type: str super().__init__(requester=requester, token=self._token, base_url=self.base_url)
[文档] async def start(self, **requester_params: Any) -> Response: """获取 RTM 模式的连接地址和用户信息。 官方文档地址: https://github.com/bearyinnovative/OpenAPI/blob/master/rtm/api_start.md :return: response. 一个 :class:`aiobearychat.sansio.Response` 实例 :rtype: :class:`aiobearychat.sansio.Response` ``response.body`` 返回值示例:: response.status 等于 200 时: { "code": 0, "result": { // RTM token 对应用户结构 "user": {}, // RTM 连接地址 5 分钟内有效 "ws_host": "wss://rtm.bearychat.com/nimbus/ws:xxx" } } """ url_params = {} body_params = {} body_params['token'] = self._token url_params.update({ }) url = self.base_url + '/start' headers = { 'content-type': 'application/json', } url_params = clean_nothing_keys(url_params) body_params = clean_nothing_keys(body_params) return await self._make_request('post', url, url_params=url_params, body_params=body_params, headers=headers, **requester_params)
[文档] async def message(self, vchannel: str, text: str, *, markdown: bool = True, attachments: Optional[list] = None, **requester_params: Any) -> Response: """发送富文本消息 官方文档地址: https://github.com/bearyinnovative/OpenAPI/blob/master/rtm/api_message.md :param vchannel: 目标会话 id,示例:``=bw52O`` :type vchannel: str :param text: 消息正文 :type text: str :param markdown: 消息正文是否使用 markdown 格式?(默认值: ``True``) :type markdown: bool :param attachments: 消息 attachment 结构,示例: :: [ { "title": "test_title", # attachment 标题,title / text 至少包含一个 "text": "test_text", # attachment 内容,title / text 至少包含一个 "images": [{ # attachment 图片列表,可选 "url": "http://example.com/1.jpg" }], "color": "#cb3f20" # attachment 颜色,可选 } ] :type attachments: :class:`list` :return: response. 一个 :class:`aiobearychat.sansio.Response` 实例 :rtype: :class:`aiobearychat.sansio.Response` ``response.body`` 返回值示例:: response.status 等于 200 时: { "code": 0, "result": null } """ # noqa url_params = {} body_params = {} body_params['token'] = self._token body_params.update({ 'vchannel': vchannel, 'text': text, 'markdown': markdown, 'attachments': attachments or [], }) url = self.base_url + '/message' headers = { 'content-type': 'application/json', } url_params = clean_nothing_keys(url_params) body_params = clean_nothing_keys(body_params) return await self._make_request('post', url, url_params=url_params, body_params=body_params, headers=headers, **requester_params)