client.py 2.5 KB

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