Line Client

Polar Sponsor
爱发电 赞助
.NET 9.0

通过Chrome扩展网关集成LINE。发送/读取消息,管理联系人、群组、个人资料及表情回应。二维码认证……

LINE 客户端 Skill.

功能概述

LINE 客户端 Skill.是一项面向实际任务的技能,主要用于Full LINE 消息客户端通过Chrome扩展网关 JSON.;Repo & Files.;

核心要点

  • Repo: /data/workspace/line-client (github.com/2manslkh/line-api).;
  • Main 客户端: scrc/chrome clie。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

LINE 客户端技能

通过 Chrome 扩展网关 JSON API 实现的完整 LINE 消息客户端。

代码仓库与文件

  • 仓库: /data/workspace/line-client(github.com/2manslkh/line-api)
  • 主客户端: src/chrome_client.py → LineChromeClient
  • 二维码登录: src/auth/qr_login.py → QRLogin
  • HMAC 签名器: src/hmac/signer.js(Node.js,自动在端口 18944 启动)
  • Token 存储: ~/.line-client/tokens.json
  • 证书缓存: ~/.line-client/sqr_cert
  • WASM 文件: lstm.wasm + lstmSandbox.js(必需,位于仓库根目录)

快速开始

import json
from pathlib import Path
from src.chrome_client import LineChromeClient

tokens = json.loads((Path.home() / ".line-client" / "tokens.json").read_text())
client = LineChromeClient(auth_token=tokens["auth_token"])

# 发送消息
client.send_message("U...", "Hello!")

# 获取个人资料
profile = client.get_profile()

Token 有效期约为 7 天。若已过期(APIError(10051)),请重新运行二维码登录流程。

二维码登录(身份验证)

二维码登录需用户交互:在手机上扫描二维码并输入 PIN 码。

from src.hmac import HmacSigner
from src.auth.qr_login import QRLogin
import qrcode

signer = HmacSigner(mode="server")
login = QRLogin(signer)
result = login.run(
    on_qr=lambda url: send_qr_image_to_user(qrcode.make(url)),
    on_pin=lambda pin: send_pin_to_user_IMMEDIATELY(pin),  # 时间敏感!
    on_status=lambda msg: print(msg),
)
# result.auth_token, result.mid, result.refresh_token

关键注意: PIN 码必须在约 60 秒内送达用户。请在 on_pin 回调触发的**第一时间**发送 PIN。

二维码登录状态机

  1. createSession → 获取 session ID
  2. createQrCode → 获取回调 URL(需附加 ?secret={curve25519_pubkey}&e2eeVersion=1)
  3. checkQrCodeVerified — 轮询直至完成扫码(使用 X-Line-Session-ID,不带 origin 请求头)
  4. verifyCertificate — 即使失败也**必须调用**(强制状态转移!)
  5. createPinCode → 生成 6 位 PIN 码(若第 4 步中证书已验证,则跳过)
  6. checkPinCodeVerified — 轮询直至用户输入 PIN
  7. qrCodeLoginV2 → 返回 JWT token、证书及 refresh token

服务端登录脚本

python scripts/qr_login_server.py /tmp/qr.png

向 stdout 输出 JSON 事件:{"event": "qr", "path": "...", "url": "..."}、{"event": "pin", "pin": "123456"}、{"event": "done", "mid": "U..."}。

全部 API 方法

联系人与好友

方法 参数 说明
get_profile() — 获取当前用户资料(displayName、mid、statusMessage 等)
get_contact(mid) mid: str 获取单个联系人的资料
get_contacts(mids) mids: list[str] 批量获取多个联系人资料
get_all_contact_ids() — 列出所有好友 MID
find_contact_by_userid(userid) userid: str 按 LINE ID 搜索联系人
find_and_add_contact_by_mid(mid) mid: str 通过 MID 添加好友
find_contacts_by_phone(phones) phones: list[str] 按手机号搜索联系人
add_friend_by_mid(mid) mid: str 添加好友(RelationService)
get_blocked_contact_ids() — 列出被屏蔽的 MID
get_blocked_recommendation_ids() — 列出被屏蔽的好友推荐 MID
block_contact(mid) mid: str 屏蔽某联系人
unblock_contact(mid) mid: str 取消屏蔽某联系人
block_recommendation(mid) mid: str 屏蔽某条好友推荐
update_contact_setting(mid, flag, value) mid, flag: int, value: str 更新联系人设置(例如静音)
get_favorite_mids() — 列出收藏的联系人 MID
get_recommendation_ids() — 列出好友推荐列表

消息

方法 参数 说明
send_message(to, text, ...) to: str, text: str, reply_to: str(可选) 发送文本消息。支持通过 reply_to=message_id 进行回复
unsend_message(message_id) message_id: str 撤回/删除已发送的消息
get_recent_messages(chat_id, count=50) chat_id: str 获取指定聊天中的最新消息
get_previous_messages(chat_id, end_seq, count=50) chat_id, end_seq: int 分页获取历史消息(更早的消息)
get_messages_by_ids(message_ids) message_ids: list[str] 拉取指定 ID 的消息
get_message_boxes(count=50) — 获取聊天列表(含每会话最后一条消息,即收件箱视图)
get_message_boxes_by_ids(chat_ids) chat_ids: list[str] 获取指定聊天(含每会话最后一条消息)
get_message_read_range(chat_ids) chat_ids: list[str] 获取已读回执信息
send_chat_checked(chat_id, last_message_id) chat_id, last_message_id: str 标记消息为已读
send_chat_removed(chat_id, last_message_id) chat_id, last_message_id: str 将聊天从收件箱中移除
send_postback(to, postback_data) to, postback_data: str 发送 postback(用于 Bot 交互)

聊天与群组

方法 参数 说明
get_chats(chat_ids, with_members=True, with_invitees=True) chat_ids: list[str] 获取聊天/群组详情
get_all_chat_mids() — 列出所有聊天 MID(含群组与待接受邀请)
create_chat(name, target_mids) name: str, target_mids: list[str] 创建新群聊
accept_chat_invitation(chat_id) chat_id: str 接受群组邀请
reject_chat_invitation(chat_id) chat_id: str 拒绝群组邀请
invite_into_chat(chat_id, mids) chat_id: str, mids: list[str] 邀请用户加入群组
cancel_chat_invitation(chat_id, mids) chat_id: str, mids: list[str] 取消待处理的邀请
delete_other_from_chat(chat_id, mids) chat_id: str, mids: list[str] 将成员踢出群组
leave_chat(chat_id) chat_id: str 退出群聊
update_chat(chat_id, updates) chat_id: str, updates: dict 更新群组名称/设置
set_chat_hidden_status(chat_id, hidden) chat_id: str, hidden: bool 归档/取消归档聊天
get_rooms(room_ids) room_ids: list[str] 获取旧版 Room 信息
invite_into_room(room_id, mids) room_id: str, mids: list[str] 邀请用户加入旧版 Room
leave_room(room_id) room_id: str 退出旧版 Room

消息表情反应

方法 参数 说明
react(message_id, reaction_type) message_id: str, type: int 对消息添加反应。类型值:2=点赞、3=爱心、4=大笑、5=惊讶、6=难过、7=愤怒
cancel_reaction(message_id) message_id: str 取消自己的反应

个人资料与设置

方法 参数 说明
update_profile_attributes(attr, value, meta={}) attr: int, value: str 更新个人资料。属性值:2=DISPLAY_NAME、16=STATUS_MESSAGE、4=PICTURE_STATUS
update_status_message(message) message: str 快捷方式:更新状态消息
update_display_name(name) name: str 快捷方式:更新显示名称
get_settings() — 获取全部账户设置
get_settings_attributes(attr_bitset) attr_bitset: int 获取特定设置项
update_settings_attributes(attr_bitset, settings) attr_bitset: int, settings: dict 更新设置项

轮询与事件

方法 参数 说明
get_last_op_revision() — 获取最新操作修订号(operation revision number)
fetch_ops(count=50) — 拉取待处理的操作(可能触发长轮询)
poll() — 生成器,实时产出到达的操作
on_message(handler) handler: Callable(msg, client) 启动轮询线程,收到新消息时调用 handler。操作类型:26=SEND_MESSAGE、27=RECEIVE_MESSAGE
stop() — 停止轮询线程

其他服务

方法 参数 说明
get_server_time() — 获取 LINE 服务器时间戳
get_configurations() — 获取服务器配置
get_rsa_key_info() — 获取用于身份验证的 RSA 密钥
issue_channel_token(channel_id) channel_id: str 签发 channel token(用于 LINE Login / LIFF)
get_buddy_detail(mid) mid: str 获取官方账号信息
report_abuse(mid, category=0, reason="") mid: str 举报用户
add_friend_by_mid(mid) mid: str 添加好友(RelationService)
logout() — 登出并使 Token 失效

MID 格式

LINE 使用 MID 标识各类实体:

  • U... 或 u... → 用户(toType=0)
  • C... 或 c... → 群聊(toType=2)
  • R... 或 r... → Room(toType=1)

客户端在发送消息时,会根据 MID 前缀自动推断 toType。

HMAC 签名

所有 API 请求均需携带 X-Hmac 请求头。WASM 签名器会自动完成该过程:

  • 使用版本号 “3.7.1” 与 access token,通过专有 KDF(实现在 lstm.wasm 中)派生签名密钥
  • 对 path + body 进行签名 → base64 编码 → 填入 X-Hmac 头
  • 服务端模式:约 13ms/次(运行于端口 18944 的 Node.js HTTP 服务,自动启动)
  • 子进程模式:约 2s/次(备用方案)

错误处理

from src.chrome_client import APIError

try:
    client.send_message(mid, "test")
except APIError as e:
    print(e.code, e.api_message)
    # 10051 = 会话过期 / 无效
    # 10052 = 后端返回 HTTP 错误
    # 10102 = 参数非法

架构

User's Phone (LINE app)
    ↕ (scan QR / enter PIN)
LINE Servers (line-chrome-gw.line-apps.com)
    ↕ (JSON REST + X-Hmac signing)
LineChromeClient (this repo)
    ↕ (WASM HMAC via Node.js signer)
lstm.wasm + lstmSandbox.js

Chrome 网关在内部完成 JSON ↔ Thrift 的双向转换。我们**无需直接处理 Thrift 二进制格式**——所有交互均为结构清晰的 JSON。

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

2026.10.22

0

15

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

2026.10.22

0

12

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

2026.10.22

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习