Skip to content

Conversation

@MrY-Cat
Copy link
Contributor

@MrY-Cat MrY-Cat commented Apr 2, 2025

在提出此拉取请求时,我确认了以下几点(请复选框):

  • 我已阅读并理解贡献文档
  • 我已检查没有与此请求重复的 Pull Requests。
  • 我已经考虑过,并确认这份呈件对其他人很有价值。
  • 我接受此提交可能不会被使用,并根据维护人员的意愿关闭 Pull Requests。

填写PR内容:

MrY-Cat added 2 commits April 2, 2025 18:01
由于仅能最大程度保持前面信息一致,没有resp返回值,后面无法保持一致,不如加上msg=具体原因
不同群的管理员人数不同,且小概率随qq版本变化,因此不能以群管理人数判断,考虑先执行设置管理员,再判断用户是否为管理员
@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

#135

@MrXiaoM
Copy link
Owner

MrXiaoM commented Apr 2, 2025

测试过了吗,我感觉这样不妥。
NapCat 即使在管理员已满的情况下也会返回 "status": "ok",这会使得下面的

impl.role = if (operation) "admin" else "member"

被执行,导致你获取的 permission 也一样是 ADMINISTRATOR

@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

测试过了吗,我感觉这样不妥。 NapCat 即使在管理员已满的情况下也会返回 "status": "ok",这会使得下面的

impl.role = if (operation) "admin" else "member"

被执行,导致你获取的 permission 也一样是 ADMINISTRATOR

如果permission是正确且即时的,按逻辑来说没有问题。

如果NapCat 即使在管理员已满的情况下也会异常的返回ok导致permission错误,那可能对napcat而言有问题

但是原来的写法对于上限不是15人的群都有问题

这样的话可能还要修改一下,要再次即时向onebot请求获得用户的准确权限是否为permission,而不是根据onebot返回值更改的permission判定,就可以了(不知道是否能即时向onebot请求获得用户的准确权限)

@MrXiaoM
Copy link
Owner

MrXiaoM commented Apr 2, 2025

permission 不是即时的,它根据 MemberWrapper 的 impl.role 进行计算。
需要调用 queryUpdate() 向 onebot 请求才能更新 impl 的数据。
建议做两层限制,调用前根据当前群最大人数(group.impl.maxMemberCount)作限制,调用后根据 permission 是否已成功设置作限制。
相信腾讯应该不会随便改人数限制,提前判定可以省下两次向 onebot 请求浪费的时间

@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

permission 不是即时的,它根据 MemberWrapper 的 impl.role 进行计算。 需要调用 queryUpdate() 向 onebot 请求才能更新 impl 的数据。 建议做两层限制,调用前根据当前群最大人数(group.impl.maxMemberCount)作限制,调用后根据 permission 是否已成功设置作限制。 相信腾讯应该不会随便改人数限制,提前判定可以省下两次向 onebot 请求浪费的时间

OK

@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

permission 不是即时的,它根据 MemberWrapper 的 impl.role 进行计算。 需要调用 queryUpdate() 向 onebot 请求才能更新 impl 的数据。 建议做两层限制,调用前根据当前群最大人数(group.impl.maxMemberCount)作限制,调用后根据 permission 是否已成功设置作限制。 相信腾讯应该不会随便改人数限制,提前判定可以省下两次向 onebot 请求浪费的时间

那如果存在这样的情况的话,我觉得设置管理之后都要queryUpdate()一下,否则即时不考虑异常处理机制,此时成员的permission也可能与实际不符,可能导致后续使用时出现意外

@MrXiaoM
Copy link
Owner

MrXiaoM commented Apr 2, 2025

那如果存在这样的情况的话,我觉得设置管理之后都要queryUpdate()一下,否则即时不考虑异常处理机制,此时成员的permission也可能与实际不符,可能导致后续使用时出现意外

val count = //...
if (count >= max) throw
if (bot.impl.setGroupAdmin.check) {
    queryUpdate()
    if (permission != ADMINISTRATOR) throw
}

这样就行了,check 不通过则说明 onebot 返回了 "status": "failed"

@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

group.impl.maxMemberCount

O的,我在改了

@MrXiaoM
Copy link
Owner

MrXiaoM commented Apr 2, 2025

如果你认为需要,if check 可以加个 else 分支把 onebot 返回的错误信息抛出来

@MrY-Cat
Copy link
Contributor Author

MrY-Cat commented Apr 2, 2025

onebot 返回了 "status": "failed"

话说返回failed意味着什么

@MrXiaoM
Copy link
Owner

MrXiaoM commented Apr 2, 2025

话说返回failed意味着什么

failed 意味着 onebot 在做这件事遇到了问题,大多数 onebot 实现会把原因放到 message 字段。基本可以等同于在 java 中抛出异常,或者说是 Optional.isEmpty()

@MrXiaoM MrXiaoM merged commit 58a3a4c into MrXiaoM:main Apr 2, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants