MiraiForum

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

    请问怎么 覆盖重写 serializeToMiraiCode ,我想实现自己 消息码

    开发交流
    3
    12
    1288
    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.
    • R
      Rean last edited by

      1、如标题描述,mirai 使用 serializeToMiraiCode 序列号为 [mirai:xxx] 格式 ,我想修改为自定义的 [my:xxx] 消息码。

      2、请不要告诉我单独转换处理 MessageChain 这个我知道处理。

      3、因为自己代码特殊原因, 我想 覆盖 重写 serializeToMiraiCode 更方便自己使用,就是事件发生时候使用 event.message.serializeToMiraiCode() 获取到的就是 自己定义的 [my:xxx] 消息码。

      1 Reply Last reply Reply Quote 0
      • MrXiaoM
        MrXiaoM 童心未泯 last edited by

        详见 MiraiCode 内部实现
        https://github.com/mamoe/mirai/blob/dev/mirai-core-api/src/commonMain/kotlin/message/code/internal/impl.kt#L96-L142
        写死的,要么尝试反射改,要么全部CV过来改。
        另外我记得 MiraiCode 是缺了东西的,序列化 反序列化 之后会丢一些新版本添加的参数等等。

        R 1 Reply Last reply Reply Quote 0
        • R
          Rean @MrXiaoM last edited by

          @MrXiaoM 可不可以添加自己 序列化 方法到 event.message 里面, 事件发生调用 event.message.serializeToMyCode() 也可以

          MrXiaoM 1 Reply Last reply Reply Quote 0
          • MrXiaoM
            MrXiaoM 童心未泯 @Rean last edited by MrXiaoM

            @Rean 你把 MiraiCode 完整抄到你的项目,改个扩展函数名就行了。
            反序列化在我刚刚发的链接里。
            序列化那一段的 appendMiraiCodeTo 是写死在各个消息类型里面的,要完全自定义的话需要你重新写对每种消息的序列化。或者部分用原来的

            R 2 Replies Last reply Reply Quote 0
            • R
              Rean last edited by

              那就蛋疼了,这样岂不搞死人

              1 Reply Last reply Reply Quote 0
              • R
                Rean last edited by

                确实可以调用,实现就是需要自己去处理,完全可以,谢谢

                1 Reply Last reply Reply Quote 0
                • R
                  Rean @MrXiaoM last edited by

                  功能完全实现了,但是有没有办法添加到 massage 继承里面??

                  1 Reply Last reply Reply Quote 0
                  • R
                    Rean @MrXiaoM last edited by

                    @MrXiaoM 功能在 kotlin 里面实现了,但是我将 event 反射到其他语言 调用 event.message.serializeToMyCode() 会不存在, 相当于 serializeToMyCode 没有被继承到 message 里面, 则调用不到

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

                      可以去mirai仓库开个issue,这个可以重构一下 code parsers就好了

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        Rean @Him188 last edited by

                        @Him188 那样不行, 以后要是 源代码升级,我岂不每次都要弄,这不行

                        Him188 1 Reply Last reply Reply Quote 0
                        • Him188
                          Him188 @Rean last edited by

                          @Rean 你去开个issue就对了

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            Rean @Him188 last edited by

                            @Him188 OK

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