Esempio n. 1
0
def detect_duplicates(member_info, event):
    splits = event.message.text.split(' ')
    for split in splits:
        if split.startswith('http'):
            link = split
            break
    else:
        return False

    group_id, user_id = event.source.group_id, event.source.user_id
    rkey = '{}_{}'.format(group_id, link)

    entry_serialized = r.get(rkey)
    if entry_serialized is not None:
        entry = json.loads(entry_serialized)

        message = '{} 삐빅 중복입니다\nby {} ({})'.format(
                EMOJI_ROBOT, entry['uploader'], entry['time'])
        messages = [TextSendMessage(text=message)]
        line_bot_api.reply_message(event.reply_token, messages)
        return True

    profile = line_bot_api.get_group_member_profile(group_id, user_id)
    uploader = '@' + profile.display_name

    KST = timezone('Asia/Seoul')
    d = datetime.datetime.now(tz=KST)
    entry = {
        'uploader': uploader,
        'time': d.strftime('%m/%d %H:%M'), }

    entry_serialized = json.dumps(entry)
    r.setex(rkey, 86400*3, entry_serialized)
    return False
Esempio n. 2
0
def response(flow: http.HTTPFlow) -> None:
    monitor_type = r.get("monitor_type").decode('utf-8')
    data = flow.get_state()
    if monitor_type == 'no':
        pass
    elif monitor_type == "all":
        #监听所有的url 存储
        parser_data(flow.request, flow.response)
    elif monitor_type == 'single':
        # 监听指定url
        url = flow.request.url
        juge_result = judge_monitor_for_single(url)
        if juge_result:
            #juge_result = 匹配条件
            parser_data(flow.request, flow.response)
        else:
            pass
    elif monitor_type == "content-type":
        '''根据文件类型判断'''
        juge_result = judge_monitor_for_type(flow.response)
        if juge_result:
            #juge_result = 匹配条件(文件类型)
            parser_data(flow.request, flow.response)
        else:
            pass
    else:
        pass
Esempio n. 3
0
def get_from_cache(
    country,
    city,
    sku,
):
    chache_name = create_cache_name(country, city, sku)
    data = r.get(escape(chache_name))
    return data
Esempio n. 4
0
def update_suggest():
    # 从redis中加载一次字典树,更新全局变量
    global TREE

    temp = r.get('tree')
    TREE = pickle.loads(temp)
    result = get_tips_word(TREE[0], TREE[1], 'ig')
    print(result)
    print(TREE)
    return "success"
Esempio n. 5
0
def ro_giver(message, r):
    """Gives RO to users who flood with the !report command,
    or bans those who have more than 3 warnings
    """

    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)

    if int(r.get(
            message.reply_to_message.message_id)) == config.report_threshold:
        return

    session = Session()

    user_obj = session.query(User).get(message.from_user.id)
    if not user_obj:
        user_obj = User(message.from_user.id)
        session.add(user_obj)
        session.commit()

    if message.from_user.id in config.admin_ids:
        logger.info("Admin {} is flooding with !report. Doing nothing".format(
            get_user(message.from_user)))
        session.close()
        return

    user_obj.ro_level += 1
    session.commit()

    if user_obj.ro_level < 4:
        user_ro_minutes = config.ro_levels[user_obj.ro_level]
        bot.restrict_chat_member(
            chat_id=config.chat_id,
            user_id=message.from_user.id,
            until_date=time.time() + 60 * user_ro_minutes,
        )
        logger.info(
            "User {0} got {1} minutes of RO for flooding with !report".format(
                get_user(message.from_user), user_ro_minutes))
    else:
        bot.kick_chat_member(chat_id=config.chat_id,
                             user_id=message.from_user.id)
        session.delete(user_obj)
        logger.info("User {} has been banned for flooding with !report".format(
            get_user(message.from_user)))

    session.close()
Esempio n. 6
0
def callback_inline(call):
    user_id = int(call.message.text.split(" ")[3])
    message_id = int(call.message.text.split(" ")[7])

    if not r.get(message_id):
        bot.answer_callback_query(call.id, text="Это сообщение уже отмодерировано.")
        return

    r.delete(message_id)
    if call.data == "ban":
        bot.kick_chat_member(chat_id=config.chat_id, user_id=user_id)
    elif call.data == "release":
        bot.restrict_chat_member(
            chat_id=config.chat_id,
            user_id=user_id,
            can_send_messages=True,
            can_send_media_messages=True,
            can_send_other_messages=True,
            can_add_web_page_previews=True,
        )
    bot.answer_callback_query(call.id, text="OK.")
Esempio n. 7
0
def my_report(message):
    """Handles users' reports
    """
    if not r.get(message.reply_to_message.message_id):
        report_to_admins(message)
        r.set(message.reply_to_message.message_id,
              1,
              ex=60 * config.ro_span_mins)
        response = bot.send_message(
            chat_id=message.chat.id,
            text="Мы примем все необходимые меры, спасибо.")
        Timer(
            30,
            bot.delete_message,
            kwargs={
                "chat_id": response.chat.id,
                "message_id": response.message_id
            },
        ).start()
    elif r.incr(
            message.reply_to_message.message_id) >= config.report_threshold:
        ro_giver(message, r)
Esempio n. 8
0
def punisher(message):
    """Gives RO to user who posted the message,
    deletes the message from chat,
    forwards the deleted message to the admins,
    triggers judgment buttons
    """

    session = Session()
    user_obj = session.query(User).get(message.from_user.id)
    if not user_obj:
        user_obj = User(message.from_user.id)
        session.add(user_obj)
    else:
        user_obj.msg_count -= 1
    session.commit()
    session.close()

    if r.get("spammer_{}".format(message.from_user.id)):
        bot.delete_message(chat_id=message.chat.id,
                           message_id=message.message_id)
        logger.info(
            "Message {} has been deleted without alerting the admins due to flooding"
            .format(message.message_id))
        return

    if message.from_user.id not in config.admin_ids:
        bot.restrict_chat_member(chat_id=config.chat_id,
                                 user_id=message.from_user.id)
        logger.info(
            "User {} has been restricted for leading to a channel".format(
                get_user(message.from_user)))

    r.set(message.message_id, 1)
    r.set("spammer_{}".format(message.from_user.id),
          1,
          ex=config.spammer_timeout)

    judgement_text = ("Reported user's ID: {} \n"
                      "Reported message's ID: {} \n"
                      "Что будем делать?".format(message.from_user.id,
                                                 message.message_id))
    keyboard = types.InlineKeyboardMarkup(row_width=2)
    btn_ban = types.InlineKeyboardButton(text="Отправить в бан",
                                         callback_data="ban")
    btn_release = types.InlineKeyboardButton(text="Снять РО",
                                             callback_data="release")
    keyboard.add(btn_ban, btn_release)

    for admin_id in config.admin_ids:
        try:
            reported = bot.forward_message(
                chat_id=admin_id,
                from_chat_id=config.chat_id,
                message_id=message.message_id,
            )
            bot.reply_to(reported, judgement_text, reply_markup=keyboard)
        except ApiException as e:
            if str(e.result) == config.unreachable_exc:
                continue

    bot.delete_message(chat_id=message.chat.id, message_id=message.message_id)
    logger.info("Message {} has been successfully auto-reported".format(
        message.message_id))
Esempio n. 9
0
def getCounter():
    return r.get("counter")
Esempio n. 10
0
def getStarttime():
    return r.get("stime")
Esempio n. 11
0
def getStartflag():
    return r.get("startflag")
Esempio n. 12
0
def getaiContinue():
    return r.get("aicontinue")
Esempio n. 13
0
def getContinue():
    return r.get('continue')
Esempio n. 14
0
def index():
    """
    搜索提示功能
    根据输入的值自动联想,支持中文,英文,英文首字母
    :return: response
    """
    start_time = time.time()
    # 输入词转小写
    wd = request.args.get('wd').lower()

    user_id = request.args.get('user_id')
    if user_id and user_id != 'None':
        print(user_id)
        print(type(user_id))

    if not wd:
        return make_response(
            """queryList({"q":"","p":false,"bs":"","csor":"0","status":770,"s":[]});"""
        )

    # 搜索词(支持中文,英文,英文首字母)
    s = wd

    # result = search_script_conf.get_tips_word(search_script_conf.sug, search_script_conf.data, s)
    #     # print('前缀:',result)
    global TREE
    if TREE is None:
        # 第一次为空,需要在接口中加载一次已经生成好的字典树,pickle.loads这一步耗时接近1s
        temp = r.get('tree')
        TREE = pickle.loads(temp)

    # 内容中有字典树,直接获取
    suggest = get_tips_word(TREE[0], TREE[1], s)
    print('前缀:', suggest)

    data_top = {}
    if len(suggest) > 0:
        # 从redis获取热度值
        heat_list = r_decode.hmget("hot_word_heat", suggest)
        _map = dict(zip(suggest, heat_list))
        # 按照热度值排序
        data = dict(sorted(_map.items(), key=lambda x: int(x[1]),
                           reverse=True))
        print("热度值排序:", data)
        # TODO 获取个性化搜索结果展示
        suggest = list(data.keys())[:15]
        data_top = {i: data[i] for i in suggest}

    response = make_response("""queryList({'q':'""" + wd +
                             """','p':false,'s':""" + str(suggest) + """});""")

    response.headers['Content-Type'] = 'text/javascript; charset=utf-8'

    end_time = time.time()
    # 记录日志
    ret = dict()
    ret['code'] = 200
    ret['msg'] = "ok"
    ret['search_word'] = wd
    ret['search_suggest'] = suggest
    ret['heat_rank'] = data_top
    ret['search_type'] = 'search_suggest'
    ret['gmt_created'] = time.strftime('%Y-%m-%d %H:%M:%S',
                                       time.localtime(time.time()))
    ret['user_id'] = ''
    ret['platformCode'] = ''
    ret['total_time'] = end_time - start_time
    info(json.dumps(ret, ensure_ascii=False))
    return response