|
@@ -55,6 +55,18 @@ sealed class TargetedEvent(metadata: EventMetadata, val target: String) : IrcEve
|
55
|
55
|
|
56
|
56
|
}
|
57
|
57
|
|
|
58
|
+/**
|
|
59
|
+ * Interface implemented by events that describe a change to a channel's membership.
|
|
60
|
+ */
|
|
61
|
+interface ChannelMembershipAdjustment {
|
|
62
|
+ /** The nickname of a user that has joined the channel. */
|
|
63
|
+ val addedUser: String?
|
|
64
|
+ /** The nickname of a user who has left the channel. */
|
|
65
|
+ val removedUser: String?
|
|
66
|
+ /** The nicknames of all users in the channel, to replace any existing values. */
|
|
67
|
+ val replacedUsers: Array<String>?
|
|
68
|
+}
|
|
69
|
+
|
58
|
70
|
/**
|
59
|
71
|
* Interface implemented by events that come from a particular user.
|
60
|
72
|
*/
|
|
@@ -93,7 +105,12 @@ class ServerFeaturesUpdated(metadata: EventMetadata, val serverFeatures: ServerF
|
93
|
105
|
class PingReceived(metadata: EventMetadata, val nonce: ByteArray) : IrcEvent(metadata)
|
94
|
106
|
|
95
|
107
|
/** Raised when a user joins a channel. */
|
96
|
|
-class ChannelJoined(metadata: EventMetadata, override val user: User, channel: String) : TargetedEvent(metadata, channel), SourcedEvent
|
|
108
|
+class ChannelJoined(metadata: EventMetadata, override val user: User, channel: String)
|
|
109
|
+ : TargetedEvent(metadata, channel), SourcedEvent, ChannelMembershipAdjustment {
|
|
110
|
+ override val addedUser = user.nickname
|
|
111
|
+ override val removedUser: String? = null
|
|
112
|
+ override val replacedUsers: Array<String>? = null
|
|
113
|
+}
|
97
|
114
|
|
98
|
115
|
/** Raised when an attempt to join a channel fails. */
|
99
|
116
|
class ChannelJoinFailed(metadata: EventMetadata, channel: String, val reason: JoinError) : TargetedEvent(metadata, channel) {
|
|
@@ -129,22 +146,47 @@ class ChannelJoinFailed(metadata: EventMetadata, channel: String, val reason: Jo
|
129
|
146
|
}
|
130
|
147
|
|
131
|
148
|
/** Raised when a user leaves a channel. */
|
132
|
|
-class ChannelParted(metadata: EventMetadata, override val user: User, channel: String, val reason: String = "") : TargetedEvent(metadata, channel), SourcedEvent
|
|
149
|
+class ChannelParted(metadata: EventMetadata, override val user: User, channel: String, val reason: String = "")
|
|
150
|
+ : TargetedEvent(metadata, channel), SourcedEvent, ChannelMembershipAdjustment {
|
|
151
|
+ override val addedUser: String? = null
|
|
152
|
+ override val removedUser = user.nickname
|
|
153
|
+ override val replacedUsers: Array<String>? = null
|
|
154
|
+}
|
133
|
155
|
|
134
|
156
|
/** Raised when a [victim] is kicked from a channel. */
|
135
|
|
-class ChannelUserKicked(metadata: EventMetadata, override val user: User, channel: String, val victim: String, val reason: String = "") : TargetedEvent(metadata, channel), SourcedEvent
|
|
157
|
+class ChannelUserKicked(metadata: EventMetadata, override val user: User, channel: String, val victim: String, val reason: String = "")
|
|
158
|
+ : TargetedEvent(metadata, channel), SourcedEvent, ChannelMembershipAdjustment {
|
|
159
|
+ override val addedUser: String? = null
|
|
160
|
+ override val removedUser = victim
|
|
161
|
+ override val replacedUsers: Array<String>? = null
|
|
162
|
+}
|
136
|
163
|
|
137
|
164
|
/** Raised when a user quits, and is in a channel. */
|
138
|
|
-class ChannelQuit(metadata: EventMetadata, override val user: User, channel: String, val reason: String = "") : TargetedEvent(metadata, channel), SourcedEvent
|
|
165
|
+class ChannelQuit(metadata: EventMetadata, override val user: User, channel: String, val reason: String = "")
|
|
166
|
+ : TargetedEvent(metadata, channel), SourcedEvent, ChannelMembershipAdjustment {
|
|
167
|
+ override val addedUser: String? = null
|
|
168
|
+ override val removedUser = user.nickname
|
|
169
|
+ override val replacedUsers: Array<String>? = null
|
|
170
|
+}
|
139
|
171
|
|
140
|
172
|
/** Raised when a user changes nickname, and is in a channel. */
|
141
|
|
-class ChannelNickChanged(metadata: EventMetadata, override val user: User, channel: String, val newNick: String) : TargetedEvent(metadata, channel), SourcedEvent
|
|
173
|
+class ChannelNickChanged(metadata: EventMetadata, override val user: User, channel: String, val newNick: String)
|
|
174
|
+ : TargetedEvent(metadata, channel), SourcedEvent, ChannelMembershipAdjustment {
|
|
175
|
+ override val addedUser = newNick
|
|
176
|
+ override val removedUser = user.nickname
|
|
177
|
+ override val replacedUsers: Array<String>? = null
|
|
178
|
+}
|
142
|
179
|
|
143
|
180
|
/** Raised when a batch of the channel's member list has been received. More batches may follow. */
|
144
|
181
|
class ChannelNamesReceived(metadata: EventMetadata, channel: String, val names: List<String>) : TargetedEvent(metadata, channel)
|
145
|
182
|
|
146
|
183
|
/** Raised when the entirety of the channel's member list has been received. */
|
147
|
|
-class ChannelNamesFinished(metadata: EventMetadata, channel: String) : TargetedEvent(metadata, channel)
|
|
184
|
+class ChannelNamesFinished(metadata: EventMetadata, channel: String) : TargetedEvent(metadata, channel), ChannelMembershipAdjustment {
|
|
185
|
+ override val addedUser: String? = null
|
|
186
|
+ override val removedUser: String? = null
|
|
187
|
+ override var replacedUsers: Array<String>? = null
|
|
188
|
+ internal set
|
|
189
|
+}
|
148
|
190
|
|
149
|
191
|
/** Raised when a channel topic is discovered (not changed). Usually followed by [ChannelTopicMetadataDiscovered] if the [topic] is non-null. */
|
150
|
192
|
class ChannelTopicDiscovered(metadata: EventMetadata, channel: String, val topic: String?) : TargetedEvent(metadata, channel)
|
|
@@ -257,7 +299,7 @@ class BatchReceived(metadata: EventMetadata, val type: String, val params: Array
|
257
|
299
|
*
|
258
|
300
|
* If this happens before {ServerReady], the nickname must be changed for registration to continue.
|
259
|
301
|
*/
|
260
|
|
-class NicknameChangeFailed(metadata: EventMetadata, val cause: NicknameChangeError): IrcEvent(metadata) {
|
|
302
|
+class NicknameChangeFailed(metadata: EventMetadata, val cause: NicknameChangeError) : IrcEvent(metadata) {
|
261
|
303
|
/** Reasons a nick change may fail. */
|
262
|
304
|
enum class NicknameChangeError {
|
263
|
305
|
/** The nickname is not allowed by the server. */
|