Skip to content

Commit 15dddbf

Browse files
authored
Support 2020 June update. (#550)
- Get group summary - Get members in group count - Get members in room count - Close #538
1 parent 970cdb9 commit 15dddbf

File tree

8 files changed

+292
-0
lines changed

8 files changed

+292
-0
lines changed

line-bot-api-client/src/main/java/com/linecorp/bot/client/LineMessagingClient.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import com.linecorp.bot.model.ReplyMessage;
2727
import com.linecorp.bot.model.event.source.GroupSource;
2828
import com.linecorp.bot.model.event.source.RoomSource;
29+
import com.linecorp.bot.model.group.GroupMemberCountResponse;
30+
import com.linecorp.bot.model.group.GroupSummaryResponse;
2931
import com.linecorp.bot.model.profile.MembersIdsResponse;
3032
import com.linecorp.bot.model.profile.UserProfileResponse;
3133
import com.linecorp.bot.model.response.BotApiResponse;
@@ -42,6 +44,7 @@
4244
import com.linecorp.bot.model.richmenu.RichMenuIdResponse;
4345
import com.linecorp.bot.model.richmenu.RichMenuListResponse;
4446
import com.linecorp.bot.model.richmenu.RichMenuResponse;
47+
import com.linecorp.bot.model.room.RoomMemberCountResponse;
4548

4649
public interface LineMessagingClient {
4750
/**
@@ -229,6 +232,27 @@ public interface LineMessagingClient {
229232
*/
230233
CompletableFuture<BotApiResponse> leaveRoom(String roomId);
231234

235+
/**
236+
* Get group summary.
237+
*
238+
* @see <a href="https://developers.line.biz/en/reference/messaging-api/#group">//developers.line.biz/en/reference/messaging-api/#group</a>
239+
*/
240+
CompletableFuture<GroupSummaryResponse> getGroupSummary(String groupId);
241+
242+
/**
243+
* Get members in group count.
244+
*
245+
* @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-group-count">//developers.line.biz/en/reference/messaging-api/#get-members-group-count</a>
246+
*/
247+
CompletableFuture<GroupMemberCountResponse> getGroupMemberCount(String groupId);
248+
249+
/**
250+
* Get members in room count.
251+
*
252+
* @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-room-count">//developers.line.biz/en/reference/messaging-api/#get-members-room-count</a>
253+
*/
254+
CompletableFuture<RoomMemberCountResponse> getRoomMemberCount(String roomId);
255+
232256
/**
233257
* Get a rich menu.
234258
*

line-bot-api-client/src/main/java/com/linecorp/bot/client/LineMessagingClientImpl.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.linecorp.bot.model.Narrowcast;
2828
import com.linecorp.bot.model.PushMessage;
2929
import com.linecorp.bot.model.ReplyMessage;
30+
import com.linecorp.bot.model.group.GroupMemberCountResponse;
31+
import com.linecorp.bot.model.group.GroupSummaryResponse;
3032
import com.linecorp.bot.model.profile.MembersIdsResponse;
3133
import com.linecorp.bot.model.profile.UserProfileResponse;
3234
import com.linecorp.bot.model.response.BotApiResponse;
@@ -45,6 +47,7 @@
4547
import com.linecorp.bot.model.richmenu.RichMenuIdResponse;
4648
import com.linecorp.bot.model.richmenu.RichMenuListResponse;
4749
import com.linecorp.bot.model.richmenu.RichMenuResponse;
50+
import com.linecorp.bot.model.room.RoomMemberCountResponse;
4851

4952
import lombok.AllArgsConstructor;
5053
import lombok.extern.slf4j.Slf4j;
@@ -177,6 +180,21 @@ public CompletableFuture<BotApiResponse> leaveRoom(final String roomId) {
177180
return toBotApiResponseFuture(retrofitImpl.leaveRoom(roomId));
178181
}
179182

183+
@Override
184+
public CompletableFuture<GroupSummaryResponse> getGroupSummary(final String groupId) {
185+
return toFuture(retrofitImpl.getGroupSummary(groupId));
186+
}
187+
188+
@Override
189+
public CompletableFuture<GroupMemberCountResponse> getGroupMemberCount(String groupId) {
190+
return toFuture(retrofitImpl.getGroupMemberCount(groupId));
191+
}
192+
193+
@Override
194+
public CompletableFuture<RoomMemberCountResponse> getRoomMemberCount(String roomId) {
195+
return toFuture(retrofitImpl.getRoomMemberCount(roomId));
196+
}
197+
180198
@Override
181199
public CompletableFuture<RichMenuResponse> getRichMenu(final String richMenuId) {
182200
return toFuture(retrofitImpl.getRichMenu(richMenuId));

line-bot-api-client/src/main/java/com/linecorp/bot/client/LineMessagingService.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.linecorp.bot.model.Narrowcast;
2424
import com.linecorp.bot.model.PushMessage;
2525
import com.linecorp.bot.model.ReplyMessage;
26+
import com.linecorp.bot.model.group.GroupMemberCountResponse;
27+
import com.linecorp.bot.model.group.GroupSummaryResponse;
2628
import com.linecorp.bot.model.profile.MembersIdsResponse;
2729
import com.linecorp.bot.model.profile.UserProfileResponse;
2830
import com.linecorp.bot.model.response.GetMessageEventResponse;
@@ -40,6 +42,7 @@
4042
import com.linecorp.bot.model.richmenu.RichMenuIdResponse;
4143
import com.linecorp.bot.model.richmenu.RichMenuListResponse;
4244
import com.linecorp.bot.model.richmenu.RichMenuResponse;
45+
import com.linecorp.bot.model.room.RoomMemberCountResponse;
4346

4447
import retrofit2.Call;
4548
import retrofit2.http.Body;
@@ -214,6 +217,24 @@ Call<MembersIdsResponse> getMembersIds(
214217
@POST("v2/bot/room/{roomId}/leave")
215218
Call<BotApiResponseBody> leaveRoom(@Path("roomId") String roomId);
216219

220+
/**
221+
* Get group summary.
222+
*/
223+
@GET("v2/bot/group/{groupId}/summary")
224+
Call<GroupSummaryResponse> getGroupSummary(@Path("groupId") String groupId);
225+
226+
/**
227+
* Get members in group count.
228+
*/
229+
@GET("v2/bot/group/{groupId}/members/count")
230+
Call<GroupMemberCountResponse> getGroupMemberCount(@Path("groupId") String groupId);
231+
232+
/**
233+
* Get members in room count.
234+
*/
235+
@GET("v2/bot/room/{roomId}/members/count")
236+
Call<RoomMemberCountResponse> getRoomMemberCount(@Path("roomId") String roomId);
237+
217238
/**
218239
* Method for Retrofit.
219240
*

line-bot-api-client/src/test/java/com/linecorp/bot/client/LineMessagingClientImplTest.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import com.linecorp.bot.model.Narrowcast;
4545
import com.linecorp.bot.model.PushMessage;
4646
import com.linecorp.bot.model.ReplyMessage;
47+
import com.linecorp.bot.model.group.GroupMemberCountResponse;
48+
import com.linecorp.bot.model.group.GroupSummaryResponse;
4749
import com.linecorp.bot.model.message.TextMessage;
4850
import com.linecorp.bot.model.narrowcast.Filter;
4951
import com.linecorp.bot.model.narrowcast.filter.GenderDemographicFilter;
@@ -66,6 +68,7 @@
6668
import com.linecorp.bot.model.richmenu.RichMenuIdResponse;
6769
import com.linecorp.bot.model.richmenu.RichMenuListResponse;
6870
import com.linecorp.bot.model.richmenu.RichMenuResponse;
71+
import com.linecorp.bot.model.room.RoomMemberCountResponse;
6972

7073
import okhttp3.Headers;
7174
import okhttp3.Request;
@@ -361,6 +364,59 @@ public void leaveRoomTest() throws Exception {
361364
assertThat(botApiResponse).isEqualTo(BOT_API_SUCCESS_RESPONSE);
362365
}
363366

367+
@Test
368+
public void getGroupSummary() throws Exception {
369+
GroupSummaryResponse dummyResponse = GroupSummaryResponse
370+
.builder()
371+
.build();
372+
whenCall(retrofitMock.getGroupSummary(any()),
373+
dummyResponse);
374+
375+
// Do
376+
GroupSummaryResponse got = target.getGroupSummary("GGGGGGGGGGGGGGGGGG")
377+
.get();
378+
379+
// Verify
380+
verify(retrofitMock, only()).getGroupSummary("GGGGGGGGGGGGGGGGGG");
381+
assertThat(got).isEqualTo(dummyResponse);
382+
}
383+
384+
@Test
385+
public void getGroupMemberCount() throws Exception {
386+
GroupMemberCountResponse dummyResponse = GroupMemberCountResponse
387+
.builder()
388+
.count(3L)
389+
.build();
390+
whenCall(retrofitMock.getGroupMemberCount(any()),
391+
dummyResponse);
392+
393+
// Do
394+
GroupMemberCountResponse got = target.getGroupMemberCount("GGGGGGGGGGGGGGGGGG")
395+
.get();
396+
397+
// Verify
398+
verify(retrofitMock, only()).getGroupMemberCount("GGGGGGGGGGGGGGGGGG");
399+
assertThat(got).isEqualTo(dummyResponse);
400+
}
401+
402+
@Test
403+
public void getRoomMemberCount() throws Exception {
404+
RoomMemberCountResponse dummyResponse = RoomMemberCountResponse
405+
.builder()
406+
.count(3L)
407+
.build();
408+
whenCall(retrofitMock.getRoomMemberCount(any()),
409+
dummyResponse);
410+
411+
// Do
412+
RoomMemberCountResponse got = target.getRoomMemberCount("GGGGGGGGGGGGGGGGGG")
413+
.get();
414+
415+
// Verify
416+
verify(retrofitMock, only()).getRoomMemberCount("GGGGGGGGGGGGGGGGGG");
417+
assertThat(got).isEqualTo(dummyResponse);
418+
}
419+
364420
@Test
365421
public void getRichMenuTest() throws Exception {
366422
final RichMenuResponse richMenuReference = new RichMenuResponse(null, null, false, null, null, null);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2020 LINE Corporation
3+
*
4+
* LINE Corporation licenses this file to you under the Apache License,
5+
* version 2.0 (the "License"); you may not use this file except in compliance
6+
* with the License. You may obtain a copy of the License at:
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations
14+
* under the License.
15+
*/
16+
17+
package com.linecorp.bot.model.group;
18+
19+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20+
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
21+
22+
import com.linecorp.bot.model.group.GroupMemberCountResponse.GroupMemberCountResponseBuilder;
23+
24+
import lombok.Builder;
25+
import lombok.Value;
26+
27+
@Value
28+
@Builder
29+
@JsonDeserialize(builder = GroupMemberCountResponseBuilder.class)
30+
public class GroupMemberCountResponse {
31+
/**
32+
* The count of members in the room. The number returned excludes the LINE Official Account.
33+
*/
34+
long count;
35+
36+
@JsonPOJOBuilder(withPrefix = "")
37+
public static class GroupMemberCountResponseBuilder {
38+
// Filled by lombok
39+
}
40+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright 2020 LINE Corporation
3+
*
4+
* LINE Corporation licenses this file to you under the Apache License,
5+
* version 2.0 (the "License"); you may not use this file except in compliance
6+
* with the License. You may obtain a copy of the License at:
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations
14+
* under the License.
15+
*/
16+
17+
package com.linecorp.bot.model.group;
18+
19+
import java.net.URL;
20+
21+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
22+
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
23+
24+
import com.linecorp.bot.model.group.GroupSummaryResponse.GroupSummaryResponseBuilder;
25+
26+
import lombok.Builder;
27+
import lombok.Value;
28+
29+
@Value
30+
@Builder
31+
@JsonDeserialize(builder = GroupSummaryResponseBuilder.class)
32+
public class GroupSummaryResponse {
33+
/**
34+
* Group ID.
35+
*/
36+
String groupId;
37+
38+
/**
39+
* Group name.
40+
*/
41+
String groupName;
42+
43+
/**
44+
* Group icon URL.
45+
*/
46+
URL pictureUrl;
47+
48+
@JsonPOJOBuilder(withPrefix = "")
49+
public static class GroupSummaryResponseBuilder {
50+
// Filled by lombok
51+
}
52+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2020 LINE Corporation
3+
*
4+
* LINE Corporation licenses this file to you under the Apache License,
5+
* version 2.0 (the "License"); you may not use this file except in compliance
6+
* with the License. You may obtain a copy of the License at:
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13+
* License for the specific language governing permissions and limitations
14+
* under the License.
15+
*/
16+
17+
package com.linecorp.bot.model.room;
18+
19+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20+
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
21+
22+
import com.linecorp.bot.model.room.RoomMemberCountResponse.RoomMemberCountResponseBuilder;
23+
24+
import lombok.Builder;
25+
import lombok.Value;
26+
27+
@Value
28+
@Builder
29+
@JsonDeserialize(builder = RoomMemberCountResponseBuilder.class)
30+
public class RoomMemberCountResponse {
31+
/**
32+
* The count of members in the room. The number returned excludes the LINE Official Account.
33+
*/
34+
long count;
35+
36+
@JsonPOJOBuilder(withPrefix = "")
37+
public static class RoomMemberCountResponseBuilder {
38+
// Filled by lombok
39+
}
40+
}

sample-spring-boot-kitchensink/src/main/java/com/example/bot/spring/KitchenSinkController.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
import com.linecorp.bot.model.event.source.GroupSource;
6868
import com.linecorp.bot.model.event.source.RoomSource;
6969
import com.linecorp.bot.model.event.source.Source;
70+
import com.linecorp.bot.model.group.GroupMemberCountResponse;
71+
import com.linecorp.bot.model.group.GroupSummaryResponse;
7072
import com.linecorp.bot.model.message.AudioMessage;
7173
import com.linecorp.bot.model.message.ImageMessage;
7274
import com.linecorp.bot.model.message.ImagemapMessage;
@@ -90,6 +92,7 @@
9092
import com.linecorp.bot.model.message.template.ImageCarouselColumn;
9193
import com.linecorp.bot.model.message.template.ImageCarouselTemplate;
9294
import com.linecorp.bot.model.response.BotApiResponse;
95+
import com.linecorp.bot.model.room.RoomMemberCountResponse;
9396
import com.linecorp.bot.spring.boot.annotation.EventMapping;
9497
import com.linecorp.bot.spring.boot.annotation.LineMessageHandler;
9598

@@ -373,6 +376,44 @@ private void handleTextContent(String replyToken, Event event, TextMessageConten
373376
}
374377
break;
375378
}
379+
case "group_summary": {
380+
Source source = event.getSource();
381+
if (source instanceof GroupSource) {
382+
GroupSummaryResponse groupSummary = lineMessagingClient.getGroupSummary(
383+
((GroupSource) source).getGroupId()).get();
384+
this.replyText(replyToken, "Group summary: " + groupSummary);
385+
} else {
386+
this.replyText(replyToken, "You can't use 'group_summary' command for "
387+
+ source);
388+
}
389+
break;
390+
}
391+
case "group_member_count": {
392+
Source source = event.getSource();
393+
if (source instanceof GroupSource) {
394+
GroupMemberCountResponse groupMemberCountResponse = lineMessagingClient.getGroupMemberCount(
395+
((GroupSource) source).getGroupId()).get();
396+
this.replyText(replyToken, "Group member count: "
397+
+ groupMemberCountResponse.getCount());
398+
} else {
399+
this.replyText(replyToken, "You can't use 'group_member_count' command for "
400+
+ source);
401+
}
402+
break;
403+
}
404+
case "room_member_count": {
405+
Source source = event.getSource();
406+
if (source instanceof RoomSource) {
407+
RoomMemberCountResponse roomMemberCountResponse = lineMessagingClient.getRoomMemberCount(
408+
((RoomSource) source).getRoomId()).get();
409+
this.replyText(replyToken, "Room member count: "
410+
+ roomMemberCountResponse.getCount());
411+
} else {
412+
this.replyText(replyToken, "You can't use 'room_member_count' command for "
413+
+ source);
414+
}
415+
break;
416+
}
376417
case "confirm": {
377418
ConfirmTemplate confirmTemplate = new ConfirmTemplate(
378419
"Do it?",

0 commit comments

Comments
 (0)