MiraiForum

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

    请问MessageReceipt如何判断是否可撤回(超时/已撤回/权限不足)

    开发交流
    4
    10
    192
    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.
    • HollisMeynell
      HollisMeynell last edited by HollisMeynell

      如题,使用场景是程序需要oauth授权链接,想当认证成功后及时撤回防止多次认证,现在是使用了map存储返回的消息,另开一个线程当得到授权后撤回消息并从map中删除messagereceipt,不过因为有一些小伙伴拿到了授权链接但是不去认证或者超出了可撤回时间,导致messagereceipt无法删除发生内存泄漏,请问有什么办法解决

      另外有没有办法可以拿到MessageReceipt的特征值(尽可能使基本类型,类似于消息id这种)可以通过bot获取可撤回的消息,尽量减少重复代码(偷懒

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

        MessageReceipt.source

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

          @cssxsh 这个似乎没有验证是否可以撤回

          1 Reply Last reply Reply Quote 0
          • Nambers
            Nambers 摸鱼 last edited by

            撤回的时候catch就可以了?

            HollisMeynell 1 Reply Last reply Reply Quote 0
            • HollisMeynell
              HollisMeynell @Nambers last edited by

              @nambers 目前我的解决办法是封装一个类,包含receipt跟撤回时限时间戳,catch也是一种办法XDDD

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

                写一个扩展属性就好

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

                  在撤回的时候直接撤回, 用 try-catch 包装一下, 并删除引用

                  如果撤回不了后面继续尝试也是撤回不了的, 不管撤回结果直接移除引用即可

                  HollisMeynell 1 Reply Last reply Reply Quote 0
                  • HollisMeynell
                    HollisMeynell @Karlatemp last edited by

                    @karlatemp 虽然是可以啦,主要是异常我都交由全局异常处理了,会写一大堆奇怪的logXD

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

                      可以定义一个新的方法来撤回

                      internal suspend fun MessageSource.recallNoError() {
                      kotlin.runCatching { this.recall() }
                      }
                      
                      HollisMeynell 1 Reply Last reply Reply Quote 0
                      • HollisMeynell
                        HollisMeynell @Karlatemp last edited by

                        @karlatemp 好,灰常感谢大佬!

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