mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-24 20:43:33 +08:00
add: MockGroupTodoImpl
This commit is contained in:
parent
315ee52ef3
commit
58337b4221
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user