RoamingMessages.kt 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright 2019-2022 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. @file:JvmBlockingBridge
  10. package net.mamoe.mirai.contact.roaming
  11. import kotlinx.coroutines.flow.Flow
  12. import me.him188.kotlin.jvm.blocking.bridge.JvmBlockingBridge
  13. import net.mamoe.mirai.contact.Friend
  14. import net.mamoe.mirai.message.data.MessageChain
  15. import net.mamoe.mirai.message.data.MessageSource
  16. /**
  17. * 漫游消息记录管理器. 可通过 [RoamingSupported.roamingMessages] 获得. 目前仅 [Friend] 实现 [RoamingSupported].
  18. *
  19. * @since 2.8
  20. * @see RoamingSupported
  21. */
  22. public expect interface RoamingMessages {
  23. ///////////////////////////////////////////////////////////////////////////
  24. // Get list
  25. ///////////////////////////////////////////////////////////////////////////
  26. /**
  27. * 查询指定时间段内的漫游消息记录.
  28. *
  29. * 返回查询到的漫游消息记录, 顺序为由新到旧. 这些 [MessageChain] 与从事件中收到的消息链相似, 属于在线消息.
  30. * 可从 [MessageChain] 获取 [MessageSource] 来确定发送人等相关信息, 也可以进行引用回复或撤回.
  31. *
  32. * 注意, 返回的消息记录既包含机器人发送给目标用户的消息, 也包含目标用户发送给机器人的消息.
  33. * 可通过 [MessageChain] 获取 [MessageSource] (用法为 `messageChain.source`), 判断 [MessageSource.fromId] (发送人).
  34. * 消息的其他*元数据*信息也要通过 [MessageSource] 获取 (如 [MessageSource.time] 获取时间).
  35. *
  36. * 若只需要获取单向消息 (机器人发送给目标用户的消息或反之), 可使用 [RoamingMessageFilter.SENT] 或 [RoamingMessageFilter.RECEIVED] 作为 [filter] 参数传递.
  37. *
  38. * 性能提示: 请在 [filter] 执行筛选, 若 [filter] 返回 `false` 则不会解析消息链, 这对本函数的处理速度有决定性影响.
  39. *
  40. * @param timeStart 起始时间, UTC+8 时间戳, 单位为秒. 可以为 `0`, 即表示从可以获取的最早的消息起. 负数将会被看是 `0`.
  41. * @param timeEnd 结束时间, UTC+8 时间戳, 单位为秒. 可以为 [Long.MAX_VALUE], 即表示到可以获取的最晚的消息为止. 低于 [timeStart] 的值将会被看作是 [timeStart] 的值.
  42. * @param filter 过滤器.
  43. */
  44. public suspend fun getMessagesIn(
  45. timeStart: Long,
  46. timeEnd: Long,
  47. filter: RoamingMessageFilter? = null
  48. ): Flow<MessageChain>
  49. /**
  50. * 查询所有漫游消息记录.
  51. *
  52. * 返回查询到的漫游消息记录, 顺序为由新到旧. 这些 [MessageChain] 与从事件中收到的消息链相似, 属于在线消息.
  53. * 可从 [MessageChain] 获取 [MessageSource] 来确定发送人等相关信息, 也可以进行引用回复或撤回.
  54. *
  55. * 注意, 返回的消息记录既包含机器人发送给目标用户的消息, 也包含目标用户发送给机器人的消息.
  56. * 可通过 [MessageChain] 获取 [MessageSource] (用法为 `messageChain.source`), 判断 [MessageSource.fromId] (发送人).
  57. * 消息的其他*元数据*信息也要通过 [MessageSource] 获取 (如 [MessageSource.time] 获取时间).
  58. *
  59. * 若只需要获取单向消息 (机器人发送给目标用户的消息或反之), 可使用 [RoamingMessageFilter.SENT] 或 [RoamingMessageFilter.RECEIVED] 作为 [filter] 参数传递.
  60. *
  61. * 性能提示: 请在 [filter] 执行筛选, 若 [filter] 返回 `false` 则不会解析消息链, 这对本函数的处理速度有决定性影响.
  62. *
  63. * @param filter 过滤器.
  64. */
  65. public open suspend fun getAllMessages(
  66. filter: RoamingMessageFilter? = null
  67. ): Flow<MessageChain>
  68. }