Exemple #1
0
def record_text_msg(msg):
    """
    监听群的文字聊天记录并处理艾特我的信息
    :param msg:
    :return:
    """

    from_group_id_ = msg['FromUserName']  # 收到消息的群的标识
    group_name = msg['User']['NickName']  # 群名
    custom_logger.debug('收到一条%s群的消息:%s' % (group_name, msg['Content']))

    # 2018.8.17 只记录本群的聊天记录; 2018.8.21 增加我发出去的消息的判断
    if from_group_id_ == money_notify_groups or msg[
            'ToUserName'] == money_notify_groups:
        custom_logger.debug(u"记录败友群聊天记录...%s" % money_notify_groups)

    # 处理艾特我的信息,给予简单自动回复
    match_groups = re.search(r'(兄弟|西大|读书|广州|胡吃海喝|深圳)', group_name, re.M | re.I)
    if match_groups is None:  # 只处理上述群
        return
    if msg['IsAt']:
        at_msg_counter[from_group_id_] += 1
        reply_msg = deal_at_msg(from_group_id_)
        if reply_msg:
            itchat.send(reply_msg, from_group_id_)
Exemple #2
0
def download_pictures(msg):
    """
    处理群聊图片
    :param msg: 源消息对象
    :return:
    """

    if msg['FileName'].endswith('.gif'):  # 不要gif图片
        return
    # 群名
    group_name = msg['User']['NickName']
    custom_logger.info('收到一个文件: %s' % group_name)
    filter_groups = re.search(r'(达令|电商|开发|答疑|咨询|讨论|配送|系)', group_name,
                              re.M | re.I)
    if filter_groups is None:  # 不在上述过滤词内
        msg['Text'](msg['FileName'])  # 先下载至本地,分析结束再决定是否删除
        type_symbol = {
            PICTURE: 'img',
            VIDEO: 'vid',
        }.get(msg.type, 'fil')
        custom_logger.debug('@%s@%s' % (type_symbol, msg.fileName))
        custom_logger.info('文件来自群:%s' % group_name)

        reply_msg = generate_reply_msg(msg.fileName, msg['ActualNickName'])
        if reply_msg:
            custom_logger.info(reply_msg)
    else:
        custom_logger.info("此群不用回复!")
Exemple #3
0
def guess_person_action(num, res_list):
    """
    根据照片猜测人的行为
    :param num: 人的数量
    :param res_list: 服务器返回的json结果
    :return: 回复内容
    """
    custom_logger.info("识别出的人数:%s" % num)
    custom_logger.debug(res_list['faceList'])
    if num == 1:
        score = res_list['faceList'][0]['beauty']  # 颜值
        sex = res_list['faceList'][0]['gender']  # 性别
        if score > 90:
            return [
                '这个美女的简直亮瞎了我的双眼', '这颜值,至少95分,啧啧', '美,比杨幂都美!',
                '经过大数据分析,此人有入选全球最美脸蛋的潜质'
            ][random.randint(4)] if sex < 50 else '这个超级大帅哥是谁?请收下我的膝盖'
        if sex < 50 and (75 < score <= 90):
            return ['经鉴定,美女一枚', '看到美女一天心情就好了',
                    '你们觉得这个姑娘美不美?'][random.randint(3)]
        else:
            custom_logger.info('要么是男的,要么是长的丑,不理会,嘿嘿...')
    if num == 2:
        return ['这两个人是谁呀?', '看着眼熟', '他们两个在干啥?', '二人行必有一照'][random.randint(4)]
    if 2 < num <= 5:  # 人多就PK颜值,让大家对话题感兴趣
        tmp_msg = res_list['imageStory']
        if res_list['bestLoc'] != -1:  # 如果发现美女(因为后台程序只计算了女性)就不用默认的内容
            tmp_msg = [
                '有没有觉得左起第%d颜值特别高啊?', '感觉第%d个是个大美女', '经过大数据分析,第%d最受宅男欢迎'
            ][random.randint(3)] % (res_list['bestLoc'] + 1)
        return tmp_msg
    if num > 5:
        return ['好热闹啊~', '好多人', '人多热闹', '一言不合就合照'][random.randint(4)]

    return ''
Exemple #4
0
def receive_red_packet(msg):
    """
    监听群内红包消息
    :param msg:
    :return:
    """
    if u"收到红包" in msg['Content']:
        custom_logger.info(u'收到一个群红包')
        group_name = msg['User']['NickName']  # 群名
        global money_notify_groups, groups
        if len(money_notify_groups) == 0:  # 因为群组搜索会产生网络请求,所以只在第一次搜索
            groups = itchat.get_chatrooms(update=True)
            users = itchat.search_chatrooms(name=u'败友')  # 把红包消息通知给这个群
            money_notify_groups = users[0]['UserName']  # 获取这个群的唯一标示
            custom_logger.info(money_notify_groups)
        if msg['FromUserName'] == money_notify_groups:  # 2018.8.6 过滤本群的红包通知
            custom_logger.info(u"同一个群的红包不通知...")
            return
        match_groups = re.search(r'(兄弟|西大|读书|广州|胡吃海喝|深圳)', group_name,
                                 re.M | re.I)
        if match_groups:
            msgbody = u'"%s"群红包,@Tonny @All' % group_name
            itchat.send(msgbody,
                        toUserName=money_notify_groups)  # 告诉指定的好友群内有红包
            if '胡吃海喝' in group_name:
                custom_logger.foodie_warn("胡吃海喝", "收到红包")
                custom_logger.debug(msg)
        else:
            custom_logger.info("此群红包不用通知那帮二货...")

        filter_groups = re.search(r'(达令|电商|珠海)', group_name, re.M | re.I)
        if filter_groups is None:  # 不在上述过滤词内
            notify_user.send(u'"%s"群红包' % group_name)  # 通知我自己的小号
Exemple #5
0
def get_tag(text, cnt):
    """
    关键词统计函数
    :param text: 待解析字符串
    :param cnt: 计数器
    :return:
    """
    text = re.sub(r"\[.*\]", "", text)  # 用正则表达式去掉表情符号
    text = re.sub(r"@\S+?\s+", "", text)  # 去掉艾特的用户信息部分
    custom_logger.info('正在分析句子:%s' % text)
    tag_list = jieba.analyse.extract_tags(text)  # 关键词提取模式
    # tag_list = jieba.cut(text, cut_all=False)  # 直接切词模式
    custom_logger.info(tag_list)
    for tag in tag_list:
        cnt[tag] += 1
    custom_logger.debug(cnt)
Exemple #6
0
def is_at_too_many(to_group):
    """
    判断短时间是否被艾特多次
    :param to_group: 所在群
    :return: True - 恶意艾特,False - 非恶意
    """
    now = time.time()
    custom_logger.debug(at_msg_counter)
    custom_logger.debug(first_at_time)
    at_num = at_msg_counter[to_group]
    at_time = first_at_time[to_group]
    if (now - at_time) <= 90:  # 设1.5分钟为监测期限
        if at_num >= 5:
            return True
    else:  # 超过监测期限重置@状态为第一条
        at_msg_counter[to_group] = 1
    return False