@hundun000 没事了……是我放错workDir了
hundun000 发布的帖子
-
RE: 无法登录的临时处理方案
直接使用mirai-core 2.6.1。今天开发时因为bug,导致一个账号短时间内频繁登录,然后原本能用的device.json不能用了
25|mirai-server | 2021-06-21 18:33:28 V/Net 277xxxx622: Recv: UnsafeLogin(bot=Bot(277xxxx622), url=https://ti.qq.com/safe/verify?_wv=2&_wwv=128&uin=277xxxx622&sig=6ttKI8dCNzJAtvvfm%2FHX4I9stijjz0V2iJcvqTqYF9xRvMnwqjDxmdgwGMO9SwmK%2F9lZqV8SzqHVERNv9Y3A2TBsCTlwJVLq3Vs%2BFJxzP7HCz0EA7qiDkWfWz4BTDVCS)
使用MiraiAndroid,重新生成device.json,扫码验证,然后在MiraiAndroid登录成功。但是导出device.json放到服务器,还是报上面的错。
-
RE: 架构设计:抽离出“纯bot逻辑”?
@lc6a 谢谢,我晚点研究一下。
我之前试过mirai+springboot,独立启动版SpringBootApplication作为main会弄,不过不够精通springboot,不会弄作为插件时如何正确加载SpringContext等,最后就忍痛移除了Springboot。不过即使移除了Springboot,但是我的框架还是保留了AOP和IOC的风格,再改回Springboot也可以考虑。
-
RE: 架构设计:抽离出“纯bot逻辑”?
@mill413
嗯,我差不多也是这样实现了。主要考虑是我的功能a、b其实分别指的是一个大功能的集合。具体来说,a是明日方舟游戏助手,包含数个明日方舟相关的子功能;b是舰队收藏游戏助手,包含数个舰队收藏相关的子功能;用户或社区开发者,应该大多数都是只希望使用/开发其中一个游戏的大功能吧?即使说明了可以通过配置不启用另一个游戏的大功能。感觉还是不如分开成两个插件。 -
RE: 架构设计:抽离出“纯bot逻辑”?
研究了几天,增加了对插件设计粒度的理解。发现我的独立应用不适合转为插件……至少是不适合转为“一个插件”。
假设需求是:第一个bot账号加入群A,需要功能a和功能b;第二个bot账号加入群B,需要功能b和功能c;
如果一开始就按插件来实现这个需求,较好的方案应该是:开发出插件a、插件b、插件c。把插件a和插件b放入第一个mirai-console然后登陆第一个bot账号。把插件b和插件c放入第二个mirai-console然后登陆第二个bot账号。
然而我为独立应用写的“纯bot逻辑”是:写一个同时提供a、b、c功能的服务,和一个可配置的调度器,配成第一个bot账号只能使用其中的a、b功能,第二个bot账号只能使用其中的b、c功能。
此时再试图把“纯bot逻辑”包装成插件,就会觉得这个同时提供a、b、c功能的插件“过重”,混杂了没有什么关系的功能a、b,还需要学习配置调度器。这不是一个合适的插件。
-
RE: BotFactory依次创建两个bot时出现exception
补充:
分别使用了两个deviceInfoFileName构造BotConfigurationString deviceInfoFileName = botPrivateSettings.getBotAccount() + "_device.json"; Bot miraiBot = BotFactory.INSTANCE.newBot(botPrivateSettings.getBotAccount(), botPrivateSettings.getBotPwd(), new BotConfiguration() { { fileBasedDeviceInfo(deviceInfoFileName); setProtocol(MiraiProtocol.ANDROID_PHONE); enableContactCache(); } });
是建议两个deviceInfoFileName处于不同文件夹吗?(因为还要判断和自动创建文件夹就偷懒了
-
BotFactory依次创建两个bot时出现exception
使用2.6.1 mirai-core。
可复现。BotFactory创建第一个bot并执行bot.login(),等第一个bot可以收到群消息事件时,再BotFactory创建第二个bot并执行bot.login()。此时异常被打印为error级日志, 第二个bot可继续登录和正常工作。
19|mirai-server | 2021-06-17 12:29:33 E/Bot 277****622: Failed to load account secrets from local cache. Invalidating cache...
19|mirai-server | net.mamoe.mirai.internal.utils.crypto.DecryptionFailedException
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA.fail(TEA.kt:295)
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA.access$fail(TEA.kt:33)
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA$doOption$7.invoke(TEA.kt:271)
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA.doOption(TEA.kt:291)
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA.decrypt(TEA.kt:315)
19|mirai-server | at net.mamoe.mirai.internal.utils.crypto.TEA.decrypt$default(TEA.kt:314)
19|mirai-server | at net.mamoe.mirai.internal.QQAndroidBot.loadSecretsFromCacheOrCreate(QQAndroidBot.kt:108)
19|mirai-server | at net.mamoe.mirai.internal.QQAndroidBot.initClient(QQAndroidBot.kt:133)
19|mirai-server | at net.mamoe.mirai.internal.QQAndroidBot.<init>(QQAndroidBot.kt:125)
19|mirai-server | at net.mamoe.mirai.internal.BotFactoryImpl.newBot(BotFactory.kt:34)
19|mirai-server | at net.mamoe.mirai.BotFactory$INSTANCE.newBot(BotFactory.kt:115)
19|mirai-server | at com.hundun.mirai.server.SpringConsole$BotThread.run(SpringConsole.java:76)
看下了net.mamoe.mirai.internal.QQAndroidBot.loadSecretsFromCacheOrCreate源码,猜测是第二次创建时检测到第一次的缓存存在就试图去取。
应该改为根据账号区分缓存,或是无缓存的账号只需要info级别的日志?
-
RE: bot一段时间后不再收到对话消息,且出现Received unknown commandName: StatSvc.QueryHB;
重启应用并重新登录后未再出现此问题。检索了下两周以来的日志,该问题也只出现了这一次。
不过我还是觉得当时并没有进行同时登陆强制下线或手动踢下线。 -
bot一段时间后不再收到对话消息,且出现Received unknown commandName: StatSvc.QueryHB;
前提:
使用的是自己写的直接使用mirai-core的程序,同时登陆两个bot(277xxxx622,120xxxx944),两个bot均登陆成功并收发消息了一段时间。问题:
10:02:04起,观察到同一个群里,bot_120xxxx944可以正常收到对话消息(之后也一直正常),而bot_277xxxx622不再收到对话消息:只有 2021-06-15 10:02:04 V/Bot 120xxxx944: [群名(群号)] 群员名(群员号) -> 消息
没有 2021-06-15 10:02:04 V/Bot 277xxxx622: [群名(群号)] 群员名(群员号) -> 消息上述现象出现之后bot_277xxxx622的第一次Send: StatSvc.SimpleGet日志:
19|mirai-s | 2021-06-15 10:02:48 V/Net 277xxxx622: Send: StatSvc.SimpleGet
19|mirai-s | 2021-06-15 10:02:48 D/Net 277xxxx622: Received unknown commandName: StatSvc.QueryHB
19|mirai-s | 2021-06-15 10:02:48 V/Net 277xxxx622: Recv: Response(SimpleGet.Response)第二次以及之后的每一次Send: StatSvc.SimpleGet日志:
19|mirai-server | 2021-06-15 10:20:49 V/Net 277xxxx622: Send: StatSvc.SimpleGet
19|mirai-server | 2021-06-15 10:20:49 D/Net 277xxxx622: Received unknown commandName: StatSvc.QueryHB
19|mirai-server | 2021-06-15 10:20:49 D/Net 277xxxx622: Received unknown commandName: StatSvc.QueryHB
19|mirai-server | 2021-06-15 10:20:49 V/Net 277xxxx622: Recv: Response(SimpleGet.Response)其Heartbeat.Alive无异常。
19|mirai-server | 2021-06-15 10:30:21 V/Net 277xxxx622: Send: Heartbeat.Alive
19|mirai-server | 2021-06-15 10:30:21 V/Net 277xxxx622: Recv: Heartbeat.Alive.Response使用PC端qq登录277xxxx622可正常收发消息。
-
RE: 架构设计:抽离出“纯bot逻辑”?
实际上可以考虑只支持 mirai-console,因为 mirai-console 可以像 core 一样嵌入使用?
我想的是《Mirai生态图》里的“你编写的机器人程序”和“你编写的插件”之间怎么管理。所以保持原图“你编写的机器人程序”只依赖core不依赖console。
-
RE: 架构设计:抽离出“纯bot逻辑”?
@nambers 在 架构设计:抽离出“纯bot逻辑”? 中说:
我一直也打算提出成单独的jar文件
4. 动态引用需要每个方法都写一次,计划暂时变更为用gradle引入(compile)本地jar包我现在是botLogic一个子项目, 作为独立应用的Loader一个子项目,作为Plugin用一个子项目。然后通过gradle 子项目间依赖来使用,开发期间会动态依赖botLogic源码,改了botLogic不需要重新打成jar。
dependencies {
implementation project(":botLogic");不过这样弄出了gradle子项目关系,就不能照抄mirai教程的gradle写法了,现在我的Plugin子项目刚起步,我还不确定它的mirai相关依赖配置正确没有。
-
架构设计:抽离出“纯bot逻辑”?
我已经写了一个直接用mirai-core作为独立应用启动的项目,准备尝试写它的mirai-console-plugin版本。逐步改造的时候发现,我的项目的架构可能会变成下图所示。
我的问题是:- “抽离出一个纯bot逻辑模块,其可以同时作为独立应用或者作为插件”是一个好的设计思路吗?
- 纯bot逻辑模块使用java,假设图中的适配器和BasePlugin使用kotlin,这样是不是在实践“建议开发插件时混用java和kotlin”?
- 基于以上两点,这个设计方案值得作为某种template推广吗?