@@ -159,27 +159,27 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
159159 }
160160 }
161161
162- fun onInvite (listener : InviteListener ):Room {
163- return on(EventEnum .INVITE ,listener)
162+ fun onInvite (listener : InviteListener ): Room {
163+ return on(EventEnum .INVITE , listener)
164164 }
165165
166- fun onLeave (listener : LeaveListener ):Room {
167- return on(EventEnum .LEAVE ,listener)
166+ fun onLeave (listener : LeaveListener ): Room {
167+ return on(EventEnum .LEAVE , listener)
168168 }
169169
170- fun onInnerMessage (listener : RoomInnerMessageListener ):Room {
171- return on(EventEnum .MESSAGE ,listener)
170+ fun onInnerMessage (listener : RoomInnerMessageListener ): Room {
171+ return on(EventEnum .MESSAGE , listener)
172172 }
173173
174- fun onJoin (listener : JoinListener ):Room {
175- return on(EventEnum .JOIN ,listener);
174+ fun onJoin (listener : JoinListener ): Room {
175+ return on(EventEnum .JOIN , listener);
176176 }
177177
178- fun onTopic (listener : TopicListener ):Room {
179- return on(EventEnum .TOPIC ,listener)
178+ fun onTopic (listener : TopicListener ): Room {
179+ return on(EventEnum .TOPIC , listener)
180180 }
181181
182- private fun on (eventName : Event , listener : InviteListener ):Room {
182+ private fun on (eventName : Event , listener : InviteListener ): Room {
183183 super .on(eventName, object : Listener {
184184 override fun handler (vararg any : Any ) {
185185 listener.handler(any[0 ] as Contact , any[1 ] as RoomInvitation )
@@ -188,7 +188,7 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
188188 return this
189189 }
190190
191- private fun on (eventName : Event , listener : LeaveListener ):Room {
191+ private fun on (eventName : Event , listener : LeaveListener ): Room {
192192 super .on(eventName, object : Listener {
193193 override fun handler (vararg any : Any ) {
194194 listener.handler(any[0 ] as List <Contact >, any[1 ] as Contact , any[2 ] as Date )
@@ -197,7 +197,7 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
197197 return this
198198 }
199199
200- private fun on (eventName : Event , listenerRoomInner : RoomInnerMessageListener ):Room {
200+ private fun on (eventName : Event , listenerRoomInner : RoomInnerMessageListener ): Room {
201201 super .on(eventName, object : Listener {
202202 override fun handler (vararg any : Any ) {
203203 listenerRoomInner.handler(any[0 ] as Message , any[1 ] as Date )
@@ -206,7 +206,7 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
206206 return this
207207 }
208208
209- private fun on (eventName : Event , listener : JoinListener ):Room {
209+ private fun on (eventName : Event , listener : JoinListener ): Room {
210210 super .on(eventName, object : Listener {
211211 override fun handler (vararg any : Any ) {
212212 listener.handler(any[0 ] as List <Contact >, any[1 ] as Contact , any[2 ] as Date )
@@ -215,7 +215,7 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
215215 return this
216216 }
217217
218- private fun on (eventName : Event , listener : TopicListener ):Room {
218+ private fun on (eventName : Event , listener : TopicListener ): Room {
219219 super .on(eventName, object : Listener {
220220 override fun handler (vararg any : Any ) {
221221 listener.handler(any[0 ] as String , any[1 ] as String , any[2 ] as Contact , any[3 ] as Date )
@@ -245,6 +245,56 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
245245 }
246246 }
247247
248+ fun getTopic (): Future <String > {
249+
250+ if (! isReady()) {
251+ log.warn(" Room topic() room not ready" )
252+ throw Exception (" not ready" )
253+ }
254+
255+ if (payload != null && payload!! .topic != null ) {
256+ return CompletableFuture .supplyAsync {
257+ return @supplyAsync payload!! .topic
258+ }
259+ } else {
260+ val memberIdList = puppet.roomMemberList(id).get()
261+ val memberList = memberIdList.filter { it != puppet.selfId() }
262+ .map { wechaty.contactManager.load(it) }
263+
264+ var defaultTopic = " "
265+ if (memberList.isNotEmpty()) {
266+ defaultTopic = memberList[0 ].name()
267+ }
268+
269+ if (memberList.size >= 2 ) {
270+ for (index in 1 .. 2 ) {
271+ defaultTopic + = " ,${memberList[index].name()} "
272+ }
273+ }
274+ return CompletableFuture .supplyAsync {
275+ return @supplyAsync defaultTopic
276+ }
277+ }
278+ }
279+
280+ fun setTopic (newTopic : String ): Future <Void > {
281+ if (! isReady()) {
282+ log.warn(" Room topic() room not ready" )
283+ throw Exception (" not ready" )
284+ }
285+
286+ return CompletableFuture .supplyAsync {
287+ try {
288+ return @supplyAsync puppet.roomTopic(id, newTopic).get()
289+ } catch (e: Exception ) {
290+ log.warn(" Room topic(newTopic=$newTopic ) exception:$e " )
291+ throw Exception (e)
292+ }
293+ }
294+
295+ }
296+
297+ @Deprecated(" this function is deprecated! see getTopic,setTopic" )
248298 fun topic (newTopic : String? ): Future <Any > {
249299 if (! isReady()) {
250300 log.warn(" Room topic() room not ready" )
@@ -356,18 +406,18 @@ class Room(wechaty: Wechaty, val id: String) : Accessory(wechaty), Sayable {
356406 return payload != null
357407 }
358408
359- fun owner ():Contact ? {
409+ fun owner (): Contact ? {
360410 val ownerId = payload?.ownerId
361411
362- return if (ownerId.isNullOrBlank()){
412+ return if (ownerId.isNullOrBlank()) {
363413 null
364- }else {
414+ } else {
365415 return wechaty.contactManager.load(ownerId)
366416 }
367417 }
368418
369- fun avatar ():FileBox {
370- log.debug(" avatar:{}" ,avatar())
419+ fun avatar (): FileBox {
420+ log.debug(" avatar:{}" , avatar())
371421 return puppet.roomAvatar(this .id).get()
372422 }
373423
0 commit comments