Contact.kt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright 2019-2020 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/master/LICENSE
  8. */
  9. @file:Suppress("EXPERIMENTAL_API_USAGE", "NOTHING_TO_INLINE", "EXPERIMENTAL_OVERRIDE")
  10. @file:OptIn(JavaFriendlyAPI::class)
  11. package net.mamoe.mirai.contact
  12. import kotlinx.coroutines.CoroutineScope
  13. import net.mamoe.kjbb.JvmBlockingBridge
  14. import net.mamoe.mirai.*
  15. import net.mamoe.mirai.event.events.*
  16. import net.mamoe.mirai.message.MessageReceipt
  17. import net.mamoe.mirai.message.MessageReceipt.Companion.quote
  18. import net.mamoe.mirai.message.MessageReceipt.Companion.recall
  19. import net.mamoe.mirai.message.data.*
  20. import net.mamoe.mirai.utils.ExternalImage
  21. import net.mamoe.mirai.utils.OverFileSizeMaxException
  22. import net.mamoe.mirai.utils.WeakRefProperty
  23. /**
  24. * 联系对象, 即可以与 [Bot] 互动的对象. 包含 [用户][User], 和 [群][Group].
  25. */
  26. public interface Contact : ContactOrBot, CoroutineScope {
  27. /**
  28. * 这个联系对象所属 [Bot].
  29. */
  30. @WeakRefProperty
  31. public val bot: Bot
  32. /**
  33. * 可以是 QQ 号码或者群号码.
  34. *
  35. * @see User.id
  36. * @see Group.id
  37. */
  38. public override val id: Long
  39. /**
  40. * 向这个对象发送消息.
  41. *
  42. * 单条消息最大可发送 4500 字符或 50 张图片.
  43. *
  44. * @see MessagePreSendEvent 发送消息前事件
  45. * @see MessagePostSendEvent 发送消息后事件
  46. *
  47. * @throws EventCancelledException 当发送消息事件被取消时抛出
  48. * @throws BotIsBeingMutedException 发送群消息时若 [Bot] 被禁言抛出
  49. * @throws MessageTooLargeException 当消息过长时抛出
  50. * @throws IllegalArgumentException 当消息内容为空时抛出 (详见 [Message.isContentEmpty])
  51. *
  52. * @return 消息回执. 可 [引用回复][MessageReceipt.quote](仅群聊)或 [撤回][MessageReceipt.recall] 这条消息.
  53. */
  54. @JvmBlockingBridge
  55. public suspend fun sendMessage(message: Message): MessageReceipt<Contact>
  56. /**
  57. * 发送纯文本消息
  58. * @see sendMessage
  59. */
  60. @JvmBlockingBridge
  61. public suspend fun sendMessage(message: String): MessageReceipt<Contact> = this.sendMessage(message.toPlainText())
  62. /**
  63. * 上传一个图片以备发送.
  64. *
  65. * @see Image 查看有关图片的更多信息, 如上传图片
  66. *
  67. * @see BeforeImageUploadEvent 图片发送前事件, 可拦截.
  68. * @see ImageUploadEvent 图片发送完成事件, 不可拦截.
  69. *
  70. * @throws EventCancelledException 当发送消息事件被取消时抛出
  71. * @throws OverFileSizeMaxException 当图片文件过大而被服务器拒绝上传时抛出. (最大大小约为 20 MB, 但 mirai 限制的大小为 30 MB)
  72. */
  73. @JvmBlockingBridge
  74. public suspend fun uploadImage(image: ExternalImage): Image
  75. /**
  76. * @return "Friend($id)" or "Group($id)" or "Member($id)"
  77. */
  78. public override fun toString(): String
  79. }
  80. /**
  81. * @see IMirai.recallMessage
  82. */
  83. @JvmSynthetic
  84. public suspend inline fun Contact.recallMessage(source: MessageChain): Unit = Mirai.recallMessage(bot, source)
  85. /**
  86. * @see IMirai.recallMessage
  87. */
  88. @JvmSynthetic
  89. public suspend inline fun Contact.recallMessage(source: MessageSource): Unit = Mirai.recallMessage(bot, source)