aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuker667 <huker@tuta.io>2026-07-05 15:43:52 +0300
committerhuker667 <huker@tuta.io>2026-07-05 15:43:52 +0300
commit4c8e21fd4287c3e26ca470c520d9d234ef2da450 (patch)
treefd96401b3f577d52052e9e44baef8e2d442c7c5e
parentc033859505baa8657c3308d0abdefce610d997fa (diff)
downloaduzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.tar.gz
uzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.tar.bz2
uzbekgpt-4c8e21fd4287c3e26ca470c520d9d234ef2da450.zip
fix antiflood megaozbeksystem
-rw-r--r--helpers.py15
-rw-r--r--main.py100
-rw-r--r--supergenerator.py1
3 files changed, 76 insertions, 40 deletions
diff --git a/helpers.py b/helpers.py
index fde738b..d97236c 100644
--- a/helpers.py
+++ b/helpers.py
@@ -11,6 +11,12 @@ def is_blocked(user_id):
current_time = time.time()
if user_id and user_id in last_command_time:
time_diff = current_time - last_command_time[user_id][0]
+ if user_id in last_error_time:
+ time_error_diff = current_time - last_error_time[user_id]
+ else:
+ last_error_time[user_id] = current_time
+ time_error_diff = 1984
+
if time_diff < 3:
alo = "🚫 *файл не вошёл.* хватит так быстро слать свои сообщения.\n" \
f"подожди {round(3 - time_diff, 3)} секунд, брат😡😡"
@@ -18,9 +24,16 @@ def is_blocked(user_id):
alo = "🚫 *файл не вошёл.* я ещё не сгенерировал прошлое сообщение.\n" \
f"подожди {round(10 - time_diff, 3)} секунд, чтобы я закрыл глаза " \
"на это da."
+ elif len(last_command_time[user_id][2]) > 1:
+ alo = "🚫 *файл не вошёл.* хватит так быстро слать свои сообщения."
else:
return "", False
- return alo, True
+
+ if time_error_diff < 2:
+ return "", True
+ else:
+ last_error_time[user_id] = current_time
+ return alo, True
return "", False
diff --git a/main.py b/main.py
index 8f08674..7a8a221 100644
--- a/main.py
+++ b/main.py
@@ -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(
diff --git a/supergenerator.py b/supergenerator.py
index f63e00a..bb3efca 100644
--- a/supergenerator.py
+++ b/supergenerator.py
@@ -11,6 +11,7 @@ from colors import *
from config import *
last_command_time = {}
+last_error_time = {}
last_block_time = {}
user_contexts = {}