1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-24 20:43:33 +08:00

add: MockGroupTodoImpl

This commit is contained in:
cssxsh 2023-08-12 16:49:45 +08:00
parent 315ee52ef3
commit 58337b4221
No known key found for this signature in database
GPG Key ID: 92849F91CA9D8ECE

View File

@ -9,49 +9,117 @@
package net.mamoe.mirai.mock.internal.contact.todo
import kotlinx.coroutines.launch
import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.contact.checkBotPermission
import net.mamoe.mirai.contact.todo.GroupTodoRecord
import net.mamoe.mirai.contact.todo.GroupTodoStatus
import net.mamoe.mirai.event.broadcast
import net.mamoe.mirai.event.events.MemberCompleteTodoEvent
import net.mamoe.mirai.event.events.MemberRecallTodoEvent
import net.mamoe.mirai.event.events.MemberSetTodoEvent
import net.mamoe.mirai.message.data.MessageSource
import net.mamoe.mirai.mock.contact.todo.MockGroupTodo
import net.mamoe.mirai.mock.internal.contact.MockGroupImpl
import net.mamoe.mirai.utils.currentTimeSeconds
import net.mamoe.mirai.utils.toLongUnsigned
import java.util.concurrent.atomic.AtomicReference
internal class MockGroupTodoImpl(
private val group: MockGroupImpl
) : MockGroupTodo {
private val status: AtomicReference<GroupTodoStatus> = AtomicReference()
private val current: AtomicReference<GroupTodoRecord> = AtomicReference()
override suspend fun status(): GroupTodoStatus {
TODO("Not yet implemented")
return status.get() ?: GroupTodoStatus.NONE
}
override suspend fun current(): GroupTodoRecord? {
TODO("Not yet implemented")
return current.get()
}
override suspend fun set(source: MessageSource): GroupTodoRecord {
TODO("Not yet implemented")
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
val record = GroupTodoRecord(
group = group,
title = source.originalMessage.contentToString(),
operator = group.botAsMember,
operatorId = group.bot.id,
operatorNick = group.botAsMember.nick,
operatorTime = currentTimeSeconds().toInt(),
msgSeq = source.ids.first().toLongUnsigned(),
msgRandom = source.internalIds.first().toLongUnsigned()
)
current.set(record)
status.set(GroupTodoStatus.NONE)
group.launch {
MemberSetTodoEvent(member = group.botAsMember).broadcast()
}
return record
}
override suspend fun recall(source: MessageSource) {
TODO("Not yet implemented")
val current = checkNotNull(current.get()) { "current no todo" }
val id = source.ids.first().toLongUnsigned()
val internalId = source.internalIds.first().toLongUnsigned()
check(id == current.msgSeq && internalId == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.NONE)
group.launch {
MemberRecallTodoEvent(member = group.botAsMember).broadcast()
}
}
override suspend fun recall(record: GroupTodoRecord) {
TODO("Not yet implemented")
val current = checkNotNull(current.get()) { "current no todo" }
check(record.msgSeq == current.msgSeq && record.msgRandom == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.NONE)
group.launch {
MemberRecallTodoEvent(member = group.botAsMember).broadcast()
}
}
override suspend fun complete(source: MessageSource) {
TODO("Not yet implemented")
val current = checkNotNull(current.get()) { "current no todo" }
val id = source.ids.first().toLongUnsigned()
val internalId = source.internalIds.first().toLongUnsigned()
check(id == current.msgSeq && internalId == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.COMPLETED)
group.launch {
MemberCompleteTodoEvent(member = group.botAsMember).broadcast()
}
}
override suspend fun complete(record: GroupTodoRecord) {
TODO("Not yet implemented")
val current = checkNotNull(current.get()) { "current no todo" }
check(record.msgSeq == current.msgSeq && record.msgRandom == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.COMPLETED)
group.launch {
MemberCompleteTodoEvent(member = group.botAsMember).broadcast()
}
}
override suspend fun close(source: MessageSource) {
TODO("Not yet implemented")
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
val current = checkNotNull(current.get()) { "current no todo" }
val id = source.ids.first().toLongUnsigned()
val internalId = source.internalIds.first().toLongUnsigned()
check(id == current.msgSeq && internalId == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.CLOSED)
group.launch {
MemberSetTodoEvent(member = group.botAsMember).broadcast()
}
}
override suspend fun close(record: GroupTodoRecord) {
TODO("Not yet implemented")
group.checkBotPermission(MemberPermission.ADMINISTRATOR)
val current = checkNotNull(current.get()) { "current no todo" }
check(record.msgSeq == current.msgSeq && record.msgRandom == current.msgRandom) { "todo no match" }
status.set(GroupTodoStatus.CLOSED)
group.launch {
MemberSetTodoEvent(member = group.botAsMember).broadcast()
}
}
}