You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IrcMessage.kt 1016B

12345678910111213141516171819202122232425262728293031
  1. package com.dmdirc.ktirc.model
  2. import com.dmdirc.ktirc.util.currentTimeProvider
  3. import com.dmdirc.ktirc.util.currentTimeZoneProvider
  4. import java.time.Instant
  5. import java.time.LocalDateTime
  6. class IrcMessage(val tags: Map<MessageTag, String>, val prefix: ByteArray?, val command: String, val params: List<ByteArray>) {
  7. val time: LocalDateTime = if (MessageTag.ServerTime in tags) {
  8. LocalDateTime.ofInstant(Instant.parse(tags[MessageTag.ServerTime]), currentTimeZoneProvider())
  9. } else {
  10. currentTimeProvider()
  11. }
  12. val sourceUser by lazy {
  13. prefix?.asUser()?.apply {
  14. tags[MessageTag.AccountName]?.let { account = it }
  15. }
  16. }
  17. }
  18. sealed class MessageTag(val name: String) {
  19. object AccountName : MessageTag("account")
  20. object ServerTime : MessageTag("time")
  21. }
  22. internal val messageTags: Map<String, MessageTag> by lazy {
  23. MessageTag::class.nestedClasses.map { it.objectInstance as MessageTag }.associateBy { it.name }
  24. }