Merge remote-tracking branch 'origin/master'

This commit is contained in:
Him188 2020-02-04 12:03:28 +08:00
commit d678d14a57
5 changed files with 41 additions and 32 deletions

View File

@ -68,38 +68,43 @@ internal class MemberImpl(
override val coroutineContext: CoroutineContext, override val coroutineContext: CoroutineContext,
override val permission: MemberPermission override val permission: MemberPermission
) : ContactImpl(), Member, QQ by qq { ) : ContactImpl(), Member, QQ by qq {
override val bot: QQAndroidBot get() = qq.bot
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 bot: QQAndroidBot by bot.unsafeWeakRef()
override suspend fun mute(durationSeconds: Int): Boolean { override suspend fun mute(durationSeconds: Int): Boolean {
if (bot.uin == this@MemberImpl.qq.id)//不能自己禁言自己 if (bot.uin == this.qq.id) {
{
return false return false
} }
//判断有无禁言权限 //判断有无禁言权限
val myPermission = group.get(bot.uin).permission val myPermission = group.botPermission
if (myPermission == MemberPermission.ADMINISTRATOR || myPermission == MemberPermission.OWNER) { val targetPermission = this.permission
return if (myPermission == MemberPermission.OWNER || (myPermission == MemberPermission.ADMINISTRATOR && permission == MemberPermission.MEMBER)) { if (myPermission != MemberPermission.OWNER) {
if (targetPermission == MemberPermission.OWNER || targetPermission == MemberPermission.ADMINISTRATOR) {
return false
}
} else if (myPermission == MemberPermission.MEMBER) {
return false
}
try {
bot.network.run { bot.network.run {
val response = TroopManagement.Mute( val response = TroopManagement.Mute(
client = bot.client, client = bot.client,
memberUin = id,
groupCode = group.id, groupCode = group.id,
memberUin = this@MemberImpl.id,
timeInSecond = durationSeconds timeInSecond = durationSeconds
).sendAndExpect<TroopManagement.Mute.Response>() ).sendAndExpect<TroopManagement.Mute.Response>()
} }
true return true
} else { } catch (e: Exception) {
false
}
} else {
return false return false
} }
} }
override suspend fun unmute() { override suspend fun unmute(): Boolean {
TODO("not implemented") return mute(0)
} }
} }
@ -115,6 +120,7 @@ internal class GroupImpl(
override var members: ContactList<Member> override var members: ContactList<Member>
) : ContactImpl(), Group { ) : ContactImpl(), Group {
override lateinit var owner: Member override lateinit var owner: Member
override var botPermission: MemberPermission = MemberPermission.MEMBER
override suspend fun quit(): Boolean { override suspend fun quit(): Boolean {
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.

View File

@ -178,6 +178,9 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
coroutineContext = group.coroutineContext, coroutineContext = group.coroutineContext,
permission = MemberPermission.OWNER permission = MemberPermission.OWNER
) )
if (it.dwGroupOwnerUin == bot.uin) {
group.botPermission == MemberPermission.OWNER
}
toGet[group] = contactList toGet[group] = contactList
bot.groups.delegate.addLast(group) bot.groups.delegate.addLast(group)
} }
@ -217,9 +220,9 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
bot.logger.info("加入群组: ${fillUntil9(bot.groups.size)}\t\t\t 加载时间: ${currentTimeMillis - friendLoadFinish}ms") bot.logger.info("加入群组: ${fillUntil9(bot.groups.size)}\t\t\t 加载时间: ${currentTimeMillis - friendLoadFinish}ms")
groupInfo.forEach { groupInfo.forEach {
if (it.value == -1) { if (it.value == -1) {
bot.logger.error("群组号码: ${fillUntil9(it.key)}\t\t\t 成员数量加载失败") bot.logger.error("群组号码: ${fillUntil9(it.key)}\t 成员数量加载失败\t BOT权限: " + bot.groups[it.key].botPermission.toString())
} else { } else {
bot.logger.info("群组号码: ${fillUntil9(it.key)}\t\t\t 成员数量: ${it.value}") bot.logger.info("群组号码: ${fillUntil9(it.key)}\t 成员数量: ${it.value}\t")
} }
} }
bot.logger.info("====================Mirai Bot List初始化完毕====================") bot.logger.info("====================Mirai Bot List初始化完毕====================")
@ -247,7 +250,11 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
coroutineContext = group.coroutineContext, coroutineContext = group.coroutineContext,
permission = when { permission = when {
it.memberUin == owner -> MemberPermission.OWNER it.memberUin == owner -> MemberPermission.OWNER
it.dwFlag == 1L -> MemberPermission.ADMINISTRATOR it.dwFlag == 1L -> MemberPermission.ADMINISTRATOR.apply {
if (it.memberUin == bot.uin) {
group.botPermission = MemberPermission.ADMINISTRATOR
}
}
else -> MemberPermission.MEMBER else -> MemberPermission.MEMBER
} }
) )

View File

@ -18,7 +18,7 @@ internal object TroopManagement {
internal object Mute : OutgoingPacketFactory<Mute.Response>("OidbSvc.0x570_8") { internal object Mute : OutgoingPacketFactory<Mute.Response>("OidbSvc.0x570_8") {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): Response {
// this.debugPrintThis() //屁用没有
return Response return Response
} }
@ -47,16 +47,9 @@ internal object TroopManagement {
) )
} }
} }
object Response : Packet object Response : Packet
} }
fun Unmute(
client: QQAndroidClient,
groupCode: Long,
memberUin: Long
): OutgoingPacket = Mute.invoke(client, groupCode, memberUin, 0)
internal object MuteAll : OutgoingPacketFactory<LoginPacket.LoginPacketResponse>("OidbSvc.0x89a_0") { internal object MuteAll : OutgoingPacketFactory<LoginPacket.LoginPacketResponse>("OidbSvc.0x89a_0") {
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacket.LoginPacketResponse { override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): LoginPacket.LoginPacketResponse {

View File

@ -19,6 +19,9 @@ interface Group : Contact, CoroutineScope {
*/ */
val owner: Member val owner: Member
val botPermission: MemberPermission
/** /**
* 群名称 (同步事件更新) * 群名称 (同步事件更新)
*/ */

View File

@ -36,7 +36,7 @@ interface Member : QQ, Contact {
/** /**
* 解除禁言 * 解除禁言
*/ */
suspend fun unmute() suspend fun unmute(): Boolean
} }
@ExperimentalTime @ExperimentalTime