Friend.kt 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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", "unused", "UnusedImport")
  10. package net.mamoe.mirai.contact
  11. import kotlinx.coroutines.CoroutineScope
  12. import net.mamoe.kjbb.JvmBlockingBridge
  13. import net.mamoe.mirai.Bot
  14. import net.mamoe.mirai.event.events.EventCancelledException
  15. import net.mamoe.mirai.event.events.FriendMessageEvent
  16. import net.mamoe.mirai.event.events.FriendMessagePostSendEvent
  17. import net.mamoe.mirai.event.events.FriendMessagePreSendEvent
  18. import net.mamoe.mirai.message.MessageReceipt
  19. import net.mamoe.mirai.message.MessageReceipt.Companion.recall
  20. import net.mamoe.mirai.message.action.FriendNudge
  21. import net.mamoe.mirai.message.action.Nudge
  22. import net.mamoe.mirai.message.data.Message
  23. import net.mamoe.mirai.message.data.isContentEmpty
  24. import net.mamoe.mirai.message.data.toPlainText
  25. import net.mamoe.mirai.utils.MiraiExperimentalApi
  26. /**
  27. * 代表一位好友.
  28. *
  29. * 一个 [Friend] 实例并不是独立的, 它属于一个 [Bot].
  30. * 对于同一个 [Bot], 任何一个人的 [Friend] 实例都是单一的.
  31. * [Friend] 无法通过任何方式直接构造. 任何时候都应从 [Bot.getFriend] 或事件中获取.
  32. *
  33. * @see FriendMessageEvent
  34. */
  35. public interface Friend : User, CoroutineScope {
  36. /**
  37. * QQ 号码
  38. */
  39. public override val id: Long
  40. /**
  41. * 昵称
  42. */
  43. public override val nick: String
  44. /**
  45. * 好友备注
  46. */
  47. public override val remark: String
  48. /**
  49. * 头像下载链接
  50. */
  51. public override val avatarUrl: String
  52. get() = "http://q1.qlogo.cn/g?b=qq&nk=$id&s=640"
  53. /**
  54. * 向这个对象发送消息.
  55. *
  56. * 单条消息最大可发送 4500 字符或 50 张图片.
  57. *
  58. * @see FriendMessagePreSendEvent 发送消息前事件
  59. * @see FriendMessagePostSendEvent 发送消息后事件
  60. *
  61. * @throws EventCancelledException 当发送消息事件被取消时抛出
  62. * @throws BotIsBeingMutedException 发送群消息时若 [Bot] 被禁言抛出
  63. * @throws MessageTooLargeException 当消息过长时抛出
  64. * @throws IllegalArgumentException 当消息内容为空时抛出 (详见 [Message.isContentEmpty])
  65. *
  66. * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
  67. */
  68. @JvmBlockingBridge
  69. public override suspend fun sendMessage(message: Message): MessageReceipt<Friend>
  70. /**
  71. * 发送纯文本消息
  72. * @see sendMessage
  73. */
  74. @JvmBlockingBridge
  75. public override suspend fun sendMessage(message: String): MessageReceipt<Friend> =
  76. this.sendMessage(message.toPlainText())
  77. /**
  78. * 创建一个 "戳一戳" 消息
  79. *
  80. * @see Nudge.sendTo 发送这个戳一戳消息
  81. */
  82. @MiraiExperimentalApi
  83. public override fun nudge(): FriendNudge = FriendNudge(this)
  84. }