Ejemplo n.º 1
0
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/...')
Ejemplo n.º 3
0
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/...')
Ejemplo n.º 4
0
 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"))
Ejemplo n.º 5
0
Archivo: util.py Proyecto: tdtk/milk
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)
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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