fix command
This commit is contained in:
+57
-27
@@ -814,14 +814,14 @@ class BotInterface:
|
||||
else str(params.min_series)
|
||||
)
|
||||
perlink_label = (
|
||||
f"🔢 *Кликов в одной серии*\n"
|
||||
f"🔢 *Кликов в одном цикле*\n"
|
||||
f"Сколько кликов подряд делать перед паузой.\n"
|
||||
f"Текущее: {cur}\n"
|
||||
f"Диапазон `2-5` или фиксированно `3`."
|
||||
)
|
||||
delay_label = (
|
||||
f"⏱️ *Пауза между сериями*\n"
|
||||
f"Сколько секунд ждать после каждой серии кликов.\n"
|
||||
f"⏱️ *Пауза между циклами*\n"
|
||||
f"Сколько секунд ждать после каждого цикла кликов.\n"
|
||||
f"Текущая: {params.min_delay}–{params.max_delay} сек\n"
|
||||
f"Диапазон `30-60` или фиксированно `45`."
|
||||
)
|
||||
@@ -856,8 +856,8 @@ class BotInterface:
|
||||
),
|
||||
"perlink": perlink_label,
|
||||
"clickdelay": (
|
||||
f"⏳ *Задержка между кликами в серии*\n"
|
||||
f"Сколько секунд ждать между каждым кликом внутри одной серии.\n"
|
||||
f"⏳ *Задержка между кликами в цикле*\n"
|
||||
f"Сколько секунд ждать между каждым кликом внутри одного цикла.\n"
|
||||
f"Текущая: {params.min_click_delay}–{params.max_click_delay} сек\n"
|
||||
f"Диапазон `5-15` или фиксированно `10`."
|
||||
),
|
||||
@@ -1734,7 +1734,7 @@ class BotInterface:
|
||||
mn = mx = int(value)
|
||||
await self.task_manager.update_task(task_id, min_series=mn, max_series=mx)
|
||||
lbl = f"{mn}–{mx}" if mn != mx else str(mn)
|
||||
await message.answer(f"✅ Серия: {lbl} кликов")
|
||||
await message.answer(f"✅ Цикл: {lbl} кликов")
|
||||
else:
|
||||
await self.task_manager.update_task(task_id, visits_per_link=int(value))
|
||||
await message.answer(f"✅ На ссылку: {value}")
|
||||
@@ -1809,9 +1809,9 @@ class BotInterface:
|
||||
info = (
|
||||
f"🔗 {params.url[:50]}\n"
|
||||
f"📊 Выполнено: {params.successful_visits} из {params.max_visits} переходов\n\n"
|
||||
f"🔢 Кликов в серии: {series_range}\n"
|
||||
f"🔢 Кликов в цикле: {series_range}\n"
|
||||
f"⏳ Задержка между кликами: {params.min_click_delay}–{params.max_click_delay} сек\n"
|
||||
f"⏱ Пауза между сериями: {params.min_delay}–{params.max_delay} сек\n"
|
||||
f"⏱ Пауза между циклами: {params.min_delay}–{params.max_delay} сек\n"
|
||||
f"📖 Время на странице: {params.min_reading}–{params.max_reading} сек"
|
||||
)
|
||||
else:
|
||||
@@ -1844,16 +1844,14 @@ class BotInterface:
|
||||
)
|
||||
if params.task_type == "user_visit":
|
||||
builder.row(
|
||||
InlineKeyboardButton(text="🔢 Размер серии", callback_data=f"uset_{task_id}_perlink"),
|
||||
InlineKeyboardButton(text="🔢 Размер цикла", callback_data=f"uset_{task_id}_perlink"),
|
||||
InlineKeyboardButton(text="⏳ Между кликами", callback_data=f"uset_{task_id}_clickdelay"),
|
||||
)
|
||||
else:
|
||||
builder.row(
|
||||
InlineKeyboardButton(text="👥 % зрителей", callback_data=f"uset_{task_id}_percent"),
|
||||
InlineKeyboardButton(text="🔗 Резерв кликов", callback_data=f"uset_{task_id}_perlink"),
|
||||
InlineKeyboardButton(text="📊 CTR %", callback_data=f"uset_{task_id}_ctr"),
|
||||
InlineKeyboardButton(text="📊 % CTR зрителей", callback_data=f"uset_{task_id}_ctr"),
|
||||
InlineKeyboardButton(text="🌐 Домены", callback_data=f"uedit_{task_id}"),
|
||||
)
|
||||
builder.row(InlineKeyboardButton(text="🌐 Домены", callback_data=f"uedit_{task_id}"))
|
||||
builder.row(InlineKeyboardButton(text="🔙 К задачам", callback_data="my_tasks"))
|
||||
|
||||
try:
|
||||
@@ -1955,7 +1953,7 @@ class BotInterface:
|
||||
|
||||
|
||||
async def _run_url_visits(self, task_id: str, params: TaskParams, bot):
|
||||
"""Посещает URL сериями: sleep(межсерийная) → N кликов(+sleep между ними) → повтор."""
|
||||
"""Посещает URL циклами: sleep(межцикловая) → N кликов(+sleep между ними) → повтор."""
|
||||
total_done = 0
|
||||
max_v = params.max_visits or 1
|
||||
|
||||
@@ -1969,15 +1967,15 @@ class BotInterface:
|
||||
|
||||
try:
|
||||
while total_done < max_v and not params.stopped:
|
||||
# --- пауза перед серией ---
|
||||
# --- пауза перед циклом ---
|
||||
await _sleep_interruptible(params.get_delay())
|
||||
if params.stopped:
|
||||
break
|
||||
|
||||
# размер серии выбирается случайно каждый раз
|
||||
# размер цикла выбирается случайно каждый раз
|
||||
series_size = params.get_series_size()
|
||||
|
||||
# --- серия кликов ---
|
||||
# --- цикл кликов ---
|
||||
for click_num in range(series_size):
|
||||
if params.stopped or total_done >= max_v:
|
||||
break
|
||||
@@ -2007,7 +2005,7 @@ class BotInterface:
|
||||
logger.error(f"URL visit error: {e}")
|
||||
total_done += 1
|
||||
|
||||
# задержка между кликами внутри серии (кроме последнего)
|
||||
# задержка между кликами внутри цикла (кроме последнего)
|
||||
if click_num < series_size - 1 and not params.stopped and total_done < max_v:
|
||||
await _sleep_interruptible(params.get_click_delay())
|
||||
|
||||
@@ -2171,6 +2169,11 @@ class BotInterface:
|
||||
builder.row(InlineKeyboardButton(text="🔙 К пользователю", callback_data=f"udetail_{user_id}"))
|
||||
else:
|
||||
for tid, p in list(user_tasks.items())[:8]:
|
||||
if p.task_type == "user_visit":
|
||||
domain = extract_domain(p.url)[:18] if p.url else "?"
|
||||
label = f"🔗 {domain}"
|
||||
else:
|
||||
label = f"📺 {p.channel}"
|
||||
if not p.completed and not p.stopped:
|
||||
pause_btn = (
|
||||
InlineKeyboardButton(text="▶️", callback_data=f"uresume_{tid}")
|
||||
@@ -2178,13 +2181,14 @@ class BotInterface:
|
||||
InlineKeyboardButton(text="⏸️", callback_data=f"upause_{tid}")
|
||||
)
|
||||
builder.row(
|
||||
InlineKeyboardButton(text=label, callback_data=f"utask_{tid}"),
|
||||
pause_btn,
|
||||
InlineKeyboardButton(text="⚙️", callback_data=f"utask_{tid}"),
|
||||
InlineKeyboardButton(text="🗑️", callback_data=f"ustop_{tid}"),
|
||||
)
|
||||
else:
|
||||
builder.row(InlineKeyboardButton(
|
||||
text=f"🗑️ {p.channel} (завершена)",
|
||||
text=f"🗑️ {label} (завершена)",
|
||||
callback_data=f"ustop_{tid}"
|
||||
))
|
||||
builder.row(InlineKeyboardButton(text="📝 Новая задача", callback_data="new_task"))
|
||||
@@ -2241,7 +2245,7 @@ class BotInterface:
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.row(InlineKeyboardButton(text="❌ Отмена", callback_data="cancel_new_task"))
|
||||
sent = await message.answer(
|
||||
f"🔗 {text[:50]}\n\nШаг 2/3 — введите количество переходов:",
|
||||
f"🔗 {text[:50]}\n\nШаг 2/4 — введите количество переходов:",
|
||||
reply_markup=builder.as_markup()
|
||||
)
|
||||
self._menu_msg[user_id] = sent.message_id
|
||||
@@ -2270,9 +2274,9 @@ class BotInterface:
|
||||
builder.row(InlineKeyboardButton(text="❌ Отмена", callback_data="cancel_new_task"))
|
||||
sent = await message.answer(
|
||||
f"✅ Переходов: {count}\n\n"
|
||||
"Шаг 3/3 — сколько кликов в одной серии?\n\n"
|
||||
"Бот делает N кликов подряд, затем ждёт паузу и начинает следующую серию.\n\n"
|
||||
"Диапазон `2-5` — каждая серия будет случайной длины от 2 до 5.\n"
|
||||
"Шаг 3/4 — сколько кликов в одном цикле?\n\n"
|
||||
"Бот делает N кликов подряд, затем ждёт паузу и начинает следующий цикл.\n\n"
|
||||
"Диапазон `2-5` — каждый цикл будет случайной длины от 2 до 5.\n"
|
||||
"Одно число `3` — всегда ровно 3 клика.",
|
||||
reply_markup=builder.as_markup()
|
||||
)
|
||||
@@ -2290,12 +2294,38 @@ class BotInterface:
|
||||
await self._send_temp(message, "Введите число или диапазон, например: `3` или `2-5`")
|
||||
return
|
||||
|
||||
if user_id in self._menu_msg:
|
||||
await self._safe_delete(message.bot, message.chat.id, self._menu_msg.pop(user_id))
|
||||
self._user_task_state[user_id] = {**state, "step": "delay", "min_series": mn, "max_series": mx}
|
||||
builder = InlineKeyboardBuilder()
|
||||
builder.row(InlineKeyboardButton(text="❌ Отмена", callback_data="cancel_new_task"))
|
||||
series_label = f"{mn}–{mx}" if mn != mx else str(mn)
|
||||
sent = await message.answer(
|
||||
f"✅ Цикл: {series_label} кликов\n\n"
|
||||
"Шаг 4/4 — таймаут между циклами (в минутах)\n\n"
|
||||
"Введите одно число, например `3` — пауза 3 минуты.",
|
||||
reply_markup=builder.as_markup()
|
||||
)
|
||||
self._menu_msg[user_id] = sent.message_id
|
||||
|
||||
elif state["step"] == "delay":
|
||||
try:
|
||||
mn_d = mx_d = int(text)
|
||||
if mn_d < 1:
|
||||
raise ValueError
|
||||
except Exception:
|
||||
await self._send_temp(message, "Введите целое число минут, например: `3`")
|
||||
return
|
||||
|
||||
del self._user_task_state[user_id]
|
||||
await self._clean_prev(message)
|
||||
|
||||
url = state["url"]
|
||||
count = state["count"]
|
||||
mn = state["min_series"]
|
||||
mx = state["max_series"]
|
||||
series_label = f"{mn}–{mx}" if mn != mx else str(mn)
|
||||
delay_label = str(mn_d)
|
||||
|
||||
task_id = f"u{user_id}_{extract_domain(url)[:12]}_{datetime.now().strftime('%H%M%S')}"
|
||||
params = TaskParams(
|
||||
@@ -2305,8 +2335,8 @@ class BotInterface:
|
||||
min_series=mn,
|
||||
max_series=mx,
|
||||
user_id=user_id,
|
||||
min_delay=settings.DEFAULT_MIN_DELAY,
|
||||
max_delay=settings.DEFAULT_MAX_DELAY,
|
||||
min_delay=mn_d * 60,
|
||||
max_delay=mx_d * 60,
|
||||
min_reading=settings.DEFAULT_MIN_READING,
|
||||
max_reading=settings.DEFAULT_MAX_READING,
|
||||
started_at=datetime.now(),
|
||||
@@ -2327,8 +2357,8 @@ class BotInterface:
|
||||
await self._send_temp(
|
||||
message,
|
||||
f"✅ Задача создана\n🔗 {url[:50]}\n"
|
||||
f"🔢 Переходов: {count} | Серия: {series_label} кликов\n"
|
||||
f"⏱ Пауза между сериями: {settings.DEFAULT_MIN_DELAY}–{settings.DEFAULT_MAX_DELAY} сек",
|
||||
f"🔢 Переходов: {count} | Цикл: {series_label} кликов\n"
|
||||
f"⏱ Пауза между циклами: {delay_label} мин",
|
||||
delay=6
|
||||
)
|
||||
await self._show_user_menu(message, user_id=user_id)
|
||||
|
||||
Reference in New Issue
Block a user