Commit 0f587cad authored by jiahua.liu's avatar jiahua.liu

Group Permissions

parent 826331c5
...@@ -53,13 +53,12 @@ internal class QQImpl(bot: QQAndroidBot, override val coroutineContext: Coroutin ...@@ -53,13 +53,12 @@ internal class QQImpl(bot: QQAndroidBot, override val coroutineContext: Coroutin
internal class MemberImpl( internal class MemberImpl(
qq: QQImpl, qq: QQImpl,
group: GroupImpl, group: GroupImpl,
override val coroutineContext: CoroutineContext override val coroutineContext: CoroutineContext,
override val permission: MemberPermission
) : ContactImpl(), Member, QQ by qq { ) : ContactImpl(), Member, QQ by qq {
override val group: GroupImpl by group.unsafeWeakRef() override val group: GroupImpl by group.unsafeWeakRef()
val qq: QQImpl by qq.unsafeWeakRef() val qq: QQImpl by qq.unsafeWeakRef()
override val permission: MemberPermission
get() = TODO("not implemented")
override suspend fun mute(durationSeconds: Int): Boolean { override suspend fun mute(durationSeconds: Int): Boolean {
TODO("not implemented") TODO("not implemented")
...@@ -84,9 +83,7 @@ internal class GroupImpl( ...@@ -84,9 +83,7 @@ internal class GroupImpl(
override lateinit var owner: Member override lateinit var owner: Member
override fun getMember(id: Long): Member = override fun getMember(id: Long): Member =
members.delegate.filteringGetOrAdd( members.delegate.filterGetOrNull { it.id == id } ?: error("Failed to find Member${id} in group ${groupCode}")
{ it.id == id },
{ MemberImpl(bot.getQQ(id) as QQImpl, this, coroutineContext) })
override suspend fun updateGroupInfo(): net.mamoe.mirai.data.GroupInfo { override suspend fun updateGroupInfo(): net.mamoe.mirai.data.GroupInfo {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates. TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
......
...@@ -12,6 +12,7 @@ import kotlinx.io.core.use ...@@ -12,6 +12,7 @@ import kotlinx.io.core.use
import net.mamoe.mirai.contact.ContactList import net.mamoe.mirai.contact.ContactList
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.data.MultiPacket import net.mamoe.mirai.data.MultiPacket
import net.mamoe.mirai.data.Packet import net.mamoe.mirai.data.Packet
import net.mamoe.mirai.event.* import net.mamoe.mirai.event.*
...@@ -172,13 +173,18 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -172,13 +173,18 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
contactList contactList
) )
group.owner = group.owner =
MemberImpl(QQImpl(bot, EmptyCoroutineContext, it.dwGroupOwnerUin!!), group, EmptyCoroutineContext) MemberImpl(
QQImpl(bot, EmptyCoroutineContext, it.dwGroupOwnerUin!!),
group,
EmptyCoroutineContext,
MemberPermission.OWNER
)
toGet[group] = contactList toGet[group] = contactList
bot.groups.delegate.addLast(group) bot.groups.delegate.addLast(group)
} }
toGet.forEach { toGet.forEach {
try { try {
getTroopMemberList(it.key, it.value) getTroopMemberList(it.key, it.value, it.key.owner.id)
} catch (e: Exception) { } catch (e: Exception) {
bot.logger.info("群${it.key.groupCode}的列表拉取失败, 将采用动态加入") bot.logger.info("群${it.key.groupCode}的列表拉取失败, 将采用动态加入")
} }
...@@ -191,7 +197,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -191,7 +197,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
} }
suspend fun getTroopMemberList(group: GroupImpl, list: ContactList<Member>): ContactList<Member> { suspend fun getTroopMemberList(group: GroupImpl, list: ContactList<Member>, owner: Long): ContactList<Member> {
bot.logger.info("开始获取群[${group.groupCode}]成员列表") bot.logger.info("开始获取群[${group.groupCode}]成员列表")
var size = 0 var size = 0
var nextUin = 0L var nextUin = 0L
...@@ -203,13 +209,26 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler ...@@ -203,13 +209,26 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
nextUin nextUin
).sendAndExpect<FriendList.GetTroopMemberList.Response>(timeoutMillis = 3000) ).sendAndExpect<FriendList.GetTroopMemberList.Response>(timeoutMillis = 3000)
data.members.forEach { data.members.forEach {
list.delegate.addLast( if (it.memberUin != bot.uin) {
MemberImpl( list.delegate.addLast(
QQImpl(bot, EmptyCoroutineContext, it.memberUin), MemberImpl(
group, QQImpl(bot, EmptyCoroutineContext, it.memberUin),
EmptyCoroutineContext group,
EmptyCoroutineContext,
when {
it.memberUin == owner -> {
MemberPermission.OWNER
}
it.dwFlag == 1L -> {
MemberPermission.ADMINISTRATOR
}
else -> {
MemberPermission.MEMBER
}
}
)
) )
) }
} }
size += data.members.size size += data.members.size
nextUin = data.nextUin nextUin = data.nextUin
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment