April 3

Как автоматически нажимать Повтор, если Дипсик занят

Иногда при работе с Дипсиком сервер может быть перегружен, и вместо нужного интерфейса появляется сообщение "Сервер занят". В таком случае приходится вручную нажимать кнопку "Повтор", что отнимает время. Но этот процесс можно автоматизировать с помощью Python-скрипта!

Как это работает

Скрипт использует библиотеку pyautogui для поиска изображений на экране и эмуляции кликов. Алгоритм простой:

  1. Ждём появления картинки "Сервер занят" (шаблон template_path1).
  2. Как только она найдена — кликаем по кнопке "Повтор" (шаблон template_path).

Подготовка файлов

Перед запуском скрипта нужно:

  1. Создать папку и поместить в неё:
    • Сам скрипт (autorepeat.py).
    • Изображение template_path1.png (сообщение "Сервер занят").
    • Изображение template_path.png (кнопка "Повтор").

Код скрипта

import cv2
import numpy as np
import pyautogui
import time
from PIL import ImageGrab

# Функция для захвата экрана
def capture_screen():
   screen = ImageGrab.grab()
   screen = np.array(screen)
   screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)
   return screen

# Функция для поиска объекта на экране
def find_object_on_screen(template_path):
   template = cv2.imread(template_path, cv2.IMREAD_COLOR)
   screen = capture_screen()
   result = cv2.matchTemplate(screen, template, cv2.TM_CCOEFF_NORMED)
   min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
   return max_loc, max_val

# Функция для эмуляции движения мыши и нажатия кнопки
def aim_and_shoot(target_position):
   current_position = pyautogui.position()
   currentMouseX, currentMouseY = current_position
   x, y = target_position
   #pyautogui.moveTo(x+186, y+46, duration=0.2)  # Двигаем мышь к точке
   pyautogui.moveTo(x+50, y+10, duration=0)
   pyautogui.click()  # Выстрел
   pyautogui.moveTo(currentMouseX, currentMouseY, duration=0) #возвращаем мышь назад
   #pyautogui.click()
   print("clicked")

# Основной цикл бота
def main():
   #template_path = "server_busy.png"  # Шаблон изображения
   template_path1 = "TheServerIsBusy_text.png"
   template_path = "deepseek_update.png"
   template_path2 = "too_frequently.png"
   while True:
       target_position2, confidence2 = find_object_on_screen(template_path2)
       if confidence2 > 0.9:
            print("long pause")
            time.sleep(600)
       target_position1, confidence1 = find_object_on_screen(template_path1)
       if confidence1 < 0.9:
             #print("tet")
             time.sleep(1)
             continue
       target_position, confidence = find_object_on_screen(template_path)
       print ('Confindence: ', confidence)
       print ('Target position: ', target_position)
       if confidence > 0.8:  # Если уверенность в обнаружении высока
           aim_and_shoot(target_position)
           print ("Position found!!!")
           #print ('Target position: ', target_position)
           #print ('Confindence: ', confidence)
       time.sleep(1)  # Пауза между итерациями

if __name__ == "__main__":
   main()

Как запустить

  1. Установите зависимости: pip install pyautogui opencv-python
  2. Запустите скрипт: python autorepeat.py

Важные моменты

Точность изображений – шаблоны должны быть чёткими, без лишних элементов.
Разрешение экрана – скрипт работает только при том же разрешении, на котором сделаны скриншоты.
Задержка – если кнопка появляется не сразу, можно увеличить time.sleep().

Теперь скрипт будет автоматически нажимать "Повтор", когда Дипсик занят! 🚀

Вот примеры картинок: