class TestLineBotApi(unittest.TestCase): def setUp(self): self.tested = LineBotApi('channel_secret') @responses.activate def test_get_group_member_profile(self): responses.add(responses.GET, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id', json={ "displayName": "LINE taro", "userId": "Uxxxxxxxxxxxxxx...", "pictureUrl": "http://obs.line-apps.com/..." }, status=200) profile = self.tested.get_group_member_profile('group_id', 'user_id') request = responses.calls[0].request self.assertEqual(request.method, 'GET') self.assertEqual( request.url, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id') self.assertEqual(profile.display_name, 'LINE taro') self.assertEqual(profile.user_id, 'Uxxxxxxxxxxxxxx...') self.assertEqual(profile.picture_url, 'http://obs.line-apps.com/...')
class TestLineBotApi(unittest.TestCase): def setUp(self): self.tested = LineBotApi('channel_secret') @responses.activate def test_get_group_member_profile(self): responses.add( responses.GET, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id', json={ "displayName": "LINE taro", "userId": "Uxxxxxxxxxxxxxx...", "pictureUrl": "http://obs.line-apps.com/..." }, status=200 ) profile = self.tested.get_group_member_profile('group_id', 'user_id') request = responses.calls[0].request self.assertEqual(request.method, 'GET') self.assertEqual( request.url, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id') self.assertEqual(profile.display_name, 'LINE taro') self.assertEqual(profile.user_id, 'Uxxxxxxxxxxxxxx...') self.assertEqual(profile.picture_url, 'http://obs.line-apps.com/...') @responses.activate def test_get_room_member_profile(self): responses.add( responses.GET, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/room/room_id/member/user_id', json={ "displayName": "LINE taro", "userId": "Uxxxxxxxxxxxxxx...", "pictureUrl": "http://obs.line-apps.com/..." }, status=200 ) profile = self.tested.get_room_member_profile('room_id', 'user_id') request = responses.calls[0].request self.assertEqual(request.method, 'GET') self.assertEqual( request.url, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/room/room_id/member/user_id') self.assertEqual(profile.display_name, 'LINE taro') self.assertEqual(profile.user_id, 'Uxxxxxxxxxxxxxx...') self.assertEqual(profile.picture_url, 'http://obs.line-apps.com/...')
class TestLineBotApi(unittest.TestCase): def setUp(self): self.tested = LineBotApi('d42b9b5dc4df7ad44e9bddd5ee915fc7') @responses.activate def test_get_group_member_profile(self): responses.add( responses.GET, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id', json={ "displayName": "Bot-test", "userId": "U7a5b489e7bac95734c69d3b254071190", "pictureUrl": "http://obs.line-apps.com/..." }, status=200 ) profile = self.tested.get_group_member_profile('group_id', 'user_id') request = responses.calls[0].request self.assertEqual(request.method, 'GET') self.assertEqual( request.url, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/group/group_id/member/user_id') self.assertEqual(profile.display_name, 'Bot-test') self.assertEqual(profile.user_id, 'U7a5b489e7bac95734c69d3b254071190') self.assertEqual(profile.picture_url, 'http://obs.line-apps.com/...') @responses.activate def test_get_room_member_profile(self): responses.add( responses.GET, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/room/room_id/member/user_id', json={ "displayName": "Bot-test", "userId": "U7a5b489e7bac95734c69d3b254071190", "pictureUrl": "http://obs.line-apps.com/..." }, status=200 ) profile = self.tested.get_room_member_profile('room_id', 'user_id') request = responses.calls[0].request self.assertEqual(request.method, 'GET') self.assertEqual( request.url, LineBotApi.DEFAULT_API_ENDPOINT + '/v2/bot/room/room_id/member/user_id') self.assertEqual(profile.display_name, 'Bot-test') self.assertEqual(profile.user_id, 'U7a5b489e7bac95734c69d3b254071190') self.assertEqual(profile.picture_url, 'http://obs.line-apps.com/...')
def run(self, event: MsgEvent, line_bot_api: LineBotApi, db: Optional[Session] = None): group_id, user_id = event.source.sender_id, event.source.user_id user_profile = line_bot_api.get_group_member_profile(group_id=group_id, user_id=user_id) user = UserCreate(display_name=user_profile.display_name, line_id=user_profile.user_id) # TODO: Check if user duplicated # TODO: Relationship with group if db is not None: db_user = create_user(db, user) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=f"{db_user.display_name} Joined"), ) else: line_bot_api.reply_message(event.reply_token, TextSendMessage(text="JoinError"))
def get_profile(event: MessageEvent, api: LineBotApi): source = event.source if hasattr(source, 'group_id'): return api.get_group_member_profile(source.group_id, source.user_id) else: return api.get_profile(source.user_id)
def message_event(event): line_bot_api = LineBotApi(os.getenv('LINE_CHANNEL_ACCESS_TOKEN')) line_type = event.source.type group, room, user = None, None, None if line_type == 'group': group = event.source.group_id elif line_type == 'room': room = event.source.room_id user = event.source.user_id token = event.reply_token message = event.message.text if message == '你走吧': msg = '走了88' if group: line_bot_api.reply_message(token, TextSendMessage(text=msg)) line_bot_api.leave_group(group_id=group) elif room: line_bot_api.reply_message(token, TextSendMessage(text=msg)) line_bot_api.leave_room(room_id=room) else: msg = '為什麼不是你走?' line_bot_api.reply_message(token, TextSendMessage(text=msg)) elif group: if message == '群組資訊': count = line_bot_api.get_group_members_count(group_id=group) summary = line_bot_api.get_group_summary(group_id=group) text = f'群組名稱➡️ {summary.group_name}\n當前群組人數為➡️ {count}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text, sender=Sender( name='CONY', icon_url=LINE_FRIEND['CONY'])), ImageSendMessage( original_content_url=summary.picture_url, preview_image_url=summary.picture_url, ) ]) elif message == '我是誰': profile = line_bot_api.get_group_member_profile(group_id=group, user_id=user) text = f'你是➡️ {profile.display_name}\nID➡️ {profile.user_id}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text, sender=Sender( name='BROWN', icon_url=LINE_FRIEND['BROWN'])), ImageSendMessage( original_content_url=profile.picture_url, preview_image_url=profile.picture_url, ) ]) else: message = '請邀請我進群組喔\n指令為: \n1. 我是誰\n2.群組資訊\n3. 你走吧\n3. 輸入 v1 降版' elif room: if message == '聊天室資訊': count = line_bot_api.get_room_members_count(room_id=room) text = f'聊天室人數為: {count}' line_bot_api.reply_message(token, TextSendMessage(text=text)) elif message == '我是誰': profile = line_bot_api.get_room_member_profile(room_id=room, user_id=user) text = f'你是➡️ {profile.display_name}\nID➡️ {profile.user_id}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text), ImageSendMessage( original_content_url=profile.picture_url, preview_image_url=profile.picture_url, ) ]) else: message = '請邀請我進群組喔\n指令為: \n1. 我是誰\n2.群組資訊\n3. 你走吧\n3. 輸入 v1 降版' if message == 'video': line_bot_api.reply_message( token, messages=VideoSendMessage( original_content_url='https://i.imgur.com/BhBshUO.mp4', preview_image_url='https://i.imgur.com/MW0Mpb6.jpg', tracking_id='duck')) elif message == 'v1': result = line_bot_api.set_webhook_endpoint( webhook_endpoint= f"{os.getenv('MY_DOMAIN')}/v1/webhooks/line") if result == {}: message = '降版!' else: message = '請邀請我進群組喔\n指令為: \n1. 我是誰\n2.群組資訊\n3. 你走吧\n3. 輸入 v1 降版' line_bot_api.reply_message( token, TextSendMessage(text=message, sender=Sender(name='SALLY', icon_url=LINE_FRIEND['SALLY']))) response = {"statusCode": 200, "body": json.dumps({"message": 'ok'})} return response
def post(self): payload = request.get_json(force=True) line_bot_api = LineBotApi(os.getenv('LINE_CHANNEL_ACCESS_TOKEN')) handler = WebhookHandler(os.getenv('LINE_CHANNEL_SECRET')) event = payload['events'][0] token = event['replyToken'] message = event['message']['text'] line_type = event['source'].get('type') group = event['source'].get('groupId') room = event['source'].get('roomId') user = event['source'].get('userId') if message == '你走吧': if line_type == 'group': line_bot_api.reply_message(token, TextSendMessage(text='走了88')) line_bot_api.leave_group(group_id=group) elif line_type == 'room': line_bot_api.reply_message(token, TextSendMessage(text='走了88')) line_bot_api.leave_room(room_id=room) else: line_bot_api.reply_message(token, TextSendMessage(text='為什麼不是你走?')) elif line_type == 'group': if message == '群組資訊': count = line_bot_api.get_group_members_count(group_id=group) summary = line_bot_api.get_group_summary(group_id=group) text = f'群組名稱➡️ {summary.group_name}\n當前群組人數為➡️ {count}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text), ImageSendMessage( original_content_url=summary.picture_url, preview_image_url=summary.picture_url, ) ]) elif message == '我是誰': profile = line_bot_api.get_group_member_profile(group_id=group, user_id=user) text = f'你是➡️ {profile.display_name}\nID➡️ {profile.user_id}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text), ImageSendMessage( original_content_url=profile.picture_url, preview_image_url=profile.picture_url, ) ]) line_bot_api.reply_message(token, TextSendMessage(text=message)) elif line_type == 'room': if message == '聊天室資訊': count = line_bot_api.get_room_members_count(room_id=room) text = f'聊天室人數為: {count}' line_bot_api.reply_message(token, TextSendMessage(text=text)) elif message == '我是誰': profile = line_bot_api.get_room_member_profile(room_id=room, user_id=user) text = f'你是➡️ {profile.display_name}\nID➡️ {profile.user_id}' line_bot_api.reply_message( token, messages=[ TextSendMessage(text=text), ImageSendMessage( original_content_url=profile.picture_url, preview_image_url=profile.picture_url, ) ]) line_bot_api.reply_message(token, TextSendMessage(text=message)) else: line_bot_api.reply_message(token, TextSendMessage(text=message)) response = {"statusCode": 200, "body": json.dumps({"message": 'ok'})} return response