Dice.kt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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:Suppress("NOTHING_TO_INLINE")
  10. @file:JvmMultifileClass
  11. @file:JvmName("MessageUtils")
  12. package net.mamoe.mirai.message.data
  13. import kotlinx.serialization.SerialName
  14. import kotlinx.serialization.Serializable
  15. import net.mamoe.mirai.message.code.CodableMessage
  16. import net.mamoe.mirai.message.data.visitor.MessageVisitor
  17. import net.mamoe.mirai.utils.MiraiExperimentalApi
  18. import net.mamoe.mirai.utils.MiraiInternalApi
  19. import net.mamoe.mirai.utils.annotations.Range
  20. import net.mamoe.mirai.utils.safeCast
  21. import kotlin.jvm.JvmMultifileClass
  22. import kotlin.jvm.JvmName
  23. import kotlin.jvm.JvmStatic
  24. import kotlin.random.Random
  25. import kotlin.random.nextInt
  26. /**
  27. * 骰子.
  28. *
  29. * 构造 [Dice] 实例即可使用. 也可以通过 [Dice.random] 获得一个随机点数的实例.
  30. *
  31. * @since 2.5
  32. */
  33. @Serializable
  34. @SerialName(Dice.SERIAL_NAME)
  35. public data class Dice(
  36. /**
  37. * 骰子的点数. 范围为 1..6
  38. */
  39. public val value: @Range(from = 1, to = 6) Int
  40. ) : MarketFace, CodableMessage {
  41. init {
  42. require(value in 1..6) { "Dice.value must be in 1 and 6 inclusive." }
  43. }
  44. override val name: String
  45. get() = "[骰子:$value]" // 官方名称应该是 "[随机骰子]"
  46. @MiraiExperimentalApi
  47. override val id: Int
  48. get() = 11464
  49. @MiraiExperimentalApi
  50. override fun appendMiraiCodeTo(builder: StringBuilder) {
  51. builder.append("[mirai:dice:").append(value).append(']')
  52. }
  53. override fun toString(): String = "[mirai:dice:$value]"
  54. @MiraiInternalApi
  55. override fun <D, R> accept(visitor: MessageVisitor<D, R>, data: D): R {
  56. return visitor.visitDice(this, data)
  57. }
  58. public companion object Key :
  59. AbstractPolymorphicMessageKey<MarketFace, Dice>(MarketFace, { it.safeCast() }) {
  60. public const val SERIAL_NAME: String = "Dice"
  61. /**
  62. * 创建随机点数的 [骰子][Dice]
  63. */
  64. @JvmStatic
  65. public fun random(): Dice = Dice(Random.nextInt(1..6))
  66. }
  67. }