MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    上传群文件回执问题

    开发交流
    3
    8
    601
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 1
      1130600015 last edited by

      请教一下,有什么办法可以获得机器人上传群文件的消息回执,即获得MessageSource等信息

      1 Reply Last reply Reply Quote 0
      • cssxsh
        cssxsh last edited by

        你这是想干什么

        1 1 Reply Last reply Reply Quote 0
        • 1
          1130600015 @cssxsh last edited by

          @cssxsh 记录id,便于后面有用户引用回复这个上传文件消息的时候做处理

          1 Reply Last reply Reply Quote 0
          • 1
            1130600015 last edited by 1130600015

            经过不断尝试,发现以下办法可以实现这个需求。
            新api无法实现需求

                public void uploadImage(String dir, String fileName, File image, Group group) {
                    RemoteFile root = group.getFilesRoot(); //idea标注已弃用
                    RemoteFile remoteDir = root.resolve(dir);
                    if (!remoteDir.exists()) {
                        remoteDir.mkdir();
                    }
                    RemoteFile remoteFile = remoteDir.resolve(fileName);
                    MessageReceipt<Contact> receipt = remoteFile.uploadAndSend(image);
                
                }
            

            目前只能找到废弃的api的办法,也是能实现需求。
            但是需要注意的是:

            1. 通过上述代码创建dir,再上传图片没有问题,但是已经存在的dir,通过resolve方法获得到的dir对应的remoteFile上传文件会报错
            2. 如果要上传到已经存在的文件夹,需要用root对应的remotefile获取到其listFilesa api 通过遍历的方式获取到你想要的remoteFile dir,再进行上传则不会报错。即通过resolve获得到的dir file无法进行文件的上传。

            希望作者能尽快完善群文件新api对获取群文件上传消息回执的支持。感谢!

            wssy001 1 Reply Last reply Reply Quote 0
            • wssy001
              wssy001 ⭐2021⭐ @1130600015 last edited by wssy001

              群文件上传成功会触发GroupMessageEvent,你只需要判断该event中是否包含FileMessage即可。
              个人建议,在你处理GroupMessageEvent代码中打个断点,然后上传一个群文件看看GroupMessageEvent中有哪些信息是你需要的。
              顺带说一下,群文件删除是会触发MessageRecallEvent.GroupRecall事件,但从中无法获取被删除文件的信息,可能需要其他方法或途径实现,还是等待大佬答疑解惑吧。

              1 1 Reply Last reply Reply Quote 0
              • 1
                1130600015 @wssy001 last edited by 1130600015

                @wssy001

                 Bot bot = BotFactory.INSTANCE.newBot(new Long(account), password, new BotConfiguration() {{
                           setProtocol(MiraiProtocol.ANDROID_PAD);
                           String proto = getProtocol().name();
                           setWorkingDir(new File(workDir));
                           File dir = new File(workDir);
                           if (!dir.exists()) {
                               dir.mkdirs();
                           }
                           this.disableContactCache();
                           setCacheDir(new File("cache"));
                           fileBasedDeviceInfo(account + "-" + proto + "-" + "device.json");
                       }});
                 
                       GlobalEventChannel.INSTANCE.subscribeAlways(Event.class, event -> {
                           System.out.println(event.getClass().getSimpleName());
                      
                       });
                       bot.login();
                       Group group = GroupUtil.getDataGroup();
                       AbsoluteFolder root = group.getFiles().getRoot();
                       File file = new File("/Users/jiashu/Downloads/1.jpg");
                       root.uploadNewFile("/1.jpg", ExternalResource.create(file).toAutoCloseable());
                
                //程序运行结果
                BotOnlineEvent
                2022-12-13 23:46:45 I/Bot 2567327040: Bot login successful.
                2022-12-13 23:46:45 V/Net 2567327040: Send: OidbSvc.0x6d6_0(OidbSvc.0x6d6_0)
                GetMsgSuccess
                2022-12-13 23:46:45 I/Net 2567327040: Syncing friend message history: Success.
                2022-12-13 23:46:45 V/Net 2567327040: Send: OidbSvc.0x6d9_4(OidbSvc.0x6d9_4)
                2022-12-13 23:46:45 V/Net 2567327040: Recv: OidbSvc.0x6d6_0
                SendGroupMessageReceipt
                2022-12-13 23:46:46 V/Bot 2567327040: Group(701096958) <- [mirai:file:1.jpg, id=/304fe63e-b561-4b14-81d1-583969cbc8ca, internalId=102, size=229529]
                2022-12-13 23:46:46 V/Net 2567327040: Recv: OidbSvc.0x6d9_4
                2022-12-13 23:46:46.137  INFO 35457 --- [           main] c.zjs.facesignin.FacesigninApplication   : Started FacesigninApplication in 3.501 seconds (JVM running for 3.762)
                ConfigPush
                2022-12-13 23:46:47 V/Net 2567327040: Saving bdh session to cache
                2022-12-13 23:46:47 V/Net 2567327040: Send: ConfigPushSvc.PushResp(ConfigPushSvc.PushResp)
                2022-12-13 23:46:47 V/Net 2567327040: Recv: ConfigPushSvc.PushReq
                

                并没有groupmessageEvent,唯一看到的一个receipt当我去尝试获得这个实例的时候。idea告诉我使用了来自不同模块的 Kotlin 内部声明 ,所以我好像也获得不到这个reciept。代码如下
                if (event instanceof GroupMessageProcessor.SendGroupMessageReceipt)

                wssy001 1 Reply Last reply Reply Quote 0
                • cssxsh
                  cssxsh last edited by

                  其实文件 id 就是 MessageSource id
                  要判断回复了什么文件还是可以的

                  1 Reply Last reply Reply Quote 0
                  • wssy001
                    wssy001 ⭐2021⭐ @1130600015 last edited by wssy001

                    @1130600015
                    我用的是mirai-core-jvm 2.13.2

                    import net.mamoe.mirai.event.events.GroupMessageEvent;
                    
                    bot.getEventChannel()
                                        .subscribeAlways(GroupMessageEvent.class, groupMessageHandler::handle);
                    

                    88bf28d3-c48c-4e68-a40e-44f71258c24d-image.png
                    可以点击此处在线查看Mirai提供的事件列表

                    1 Reply Last reply Reply Quote 0
                    • 1 / 1
                    • First post
                      Last post
                    Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact