March 26, 2019

Написание спам чата для игры Dota 2.

С чего всё началось спросите вы? Всё банально просто. Попросил меня друг написать ему спамера по чату Dota 2 для бесплатной и таргетированной рекламы в этом направлении. Ну думаю я, сделаю ка я обычный кликер с имитированием нажатий нужных клавиш, да напишу ка я это дело на питоне, компильну в exe с помощью pyinstaller да и дело с концом. Ага, как бы не так...

Началось всё с обычного pyautogui

Думал этим и закончится. Но нет же. Оно отказывалось работать и нажимать на enter.

Хорошо подумал я, пойдем дальше... Решил попробовать pynput

Думаете оно работало в игре? Нет, оно там не работало. Оно могло кликать и даже писать текст в чат, но вот нажимать клавишу Enter оно не могло. Да, возможно я криворукий, но, ОНО НЕ НАЖИМАЛО ENTER В ИГРЕ. (Да-да, у меня горит)

Вы уже возможно задались вопросом, а что было дальше? А дальше я пошел писать сие чудо на плюсах.

#include <iostream>
#include <Windows.h>
int main()
{
    keybd_event('C', 0,0,0);
    keybd_event('C', 0,KEYEVENTF_KEYUP,0);
    return 0;
}

Вот вам как пример кода на плюсах, сам файл я удалил из-за того что он не работал, то бишь он не мог нажимать enter.

Любой хороший программист вам скажет что определенные языки решают определенные вопросы в плане написания софта.

Что же, я не остановился на этом, я полез в дебри дальше и нашел чудо под названием AutoHotKey

AutoHotkey — свободно распространяемый язык для автоматизации выполнения задач в Microsoft Windows. AutoHotkey является языком программирования сценариев, приспособленный к лёгкому назначению и переназначению горячих клавиш, включая кнопки мыши и джойстика.

Спустя 1 час в гугле я смог наконец написать чудо которое работало как я того хотел:

О да, оно работает, это прекрасно.

Компильнуть ahk скрипт в exe довольно таки просто :

Что бы преобразовать AHK в .exe файл нам нужно нажать правой кнопкой мыши на наш AHK скрипт, далее выбрать функцию:"Complite Script"

Вот наш exe файл и готов. Функционал как вы видите скромный. Далее рассмотрим сам код.

#SingleInstance force
1::
Loop
{
Click 780, 653
Click 1121, 931
sendinput, Привет, мир {enter}
Click 918, 653
Click 1121, 931
sendinput, Привет, мир {enter}
Click 1029, 653
Click 1121, 931
sendinput, Привет, мир {enter}
Click 1127, 653
Click 1121, 931
sendinput, Привет, мир {enter}
sleep, 10000
}
Return

F11::
  If not Stop
  {
    Stop := True
    Pause
  }
Return

F12::
  If Stop
  {
    Stop := False
    Pause
  }
Return

При нажатии клавиши 1 будет выполнятся цикл который кликает на окно чата, затем кликает на строчку ввода и вводит текст после чего нажимает enter. Всё до боли просто.

При нажатии клавиши F11 скрипт будет остановлен, при нажатии клавиши F12 он будет запущен вновь. Так же, таймаут написания сообщений равен 10 секундам. Настолько простой и рабочий скрипт что просто прекрасно...

Что касается координат, их я узнавал с помощью скрипта на питоне.

import pynput.mouse as ms
mouse = ms.Controller()
while True:
	print(str(mouse.position))
	sleep(0.5)

На этом всё, мой код не идеален и вы всегда можете его модернизировать.