Пишем бота для игры в LumberJack на python
ⅅ卂尺ҠᎶ卂爪乇尺LumberJack это телеграмм игра в которой вы играете за лесоруба Джека, вы должны рубить дерево и не врезаться в ветки, так же сложность повышает таймер который все быстрее заканчивается по мере игры.

Рассмотрим критерии по которым бот должен играть:
- Бот не должен ждать пока произойдет нажатия кнопок
- Бот должен видеть цвет пикселя в 2-ух местах
- Бот не должен замирать на месте
Приступим
Установим нужные библиотеки
apt install python3 python3-pip python3-tkinter; pip install pyautogui pillow
Импортируем нужные нам модули в файле bot.py
import pyautogui, time from threading import Thread import PIL.ImageGrab as ImageGrab
Первая строка импортирует pyautogui который будет нажимать на кнопки и time который будет использоваться для паузы бота.
Вторая строка импортирует Thread из модуля threading, она служит для многопоточности так как мы будем обходить задержку нажатий клавиш.
Третья строка импортирует ImageGrab для захвата определенной области в которой мы будем искать нужный нам пиксель.
Пишем функцию для нажатия кнопок и переменные для упрощения настройки
x1=
x2=
y=
sleep=0.25
pix2=x2-x1-1,0
box_area1 = (x1, y, x2, y+1)
def press(button):
pyautogui.press(button)
pyautogui.press(button)
x1, x2, y - мы подставляем координаты так как на скриншоте:

Эти точки служат некими глазами компьютера, как только в этой точке изменится цвет пикселя бот запустит функцию нажатия кнопки.
Пишем обработчик экрана
while True:
box = ImageGrab.grab(box_area1)
p1 = box.getpixel((0,0))
p2 = box.getpixel((x2-x1-1,0))
if p1 != (211, 247, 255):
Thread(target=press, args("right",)).start()
elif p2 != (211,247,255):
Thread(target=press, args("right",)).start()
time.sleep(sleep)
Вот и сам обработчик, приступим к его разбору.
Все происходит в бессконечном цикле, чтобы выйти из него нужно нажать комбинацию Ctrl+c.
box - это поле зрение нашего бота.
p1, p2 - координаты пикселей в этой "коробке".
Далее идет проверка на цвет пикселя p1 и p2, если он изменился вызывает функцию нажатия на кнопке в отдельном потоке, зачем отдельный поток? Чтобы не ждать пока pyautogui нажмет 2 раза на кнопку ибо это долго.
Далее в конце функции идет time.sleep, он нужен чтобы бот не убивал себя ибо игра не успевала бы менять ветки.
Вот чего смог добиться мой бот:

Хочете 2 часть данного гайда где бот сможет набирать в 2 раза больше очков? Если да то пишите нам в чат #хочу_продолжение