diff options
| author | huker667 <huker@tuta.io> | 2026-07-05 15:43:52 +0300 |
|---|---|---|
| committer | huker667 <huker@tuta.io> | 2026-07-05 15:43:52 +0300 |
| commit | 4c8e21fd4287c3e26ca470c520d9d234ef2da450 (patch) | |
| tree | fd96401b3f577d52052e9e44baef8e2d442c7c5e /main.py | |
| parent | c033859505baa8657c3308d0abdefce610d997fa (diff) | |
| download | uzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.tar.gz uzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.tar.bz2 uzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.zip | |
fix antiflood megaozbeksystem
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 100 |
1 files changed, 61 insertions, 39 deletions
@@ -94,14 +94,12 @@ async def guest_middleware(handler, event, data): if not is_replied_bot(message, is_channel, user_text, config) and event.message: return - # снизу очень важный кусок кода!! у нас же async бот да ну вот - # если переслать несколько сообщений то удасться обойти ограничение - # по задержке между генерациями и поэтому тут такое решение - # скоро это будет нормально реализовано. ждите. if user_id: - await asyncio.sleep(uniform(0,1)) + await asyncio.sleep(uniform(0,0.3)) text, blocked = is_blocked(user_id) + if not text and blocked: + return if blocked: if event.guest_message: await g_answer(data, message, text, title="ошибка врат") @@ -115,15 +113,24 @@ async def guest_middleware(handler, event, data): return + ensure_user(user_id) + + if not user_id in last_command_time: + last_command_time[user_id] = [current_time, True, [message.message_id]] + elif len(last_command_time[user_id][2]) == 0: + last_command_time[user_id] = [current_time, True, [message.message_id]] + else: + last_command_time[user_id][0] = current_time + last_command_time[user_id][1] = True + last_command_time[user_id][2] += [message.message_id] + + await asyncio.sleep(uniform(0,0.5)) + if event.message: try: await bot.send_chat_action(chat_id=message.chat.id, action="typing") except TelegramForbiddenError: return - - ensure_user(user_id) - - last_command_time[user_id] = [current_time, True] msg = None replied = message.reply_to_message or None @@ -278,40 +285,45 @@ async def guest_middleware(handler, event, data): message_id = msg.message_id else: message_id = None - - if is_channel and event.message: - result = await generate( - bot=bot, - prompt=prompt, - chat_id=message.chat.id, - user_id=None, - message_id=message_id, - ) - elif event.message: - result = await generate( - bot=bot, - prompt=prompt, - chat_id=message.chat.id, - user_id=user_id, - message_id=message_id, - ) - else: - result = await generate( - bot=bot, - prompt=prompt, - chat_id=None, - user_id=user_id, - message_id=None, - ) - - result = parse_tools(result) + + if len(last_command_time[user_id][2]) == 1: + if is_channel and event.message: + result = await generate( + bot=bot, + prompt=prompt, + chat_id=message.chat.id, + user_id=None, + message_id=message_id, + ) + elif event.message: + result = await generate( + bot=bot, + prompt=prompt, + chat_id=message.chat.id, + user_id=user_id, + message_id=message_id, + ) + else: + result = await generate( + bot=bot, + prompt=prompt, + chat_id=None, + user_id=user_id, + message_id=None, + ) + + result = parse_tools(result) - if event.guest_message: - add_one_to("stats/guest") + if event.guest_message: + add_one_to("stats/guest") + else: + print(f"{YELLOW} -- err in blocking 2 {RESET}") + return else: return last_command_time[user_id][1] = False + last_command_time[user_id][2] = [] try: if event.guest_message: @@ -391,6 +403,8 @@ async def chosen_inline_result_handler(chosen_result: ChosenInlineResult): else: current_time = time.time() alo, blocked = is_blocked(user_id) + if not alo: + return if alo and blocked: await bot.edit_message_text( text=alo, @@ -398,7 +412,14 @@ async def chosen_inline_result_handler(chosen_result: ChosenInlineResult): ) return - last_command_time[user_id] = [current_time, True] + if not user_id in last_command_time: + last_command_time[user_id] = [current_time, True, [inline_message_id]] + elif len(last_command_time[user_id][2]) == 0: + last_command_time[user_id] = [current_time, True, [inline_message_id]] + else: + last_command_time[user_id][0] = current_time + last_command_time[user_id][1] = True + last_command_time[user_id][2] += [inline_message_id] if inline_message_id: try: @@ -407,6 +428,7 @@ async def chosen_inline_result_handler(chosen_result: ChosenInlineResult): user_id=chosen_result.from_user.id, ) last_command_time[user_id][1] = False + last_command_time[user_id][2] = [] except Exception as e: error = parse_response(str(e)) await bot.edit_message_text( |