Skip to content

QuoteReply无法引用bot发出的ForwardMessage #2342

@KKW557

Description

@KKW557

问题描述

机器人发送一个ForwardMessage 然后引用发送QuoteReply失败

MessageReceipt<Group> plainMessage = event.getSubject().sendMessage("TEST");
plainMessage.quoteReply("PLAIN QUOTE TEST");

List<ForwardMessage.Node> nodeList = new ArrayList<>();

nodeList.add(new ForwardMessage.Node(event.getBot().getId(), (int) (System.currentTimeMillis() / 1000), event.getBot().getNick(), new PlainText("test")));

MessageReceipt<Group> forwardMessage = event.getSubject().sendMessage(new ForwardMessage(Collections.singletonList("T"), "T", "T", "T", "T", nodeList));

event.getSubject().sendMessage(new MessageChainBuilder().append(new QuoteReply(forwardMessage.getSource())).append("TEST").build());

forwardMessage.quoteReply("FORWARD QUOTE TEST");

复现

MessageReceipt<Group> forwardMessage = event.getSubject().sendMessage(new ForwardMessage(Collections.singletonList("T"), "T", "T", "T", "T", nodeList));
forwardMessage.quoteReply("FORWARD QUOTE TEST");

发送出一个ForwardMessage然后调用quoteReply或者直接new QuoteReply

event.getSubject().sendMessage(new MessageChainBuilder().append(new QuoteReply(forwardMessage.getSource())).append("TEST").build());

mirai-core 版本

2.13.0-RC2

bot-protocol

MACOS

其他组件版本

No response

系统日志


2022-11-11 10:36:33 W/Bot ******: An exception occurred when processing event. Subscriber scope: '<unnamed>'. Broadcaster scope: 'Bot.2979182632.EventDispatcher'
java.util.NoSuchElementException: List is empty.
	at kotlin.collections.CollectionsKt___CollectionsKt.last(_Collections.kt:418)
	at net.mamoe.mirai.internal.message.source.OnlineMessageSourceToGroupImpl$jceData$2.invoke(outgoingSourceImpl.kt:244)
	at net.mamoe.mirai.internal.message.source.OnlineMessageSourceToGroupImpl$jceData$2.invoke(outgoingSourceImpl.kt:216)
	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
	at net.mamoe.mirai.internal.message.source.OnlineMessageSourceToGroupImpl.getJceData(outgoingSourceImpl.kt:216)
	at net.mamoe.mirai.internal.message.source.OnlineMessageSourceToGroupImpl.toJceData(outgoingSourceImpl.kt:252)
	at net.mamoe.mirai.internal.message.protocol.impl.QuoteReplyProtocol$Encoder.process(QuoteReplyProtocol.kt:160)
	at net.mamoe.mirai.internal.message.protocol.impl.QuoteReplyProtocol$Encoder.process(QuoteReplyProtocol.kt:156)
	at net.mamoe.mirai.internal.message.protocol.encode.MessageEncoderProcessor.process(MessageEncoder.kt:35)
	at net.mamoe.mirai.internal.message.protocol.encode.MessageEncoderProcessor.process(MessageEncoder.kt:26)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process$suspendImpl(ProcessorPipeline.kt:287)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process(ProcessorPipeline.kt)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process$suspendImpl(ProcessorPipeline.kt:275)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process(ProcessorPipeline.kt)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl$encode$1$visitSingleMessage$1.invokeSuspend(MessageProtocolFacade.kt:279)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl$encode$1$visitSingleMessage$1.invoke(MessageProtocolFacade.kt)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl$encode$1$visitSingleMessage$1.invoke(MessageProtocolFacade.kt)
	at net.mamoe.mirai.internal.utils.RunCoroutineInPlaceKt.runCoroutineInPlace(runCoroutineInPlace.kt:26)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl$encode$1.visitSingleMessage(MessageProtocolFacade.kt:278)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl$encode$1.visitSingleMessage(MessageProtocolFacade.kt:276)
	at net.mamoe.mirai.message.data.visitor.AbstractMessageVisitor.visitMessageMetadata(MessageVisitor.kt:117)
	at net.mamoe.mirai.message.data.visitor.AbstractMessageVisitor.visitQuoteReply(MessageVisitor.kt:130)
	at net.mamoe.mirai.message.data.QuoteReply.accept(QuoteReply.kt:68)
	at net.mamoe.mirai.message.data.LinearMessageChainImpl.acceptChildren(impl.kt:197)
	at net.mamoe.mirai.message.data.visitor.RecursiveMessageVisitor.visitMessage(MessageVisitor.kt:243)
	at net.mamoe.mirai.message.data.visitor.RecursiveMessageVisitor.visitMessage(MessageVisitor.kt:237)
	at net.mamoe.mirai.message.data.visitor.AbstractMessageVisitor.visitMessageChain(MessageVisitor.kt:104)
	at net.mamoe.mirai.message.data.MessageChain.accept(MessageChain.kt:262)
	at net.mamoe.mirai.message.data.visitor.MessageVisitorKt.accept(MessageVisitor.kt:261)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl.encode(MessageProtocolFacade.kt:276)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacade$INSTANCE.encode(MessageProtocolFacade.kt)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacade.encode$default(MessageProtocolFacade.kt:64)
	at net.mamoe.mirai.internal.message.protocol.outgoing.GroupMessageProtocolStrategy.createPacketsForGeneralMessage$suspendImpl(MessageProtocolStrategy.kt:301)
	at net.mamoe.mirai.internal.message.protocol.outgoing.GroupMessageProtocolStrategy.createPacketsForGeneralMessage(MessageProtocolStrategy.kt)
	at net.mamoe.mirai.internal.message.protocol.outgoing.GroupMessageProtocolStrategy.createPacketsForGeneralMessage(MessageProtocolStrategy.kt:139)
	at net.mamoe.mirai.internal.message.protocol.impl.GeneralMessageSenderProtocol$GeneralMessageSender.process(GeneralMessageSenderProtocol.kt:64)
	at net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessageProcessorAdapter.process(OutgoingMessagePipelineProcessor.kt:26)
	at net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessageProcessorAdapter.process(OutgoingMessagePipelineProcessor.kt:20)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process$suspendImpl(ProcessorPipeline.kt:287)
	at net.mamoe.mirai.internal.pipeline.AbstractProcessorPipeline.process(ProcessorPipeline.kt)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl.preprocessAndSendOutgoingImpl(MessageProtocolFacade.kt:361)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacadeImpl.preprocessAndSendOutgoing(MessageProtocolFacade.kt:345)
	at net.mamoe.mirai.internal.message.protocol.MessageProtocolFacade$INSTANCE.preprocessAndSendOutgoing(MessageProtocolFacade.kt)
	at net.mamoe.mirai.internal.contact.AbstractUserKt.sendMessageImpl(AbstractUser.kt:263)
	at net.mamoe.mirai.internal.contact.CommonGroupImpl.sendMessage$suspendImpl(GroupImpl.kt:203)
	at net.mamoe.mirai.internal.contact.CommonGroupImpl.sendMessage(GroupImpl.kt)
	at net.mamoe.mirai.message.MessageReceipt$quoteReply$4.invoke(MessageReceipt.kt:137)
	at net.mamoe.mirai.message.MessageReceipt$quoteReply$4.invoke(MessageReceipt.kt)
	at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.invokeSuspend(IntrinsicsJvm.kt:205)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlin.coroutines.ContinuationKt.startCoroutine(Continuation.kt:115)
	at me.him188.kotlin.jvm.blocking.bridge.internal.RunSuspendKt.$runSuspend$(RunSuspend.kt:18)
	at net.mamoe.mirai.message.MessageReceipt.quoteReply(MessageReceipt.kt)
	at icu.kevin557.klbot.command.impl.Test.run(Test.java:32)
	at icu.kevin557.klbot.bot.KLBot.lambda$run$0(KLBot.java:95)
	at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:626)
	at net.mamoe.mirai.event.EventChannel$subscribeAlways$2$1.invoke(EventChannel.kt:626)
	at kotlinx.coroutines.InterruptibleKt.runInterruptibleInExpectedContext(Interruptible.kt:51)
	at kotlinx.coroutines.InterruptibleKt.access$runInterruptibleInExpectedContext(Interruptible.kt:1)
	at kotlinx.coroutines.InterruptibleKt$runInterruptible$2.invokeSuspend(Interruptible.kt:43)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

网络日志

No response

补充信息

getSources()可以正常获取到

Metadata

Metadata

Assignees

No one assigned

    Labels

    M优先级: 主要s:core子系统: mirai-coret:problem类型: 不容易归类为特性或 bug 的综合问题

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions