不推荐登录调试,实在想调试的话就写kotlin的单元测试
Best posts made by CuteReimu
Latest posts made by CuteReimu
-
Go语言的SDK
因为自己的需要,写了一个Go的SDK:https://github.com/CuteReimu/mirai-sdk-http ,欢迎自取
相较于直接使用mirai-core和mirai-console而言,mirai-api-http的好处是,在你更新代码时,你无需重新登录QQ,减少登录次数在最近非常容易风控的环境下是一个非常好的优点。
目前实现了常用的(我可能会用到的)功能,后续慢慢补充吧。用法也非常简单:
package main import ( . "github.com/CuteReimu/mirai-sdk-http" "github.com/CuteReimu/mirai-sdk-http/utils" "github.com/sirupsen/logrus" ) func main() { logrus.SetLevel(logrus.DebugLevel) utils.InitLogger("./logs", utils.LogDebugLevel, utils.LogWithStack) log := utils.GetModuleLogger("robot") b, _ := Connect("localhost", 8080, WsChannelAll, "ABCDEFGHIJK", 123456789, false) b.ListenGroupMessage(func(message *GroupMessage) bool { _, err := b.SendGroupMessage(message.Sender.Group.Id, 0, append(MessageChain(&Plain{Text: "你说了:\n"}), message.MessageChain[1:]...), ) if err != nil { log.Println("发送失败: ", err) } return true }) select {} }
断线重连还没做,后续会做
(不过如果机器人和mirai是在同一台机器的话,一般也不会断线) -
RE: 怎么修改插件的源码
gradlew buildPlugin
打成比较小的包
gradlew buildPluginLegacy
打成比较大的包
gradlew runConsole
本地启动一个mirai console调试 -
如果我想要做一个词条功能,词条里有图片,序列化图片的时候
我用的
MessageChain.serializeToJsonString
和MessageChain.deserializeFromJsonString
,但是图片会只有图片id以及图片大小等一些信息。当这个图片过期被腾讯清除之后,再发这个消息时,用客户端点开图片就会提示图片已失效。这种情况,你们有没有什么好的办法处理?
-
RE: 【求助】消息发送失败时,从代码上如何得知?
@Cdm2883 在 【求助】消息发送失败时,从代码上如何得知? 中说:
可以参考MrXiaoM的mirai-console-dev-qrlogin插件
判断消息发送失败的代码在这里src/main/kotlin/QRLogin.kt#L63
照这样的话,直接拿
sendMessage
函数返回的MessageReceipt
可以不?例如:suspend fun handle(e: GroupMessageEvent) { val receipt: MessageReceipt<Group> = e.group.sendMessage(groupMsg) val ids = receipt.source.ids if (ids.isEmpty() || ids.any { it < 0 }) { logger.warning("群消息发送失败,你的账号可能已被风控") } }
-
【求助】消息发送失败时,从代码上如何得知?
例如:
fun handle(e: GroupMessageEvent) { e.group.sendMessage(groupMsg) }
但是
sendMessage
的定义是这样public interface Group { /** * 向这个对象发送消息. * * @throws EventCancelledException 当发送消息事件被取消时抛出 * @throws BotIsBeingMutedException 发送群消息时若 [Bot] 被禁言抛出 * @throws MessageTooLargeException 当消息过长时抛出 * @throws IllegalArgumentException 当消息内容为空时抛出 * * @return 消息回执. 可进行撤回 ([MessageReceipt.recall]) */ public override suspend fun sendMessage(message: Message): MessageReceipt<Group> }
在被风控、或者协议被改了等原因导致发送失败的时候,并不会抛出异常。在这种情况下,我应该如何得知发送失败了?(例如我希望打印一个错误日志)