first commit

This commit is contained in:
Prometheus-first
2026-10-15 18:27:46 +08:00
commit 68eb19ea35
88 changed files with 10319 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
# 本群称呼与成员目录
在已启用的群里,由成员本人发送 `/绑定 昵称`,即可将这个称呼与消息里的真实作者 ID 联系起来。
绑定只影响当前群。同一个人在其他群可以使用不同称呼,未绑定的群使用从微信联系人缓存取得的原始名字。绑定名用于本群的艾特显示和按人查询;再次绑定会更新首选称呼,旧称呼仍可在本群作为别名查询。该功能不修改微信资料。
`members_config.json` 中的 `groups` 指定支持哪些群,成员列表可以为空。不同机器人账号、不同群的数据分别保存。实际绑定、已知身份和当天文本存放在 `.runtime/member_data.sqlite3`,重启保留。
框架先保存新消息,再分发给插件。每天北京时间 0 点清理旧日文本,`/清空` 清除当前群文本;绑定称呼仍保留。
开发接口包括 `ctx.members.resolve(name, room)`、`display_name(wxid, room)`、`history(name, room)`、`today_snapshot(name, room)` 和 `today_group_snapshot(room)`。查询身份始终使用成员 ID,不能根据重名猜测是谁。
+25
View File
@@ -0,0 +1,25 @@
"""成员本人发送 /绑定 昵称,注册或更新称呼,供所有插件查询。"""
from wxbot_framework.members import MemberError
class Plugin:
def on_load(self, ctx):
self.members = ctx.members
def on_message(self, message, ctx):
if not message.is_group or message.type != 1 or message.chat_id not in self.members.groups:
return
parts = message.text.strip().split(maxsplit=1)
if not parts or parts[0] != "/绑定":
return
if len(parts) != 2:
ctx.reply(message, "用法:/绑定 昵称")
return
name = parts[1].strip()
try:
member = self.members.register(name, message.chat_id, message.sender_id)
except MemberError as error:
ctx.reply(message, str(error))
return
ctx.logger.info("成员已绑定:room=%s name=%s wxid=%s", member.room, member.name, member.wxid)
ctx.reply(message, f"已绑定:{member.name}。")
+5
View File
@@ -0,0 +1,5 @@
{
"api": "v1",
"description": "成员本人发送 /绑定 昵称,自由注册或更新称呼,关联真实 ID 和聊天记录",
"requires": ["group.text.receive", "group.text.send"]
}