예제 #1
0
파일: pocket48.py 프로젝트: MskAdr/433QQBot
def find_room(name: str):
    """按照名称寻找roomid和ownerid,随后写入到配置文件中"""
    url = 'https://pocketapi.48.cn/im/api/v1/im/search'
    data = {'name': name}
    response = send_request(url, data)
    result = response['content']['data'][0]
    setting.write_config('pocket48', 'roomid', result['targetId'])
    setting.write_config('pocket48', 'ownerid', result['ownerId'])
예제 #2
0
파일: pocket48.py 프로젝트: MskAdr/433QQBot
def set_token() -> bool:
    """设置口袋48的登录token, 返回是否成功"""
    url = "https://pocketapi.48.cn/user/api/v1/login/app/mobile"
    data = {
        "mobile": setting.read_config('pocket48', 'username'),
        "pwd": setting.read_config('pocket48', 'password')
    }
    response = send_request(url, data)
    if response['status'] == 200:
        token = response['content']['token']
        setting.write_config('pocket48', 'token', token)
        return True
    else:
        logger.error('登录口袋48时出错, 返回消息:%s', response['message'])
        return False
예제 #3
0
파일: pocket48.py 프로젝트: MskAdr/433QQBot
def _deal_messages(owner_id: int, room_id: int) -> list:
    """返回口袋48主页面的信息
    ### Result:
    ``message_list``: 格式化的口袋消息列表.
    """
    # 发送请求获取消息列表
    url = "https://pocketapi.48.cn/im/api/v1/chatroom/msg/list/homeowner"
    data = {'ownerId': owner_id, 'roomId': room_id}
    response = send_request(url, data, True)
    if response['status'] >= 401000:
        if not set_token():
            logger.error('口袋48授权失败, 请检查用户名和密码')
            return dict()
        response = send_request(url, data, True)
    # 处理消息列表
    message_list = list()
    last_time = int(setting.read_config('pocket48', 'message_time'))
    for data in response['content']['message']:
        message = ''
        if data['msgTime'] < last_time:
            break
        message_time = time.strftime(
            '%Y-%m-%d %H:%M:%S', time.localtime(int(data['msgTime'] / 1000)))
        message_ext = json.loads(data['extInfo'])
        if data['msgType'] == 'TEXT':
            # 口袋48好像会出现换行直接打到行首的特殊情况
            if 'text' in message_ext:
                message_ext['text'] = message_ext['text'].replace('\r', '\n')
            if message_ext['messageType'] == 'TEXT':
                message = (f'{message_ext["user"]["nickName"]}: '
                           f'{message_ext["text"]}\n'
                           f'{message_time}')
                logger.info('收到一条文字消息: %s', message_ext["text"])
            elif message_ext['messageType'] == 'REPLY':
                message = (f'{message_ext["replyName"]}: '
                           f'{message_ext["replyText"]}\n'
                           f'{message_ext["user"]["nickName"]}: '
                           f'{message_ext["text"]}\n'
                           f'{message_time}')
                logger.info('收到一条回复消息: %s, 原文: %s', message_ext["text"],
                            message_ext["replyText"])
            elif message_ext['messageType'] == 'VOTE':
                message = (f'{message_ext["user"]["nickName"]}发起了投票: '
                           f'{message_ext["text"]}\n'
                           f'{message_time}')
                logger.info('收到一条投票消息: %s', message_ext["text"])
            elif message_ext['messageType'] == 'FLIPCARD':
                message = (f'{message_ext["user"]["nickName"]}: '
                           f'{message_ext["text"]}\n'
                           f'问题内容: {message_ext["question"]}\n'
                           f'{message_time}')
                logger.info('收到一条翻牌消息: %s, 问题: %s', message_ext["text"],
                            message_ext["question"])
            elif message_ext['messageType'] == 'LIVEPUSH':
                idol_nickname = setting.read_config("system", "nickname")
                # playStreamPath = response['content']['playStreamPath']
                message = [
                    {
                        'type': 'text',
                        'data': {
                            'text': (f'{idol_nickname}开直播啦: '
                                     f'{message_ext["liveTitle"]}\n'
                                     '封面: ')
                        }
                    },
                    {
                        'type': 'image',
                        'data': {
                            'file': f'{message_ext["liveCover"]}'
                        }
                    },
                    {
                        'type': 'text',
                        'data': {
                            'text': '快去口袋48观看吧! '
                        }
                    },
                ]
                logger.info('收到一条直播消息,id=%s', str(message_ext["liveId"]))
        elif data['msgType'] == 'IMAGE':
            bodys = json.loads(data['bodys'])
            message = [
                {
                    'type': 'text',
                    'data': {
                        'text': f'{message_ext["user"]["nickName"]}: '
                    }
                },
                {
                    'type': 'image',
                    'data': {
                        'file': f'{bodys["url"]}'
                    }
                },
                {
                    'type': 'text',
                    'data': {
                        'text': f'{message_time}'
                    }
                },
            ]
        elif data['msgType'] == 'AUDIO' or data['msgType'] == 'VIDEO':
            bodys = json.loads(data['bodys'])
            message = [
                {
                    'type': 'text',
                    'data': {
                        'text': f'{message_ext["user"]["nickName"]}: '
                    }
                },
                {
                    'type': 'record',
                    'data': {
                        'file': f'{bodys["url"]}'
                    }
                },
                {
                    'type': 'text',
                    'data': {
                        'text': f'{message_time}'
                    }
                },
            ]
        elif data['msgType'] == 'EXPRESS':
            message = (f'{message_ext["user"]["nickName"]}: 发送了表情\n'
                       f'{message_time}')
        else:
            logger.error('发现了未知格式的信息: %s', json.dumps(message_ext))
        message_list.append(message)
    logger.info('口袋48信息处理完成, 共收取到%d条信息', len(message_list))
    setting.write_config('pocket48', 'message_time',
                         str(int(time.time() * 1000)))
    return message_list
예제 #4
0
def get_message() -> list:
    """获取最新的微博内容"""
    container_id = f'107603{setting.read_config("weibo","id")}'
    url = ('https://m.weibo.cn/api/container/getIndex?'
           f'containerid={container_id}')
    header = {
        'User-Agent': ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) '
                       'AppleWebKit/605.1.15 (KHTML, like Gecko) '
                       'Version/13.0.5 Safari/605.1.15')
    }
    response = requests.get(url, headers=header).json()
    message_list = list()
    max_id = int(setting.read_config("weibo", "last_weibo"))
    for card in response['data']['cards']:
        try:
            card_id = int(card['mblog']['id'])
        except KeyError:
            card_id = 0
            continue
        if card_id <= int(setting.read_config("weibo", "last_weibo")):
            continue
        elif card_id > max_id:
            max_id = card_id
        text = re.compile(r'<[^>]+>', re.S).sub('', card['mblog']['text'])
        logger.info("发现一条新微博, ID:%d", card_id)
        # 首先查看是否转发
        if card['mblog'].get('retweeted_status') is None:
            # 原创微博
            start_text = (f'{setting.read_config("system", "nickname")}'
                          f"刚刚发了一条微博: {text}\n")
            message = [
                {
                    'type': 'text',
                    'data': {
                        'text': start_text
                    }
                },
            ]
            if card['mblog'].get('pics'):
                message.append({
                    'type': 'image',
                    'data': {
                        'file': card['mblog']['pics'][0]['url']
                    }
                })
                message.append({
                    'type': 'text',
                    'data': {
                        'text': f"一共有{len(card['mblog']['pics'])}张图哦\n"
                    }
                })
            message.append({
                'type': 'text',
                'data': {
                    'text': f"传送门: {card['scheme']}"
                }
            })
        else:
            raw_text = re.compile(r'<[^>]+>', re.S)\
                         .sub('', card['mblog']['retweeted_status']['text'])
            message = (f'{setting.read_config("system", "nickname")}'
                       f"刚刚转发了一条微博: {text}\n原微博: {raw_text}"
                       f"传送门: {card['scheme']}")
        message_list.append(message)
    setting.write_config("weibo", "last_weibo", str(max_id))
    return message_list