client.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import lark_oapi as lark
  2. from lark_oapi.api.im.v1 import *
  3. from config import config
  4. import json
  5. import httpx
  6. import asyncio
  7. # 注册接收消息事件,处理接收到的消息。
  8. # Register event handler to handle received messages.
  9. # https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/events/receive
  10. def do_p2_im_message_receive_v1(data: P2ImMessageReceiveV1) -> None:
  11. """
  12. "message_id": str,
  13. "root_id": str,
  14. "parent_id": str,
  15. "create_time": int,
  16. "update_time": int,
  17. "chat_id": str,
  18. "thread_id": str,
  19. "chat_type": str,
  20. "message_type": str,
  21. "content": str,
  22. "mentions": List[MentionEvent],
  23. "user_agent": str,
  24. 构造该字典后返回
  25. """
  26. result = {
  27. "message_id": data.event.message.message_id,
  28. "root_id": data.event.message.root_id,
  29. "parent_id": data.event.message.parent_id,
  30. "create_time": data.event.message.create_time,
  31. "update_time": data.event.message.update_time,
  32. "chat_id": data.event.message.chat_id,
  33. "thread_id": data.event.message.thread_id,
  34. "chat_type": data.event.message.chat_type,
  35. "message_type": data.event.message.message_type,
  36. "content": data.event.message.content,
  37. "mentions": data.event.message.mentions,
  38. "user_agent": data.event.message.user_agent
  39. }
  40. print("--------on_message---------")
  41. print(result)
  42. try:
  43. asyncio.create_task(_send_record_async(result))
  44. except Exception as e:
  45. print(f"发送数据到记录端点失败: {e}")
  46. async def _send_record_async(data):
  47. """异步发送数据到记录端点"""
  48. async with httpx.AsyncClient() as client:
  49. try:
  50. await client.post("http://localhost:3000/record", json=data, timeout=10)
  51. except Exception as e:
  52. print(f"异步发送数据到记录端点失败: {e}")
  53. # 注册事件回调
  54. # Register event handler.
  55. event_handler = (
  56. lark.EventDispatcherHandler.builder("", "")
  57. .register_p2_im_message_receive_v1(do_p2_im_message_receive_v1)
  58. .build()
  59. )
  60. app_id = config.get("bot.app_id")
  61. app_secret = config.get("bot.app_secret")
  62. # 创建websocket长连接实例,开启监听
  63. wsClient = lark.ws.Client(
  64. app_id,
  65. app_secret,
  66. event_handler=event_handler,
  67. log_level=lark.LogLevel.INFO,
  68. )
  69. def main():
  70. # 启动长连接,并注册事件处理器。
  71. # Start long connection and register event handler.
  72. wsClient.start()
  73. if __name__ == "__main__":
  74. main()