Skip to content

Commit bd48ab0

Browse files
committed
add get set topic
1 parent 1d69d91 commit bd48ab0

File tree

1 file changed

+70
-20
lines changed
  • wechaty/src/main/kotlin/io/github/wechaty/user

1 file changed

+70
-20
lines changed

wechaty/src/main/kotlin/io/github/wechaty/user/Room.kt

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)