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
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
def get_from_cache( country, city, sku, ): chache_name = create_cache_name(country, city, sku) data = r.get(escape(chache_name)) return data
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"
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()
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.")
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)
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))
def getCounter(): return r.get("counter")
def getStarttime(): return r.get("stime")
def getStartflag(): return r.get("startflag")
def getaiContinue(): return r.get("aicontinue")
def getContinue(): return r.get('continue')
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