import argparse import json from typing import Dict, List, Optional, Union import requests class LarkReporter: def __init__(self, url: str): self.url = url def post(self, content: Union[str, List[List[Dict]]], title: Optional[str] = None): """Post a message to Lark. When title is None, message must be a str. otherwise msg can be in rich text format (see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/im-v1/message/create_json#45e0953e for details). """ if title is None: assert isinstance(content, str) msg = {'msg_type': 'text', 'content': {'text': content}} else: if isinstance(content, str): content = [[{'tag': 'text', 'text': content}]] msg = { 'msg_type': 'post', 'content': { 'post': { 'zh_cn': { 'title': title, 'content': content } } } } requests.post(self.url, data=json.dumps(msg)) def parse_args(): parser = argparse.ArgumentParser(description='Lark bot reporter') parser.add_argument('url', help='Lark bot url') parser.add_argument('content', type=str, help='Content') parser.add_argument('--title', type=str, help='Title', default=None) args = parser.parse_args() return args if __name__ == '__main__': args = parse_args() lark = LarkReporter(args.url) if args.title: lark.post(args.content, args.title) else: lark.post(args.content)