Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

清理列表命令好像没写 #11

Open
Yushane233 opened this issue Jan 20, 2024 · 5 comments
Open

清理列表命令好像没写 #11

Yushane233 opened this issue Jan 20, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@Yushane233
Copy link

开播@我列表名单成员退出群后,导致机器人无法@完整名单,从而没有触发@。
清理@列表 命令无效,at文件夹里也没看到有写清理

@Starlwr Starlwr added the bug Something isn't working label Jan 20, 2024
@Starlwr
Copy link
Owner

Starlwr commented Jan 20, 2024

清理@列表命令是2.0版本之前的命令,2.0版本后加入了自动清理机制,就删掉了这个命令,每次@触发前都会自动清理一次,目前还没有发现是什么原因导致偶尔没有清理成功,猜测可能是由于群成员列表缓存原因,需要再测一测,或是再重新加上清理命令

if At in message:
# 过滤已不在群内的群成员的 @ 消息
member_list = [member.id for member in await self.__bot.get_member_list(message.id)]
elements = [e for e in chain if (not isinstance(e, At)) or (e.target in member_list)]
# 移除开播 @ 列表和动态 @ 列表中的元素
filtered = [e for e in chain if (isinstance(e, At)) and (e.target not in member_list)]
for at in filtered:
if await redis.exists_live_on_at(message.id, at.target):
await redis.delete_live_on_at(message.id, at.target)
if await redis.exists_dynamic_at(message.id, at.target):
await redis.delete_dynamic_at(message.id, at.target)
chain = MessageChain(elements)

@Yushane233
Copy link
Author

清理@列表命令是2.0版本之前的命令,2.0版本后加入了自动清理机制,就删掉了这个命令,每次@触发前都会自动清理一次,目前还没有发现是什么原因导致偶尔没有清理成功,猜测可能是由于群成员列表缓存原因,需要再测一测,或是再重新加上清理命令

if At in message:
# 过滤已不在群内的群成员的 @ 消息
member_list = [member.id for member in await self.__bot.get_member_list(message.id)]
elements = [e for e in chain if (not isinstance(e, At)) or (e.target in member_list)]
# 移除开播 @ 列表和动态 @ 列表中的元素
filtered = [e for e in chain if (isinstance(e, At)) and (e.target not in member_list)]
for at in filtered:
if await redis.exists_live_on_at(message.id, at.target):
await redis.delete_live_on_at(message.id, at.target)
if await redis.exists_dynamic_at(message.id, at.target):
await redis.delete_dynamic_at(message.id, at.target)
chain = MessageChain(elements)

试了两个群都触发了这个bug,主要是触发了暂时没有办法手动清理。就导致一直@不了了。
我猜也是self.__bot.get_member_list(message.id)可能是返回了旧的群成员名单,没有更新。

@Starlwr
Copy link
Owner

Starlwr commented Jan 21, 2024

这个问题要在后面的版本修了,可以先用这个方法临时解决:

Step 1. 启动命令行客户端

  • Windows:
    打开 Redis 安装目录下的 redis-cli.exe
  • Linux:
    直接输入 redis-cli

Step 2. 删除相应成员

启动命令行客户端后,使用以下命令删除对应的群成员:

  • 开播@我
srem LiveOnAtMe:群号 QQ号
  • 动态@我
srem DynamicAtMe:群号 QQ号

例如你的群号是 123,退群的群成员 QQ 号是 456,分别执行以下两句:

srem LiveOnAtMe:123 456
srem DynamicAtMe:123 456

返回以下值代表删除成功:

(integer) 1

返回以下值代表列表里不存在这个 QQ 号

(integer) 0

@Yushane233
Copy link
Author

那没有私有部署,使用推送姬的群,联系推送姬帮忙删除吗

@Starlwr
Copy link
Owner

Starlwr commented Jan 22, 2024

是的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants