Pywayne Lark Bot Listener

v0.1.0

Feishu/Lark message listener for real-time message processing via WebSocket. Use when users need to listen for incoming Feishu messages (text, image, file, p...

0· 758·1 current·1 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for wangyendt/lark-bot-listener.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Pywayne Lark Bot Listener" (wangyendt/lark-bot-listener) from ClawHub.
Skill page: https://clawhub.ai/wangyendt/lark-bot-listener
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Canonical install target

openclaw skills install wangyendt/lark-bot-listener

ClawHub CLI

Package manager switcher

npx clawhub@latest install lark-bot-listener
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
!
Purpose & Capability
The skill claims to listen to Feishu/Lark messages and the docs show code that accepts app_id/app_secret and imports pywayne.lark_bot_listener. However the registry metadata declares no required credentials, no primaryEnv, and no install steps. A Feishu listener legitimately needs Feishu credentials and an installable Python package; those are missing from the declared requirements, which is incoherent.
Instruction Scope
SKILL.md contains concrete runtime instructions: import a Python package, construct LarkBotListener with app_id/app_secret, download attachments to a system temp directory (system_temp/lark_bot_temp), run an async listener, and automatically upload/send processed files. These actions are within the stated purpose, but the document gives no guidance for how credentials should be supplied or how the referenced package is installed. The file download/auto-reply behavior is expected for a message listener but raises privacy considerations (automatic download and re-send of attachments).
!
Install Mechanism
There is no install spec or code shipped with the skill, yet SKILL.md imports pywayne.lark_bot_listener — implying a third-party Python package is required. The registry provides no guidance on how to obtain or verify that package (no pip/install command, no homepage, no repository). That mismatch increases risk because users may be directed to install an unknown package manually.
!
Credentials
The documentation expects app_id and app_secret (sensitive credentials) to be supplied to LarkBotListener, but the skill declares no required environment variables or primary credential. Required secrets are therefore undocumented, which is a red flag: it's unclear how the skill expects credentials to be provided, stored, or protected. Automatic file downloads and auto-replies also mean those credentials would permit network access to your Feishu tenant and message sending.
Persistence & Privilege
The skill is not configured as always: true and does not request persistent system-wide privileges. It is instruction-only and does not declare actions that modify other skills or global agent settings. Note: agent autonomous invocation (disable-model-invocation=false) is the default and not by itself a problem.
What to consider before installing
Do not install or run this skill as-is. Ask the publisher for: (1) the package source/repository (e.g., GitHub or PyPI) and instructions to install a specific, signed release; (2) exact guidance for supplying Feishu credentials (environment variables or secret manager) and how tokens are stored/rotated. Before using, review the package code (or ask for a vetted upstream link), verify the package is from a trusted author, and run it in an isolated environment. Be especially cautious because the skill auto-downloads attachments and can automatically resend processed files — ensure that behavior is acceptable for your data privacy policies. If you cannot obtain a verifiable package/source and clear credential handling, consider using an alternative with published code or official SDKs.

Like a lobster shell, security has layers — review code before you run it.

latestvk978n2bw6hseatd68xw7te70m9818tym
758downloads
0stars
1versions
Updated 2mo ago
v0.1.0
MIT-0

Pywayne Lark Bot Listener

飞书消息监听器,通过 WebSocket 实时接收和处理飞书消息。

Quick Start

from pywayne.lark_bot_listener import LarkBotListener

# 初始化监听器
listener = LarkBotListener(
    app_id="your_app_id",
    app_secret="your_app_secret",
    message_expiry_time=60  # 消息去重过期时间(秒)
)

# 处理文本消息
@listener.text_handler()
async def handle_text(text: str):
    print(f"收到消息: {text}")

# 启动监听
listener.run()

Decorators - 消息处理装饰器

text_handler

文本消息处理装饰器,直接传递文本内容。

@listener.text_handler(group_only=False, user_only=False)
async def handle_text(text: str, chat_id: str, is_group: bool, group_name: str, user_name: str):
    print(f"收到来自 {user_name} 的消息: {text}")
    listener.send_message(chat_id, f"已收到:{text}")

参数说明(除 text 外均为可选):

参数类型说明
textstr文本内容(必需)
chat_idstr会话 ID
is_groupbool是否群组消息
group_namestr群组名称(私聊时为空)
user_namestr发送消息的用户姓名

装饰器参数

  • group_only=True: 只处理群组消息
  • user_only=True: 只处理私聊消息

image_handler

图片消息处理装饰器,自动下载图片到临时文件并清理。

from pathlib import Path
import cv2
import tempfile

@listener.image_handler()
async def handle_image(image_path: Path, user_name: str) -> Path:
    # 处理图片
    img = cv2.imread(str(image_path))
    # ...处理逻辑...
    # 返回新图片路径会自动发送回去,返回 None 则不发送
    return image_path

参数说明(除 image_path 外均为可选):

参数类型说明
image_pathPath临时图片文件路径(必需)
chat_idstr会话 ID
is_groupbool是否群组消息
group_namestr群组名称
user_namestr发送消息的用户姓名

返回值

  • 返回 Path: 自动上传并发送新图片
  • 返回 None: 不发送任何图片

file_handler

文件消息处理装饰器,自动下载文件到临时文件并清理。

@listener.file_handler()
async def handle_file(file_path: Path, user_name: str) -> Path:
    # 处理文件
    with open(file_path, 'r') as f:
        content = f.read()
    # ...处理逻辑...
    return file_path  # 返回文件路径会自动发送回去

参数说明(除 file_path 外均为可选):

参数类型说明
file_pathPath临时文件路径(必需)
chat_idstr会话 ID
is_groupbool是否群组消息
group_namestr群组名称
user_namestr发送消息的用户姓名

listen - 通用消息监听器

用于监听任意类型消息(包括富文本 post)。

@listener.listen(message_type="post")
async def handle_post(ctx: MessageContext):
    print(f"收到富文本消息: {ctx.content}")

MessageContext 属性

属性类型说明
chat_idstr会话 ID
user_idstr用户 ID
message_typestr消息类型
contentstr消息内容(文本消息为字符串,其他类型为 JSON 字符串)
is_groupbool是否群组消息
chat_typestr会话类型
message_idstr消息 ID

send_message - 发送消息

发送 Markdown 格式的消息到飞书。

listener.send_message(chat_id, "**这是加粗文本**")
listener.send_message(chat_id, "普通文本\n[链接](https://example.com)")

完整示例

from pywayne.lark_bot_listener import LarkBotListener
from pathlib import Path

listener = LarkBotListener(
    app_id="your_app_id",
    app_secret="your_app_secret"
)

# 文本消息 - AI 回复示例
@listener.text_handler()
async def handle_text(text: str, chat_id: str, user_name: str):
    # 处理逻辑...
    listener.send_message(chat_id, f"收到来自 {user_name} 的消息")

# 图片消息 - 自动下载和清理
@listener.image_handler()
async def handle_image(image_path: Path):
    # image_path 是临时文件,处理完会自动清理
    print(f"处理图片: {image_path}")

# 文件消息 - 自动下载和清理
@listener.file_handler(group_only=True)
async def handle_file(file_path: Path, group_name: str):
    print(f"收到文件: {file_path} 来自 {group_name}")

# 富文本消息
@listener.listen(message_type="post")
async def handle_post(ctx: MessageContext):
    import json
    post_content = json.loads(ctx.content)
    print(f"收到富文本: {post_content}")

# 启动监听
listener.run()

注意事项

  1. 异步处理: 所有处理函数使用 async/await 语法
  2. 消息去重: 每个处理函数独立去重,默认 60 秒过期
  3. 临时文件: 图片和文件下载到 系统临时目录/lark_bot_temp,处理完自动清理
  4. 错误隔离: 每个处理函数异常独立捕获,不影响其他函数
  5. 多注册: 同一消息可被多个处理函数处理

Comments

Loading comments...