Гайд AHK + API VK

degrando

Известный
Автор темы
362
127
Короче, я не самый лучший гайдер, но таких гайдов именно с ахк я не нашел.
В общем, вырезали из Lani Soft Report функции для отправки и чтения сообщений.
Перейдем же к гайду.

Создание и настройка группы ВК:
Первое что нам необходимо сделать - создать группу ВК, надеюсь все знают как это делается.
Далее идем в настройки группы и в пункте "Сообщения" и включаем их.
После в пункте настройки выбираем подпункт "Работа с API".
1P9Tvr2.png
Жмем на кнопку "Создать Ключ", ставим разрешение на доступ к сообщениям сообщества и нажимаем "Создать"
ferYfwo.png
После подтверждаем создание ключа через номер или телефон, который привязан к ВК.
После подтверждения вы увидите ключ и его права, ключ необходимо сохранить или записать.
Номер страницы:
Далее нам необходимо узнать свой номер страницы, узнать его можно через настройки нажав в пункте "адрес страницы" кнопку "Изменить" и вы увидите ваш адрес страницы его тоже записываем.
V3ppB6K.png
АХК:
Создаем новый .ahk скрипт и заходим в его редактирование.
Нам нужно добавить 2 функции:
Функция для отправки сообщения человеку:
AutoHotKey:
vk_send(textvk)
{
text := RegExReplace(text, "%", "%25") ; first string
text := RegExReplace(text, "\+", "%2B")
text := RegExReplace(text, "#", "%23")
text := RegExReplace(text, "&", "%26")
text := RegExReplace(text, "`n", "%0A")
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", proxy "api.vk.com/method/messages.send?user_id=" vkid "&message=" textvk "&v=5.52&access_token=" token)
try
HTTP.Send()
return
}
Функция для чтения сообщений от человека:
AutoHotKey:
vk_get()
{
ComObjError(false)
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("POST", proxy "api.vk.com/method/messages.getHistory?count=1&user_id=" vkid "&access_token=" token "&v=5.85", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")
HTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
HTTP.Send()
HTTP.WaitForResponse()
jsontext := % HTTP.ResponseText
JSONvar =
(LTrim Join
%jsontext%
)

htmldoc := ComObjCreate("htmlfile")
Script := htmldoc.Script
Script.execScript(" ", "JScript")

oJSONvar := Script.eval("(" . JSONvar . ")")
text := % oJSONvar.response.items.0.text
date := % oJSONvar.response.items.0.date
from_id := % oJSONvar.response.items.0.from_id
fwd_messages_0 := % oJSONvar.response.items.0.fwd_messages.0.text
return Object("text", text, "date", round(date), "id", from_id, "replyText", fwd_messages_0)
}
Добавляем их в начало кода и теперь нам пригодятся данные которые мы добыли в ВК.
В самое начало кода прописываем 3 переменные -
AutoHotKey:
global vkid := "ваш id"
global token := "ваш ключ"
global proxy := "https://vk-api-proxy.xtrafrancyz.net/_/"
Заполняем сови данные - ключ, который мы взяли из группы и ваш id Вконтакте.
Перейдем к использованию функций.
vk_send:
Для отправки сообщения человеку необходимо использовать функцию vk_send()
Например:
AutoHotKey:
[/CENTER]
global vkid := ""
global token := ""
vk_send(textvk)
{
text := RegExReplace(text, "%", "%25") ; first string
text := RegExReplace(text, "\+", "%2B")
text := RegExReplace(text, "#", "%23")
text := RegExReplace(text, "&", "%26")
text := RegExReplace(text, "`n", "%0A")
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "http://api.vk.com/method/messages.send?user_id=" vkid "&message=" textvk "&v=5.131&random_id=0&access_token=" token)
bar =    "http://api.vk.com/method/messages.send?user_id=" vkid "&message=" textvk "&v=5.131&random_id=0&access_token=" token
try
HTTP.Send()

return
} 
f2::
vk_send("blast.hk")
return
[CENTER]
После нажатия клавиши F2 в ВК нам приходит такое сообщение:
А, нихуя не приходит, нужно сначала самому написать в группу! Чтобы у нее были права писать нам!
И так, после того как мы написали и снова нажали F2, нам приходит такое сообщение:
kKOs3VM.png

Можно ещё сделать например форму обратной связи:
AutoHotKey:
InputBox,vksend, Нашли баг? Отпишите мне!
vk_send(vksend)
sleep 100
MsgBox, Ваше обращение отправлено!
return
Gs6HJVN.png

И что бы мы не написали, оно будет отправлено.

vk_get:
Ну и собственно перейдем к чтению сообщений.
Для этого нужно использовать функцию vk_get()
Код выглядит примерно так:
AutoHotKey:
f2::
SetTimer, checkMessage, 250
return
checkMessage:
if not ((vk_message := vk_get()) and (vk_message.date != last_date))
{
return
}
last_date := vk_message.date
message := vk_message.text
if RegExMatch(message, "i)^!test (.*)$", mes)
{
msgbox, %mes1%
}
return
Если в группу приходит сообщение с текстом равным "!test arg", то оно отправит нам аргумент.
Ну собственно, на этом всё, если этот гайд был вам полезен, не забудьте нажать отметку "нравиться".

 
Последнее редактирование:

Quasper

Известный
834
354
Нецелесообразно держать токен группы в скрипте что ты собираешься распространять, можно задействовать хост на котором всё будет обрабатываться и храниться токен. А так да, не плохо.
 

madrasso

Потрачен
883
323
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нецелесообразно держать токен группы в скрипте что ты собираешься распространять, можно задействовать хост на котором всё будет обрабатываться и храниться токен. А так да, не плохо.
А кто сказал, что тот, кто это будет использовать, будет распространять скрипт?
 

Quasper

Известный
834
354
А кто сказал, что тот, кто это будет использовать, будет распространять скрипт?
Ну в примере стоит багтрекер скрипта, следовательно ты же сам себе не будешь сообщать о багах. Да, понимаю что можно много чего придумать, но большинство скриптошкольников будут херачить багтрекеры по примеру.
 

madrasso

Потрачен
883
323
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну в примере стоит багтрекер скрипта, следовательно ты же сам себе не будешь сообщать о багах. Да, понимаю что можно много чего придумать, но большинство скриптошкольников будут херачить багтрекеры по примеру.
Ну и пусть херачат, когда нибудь придет более умный школьник, который будет флудить по токену.

Все учатся на ошибках.
 

degrando

Известный
Автор темы
362
127
Нецелесообразно держать токен группы в скрипте что ты собираешься распространять, можно задействовать хост на котором всё будет обрабатываться и храниться токен. А так да, не плохо.
Можно конечно, я просто дал информацию, а вы пользуйтесь ей как хотите.
Если функцию немного доработать, то можно обмениваться сообщениями))
 
Последнее редактирование:
  • Нравится
Реакции: Михаил Бластов

Михаил Бластов

Известный
457
167
Короче, я не самый лучший гайдер, но таких гайдов именно с ахк я не нашел.
В общем, вырезали из Lani Soft Report функции для отправки и чтения сообщений.
Перейдем же к гайду.

Создание и настройка группы ВК:
Первое что нам необходимо сделать - создать группу ВК, надеюсь все знают как это делается.
Далее идем в настройки группы и в пункте "Сообщения" и включаем их.
После в пункте настройки выбираем подпункт "Работа с API".
1P9Tvr2.png
Жмем на кнопку "Создать Ключ", ставим разрешение на доступ к сообщениям сообщества и нажимаем "Создать"
ferYfwo.png
После подтверждаем создание ключа через номер или телефон, который привязан к ВК.
После подтверждения вы увидите ключ и его права, ключ необходимо сохранить или записать.
Номер страницы:
Далее нам необходимо узнать свой номер страницы, узнать его можно через настройки нажав в пункте "адрес страницы" кнопку "Изменить" и вы увидите ваш адрес страницы его тоже записываем.
V3ppB6K.png
АХК:
Создаем новый .ahk скрипт и заходим в его редактирование.
Нам нужно добавить 2 функции:
Функция для отправки сообщения человеку:
AutoHotKey:
vk_send(textvk)
{
text := RegExReplace(text, "%", "%25") ; first string
text := RegExReplace(text, "\+", "%2B")
text := RegExReplace(text, "#", "%23")
text := RegExReplace(text, "&", "%26")
text := RegExReplace(text, "`n", "%0A")
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", proxy "api.vk.com/method/messages.send?user_id=" vkid "&message=" textvk "&v=5.52&access_token=" token)
try
HTTP.Send()
return
}
Функция для чтения сообщений от человека:
AutoHotKey:
vk_get()
{
ComObjError(false)
HTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
HTTP.Open("POST", proxy "api.vk.com/method/messages.getHistory?count=1&user_id=" vkid "&access_token=" token "&v=5.85", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36")
HTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
HTTP.Send()
HTTP.WaitForResponse()
jsontext := % HTTP.ResponseText
JSONvar =
(LTrim Join
%jsontext%
)

htmldoc := ComObjCreate("htmlfile")
Script := htmldoc.Script
Script.execScript(" ", "JScript")

oJSONvar := Script.eval("(" . JSONvar . ")")
text := % oJSONvar.response.items.0.text
date := % oJSONvar.response.items.0.date
from_id := % oJSONvar.response.items.0.from_id
fwd_messages_0 := % oJSONvar.response.items.0.fwd_messages.0.text
return Object("text", text, "date", round(date), "id", from_id, "replyText", fwd_messages_0)
}
Добавляем их в начало кода и теперь нам пригодятся данные которые мы добыли в ВК.
В самое начало кода прописываем 3 переменные -
AutoHotKey:
global vkid := "ваш id"
global token := "ваш ключ"
global proxy := "https://vk-api-proxy.xtrafrancyz.net/_/"
Заполняем сови данные - ключ, который мы взяли из группы и ваш id Вконтакте.
Перейдем к использованию функций.
vk_send:
Для отправки сообщения человеку необходимо использовать функцию vk_send()
Например:
AutoHotKey:
global vkid :="240193106"
global vktoken:="5169802827b8c1d4fe0980f16209e94ab590de0b3fdc7262ce614fd0a02008d58dfe4929542f72cb98b74"
global proxy := "https://vk-api-proxy.xtrafrancyz.net/_/"
vk_send(text)
{
text := RegExReplace(text, "%", "%25") ; first string
text := RegExReplace(text, "\+", "%2B")
text := RegExReplace(text, "#", "%23")
text := RegExReplace(text, "&", "%26")
text := RegExReplace(text, "`n", "%0A")
vkid :="240193106"
token:="5169802827b8c1d4fe0980f16209e94ab590de0b3fdc7262ce614fd0a02008d58dfe4929542f72cb98b74"
global proxy := "https://vk-api-proxy.xtrafrancyz.net/_/"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", proxy "api.vk.com/method/messages.send?user_id=" vkid "&message=" text "&v=5.52&access_token=" token)
try
HTTP.Send()
return
}
f2:
vk_send(blast.hk)
return
После нажатия клавиши F2 в ВК нам приходит такое сообщение:
А, нихуя не приходит, нужно сначала самому написать в группу! Чтобы у нее были права писать нам!
И так, после того как мы написали и снова нажали F2, нам приходит такое сообщение:
kKOs3VM.png

Можно ещё сделать например форму обратной связи:
AutoHotKey:
InputBox,vksend, Нашли баг? Отпишите мне!
vk_send(vksend)
sleep 100
MsgBox, Ваше обращение отправлено!
return
Gs6HJVN.png

И что бы мы не написали, оно будет отправлено.

vk_get:
Ну и собственно перейдем к чтению сообщений.
Для этого нужно использовать функцию vk_get()
Код выглядит примерно так:
AutoHotKey:
f2::
SetTimer, checkMessage, 250
return
checkMessage:
if not ((vk_message := vk_get()) and (vk_message.date != last_date))
{
return
}
last_date := vk_message.date
message := vk_message.text
if RegExMatch(message, "i)^!test (.*)$", mes)
{
msgbox, %mes1%
}
return
Если в группу приходит сообщение с текстом равным "!test arg", то оно отправит нам аргумент.
Ну собственно, на этом всё, если этот гайд был вам полезен, не забудьте нажать отметку "нравиться".

Красава, все таки разобрался )
 
  • Нравится
Реакции: degrando

Adam_Rockwell

Активный
143
25
Нецелесообразно держать токен группы в скрипте что ты собираешься распространять, можно задействовать хост на котором всё будет обрабатываться и храниться токен. А так да, не плохо.
Если соберётся распространять, то уж понятно что для юзеров сделает ини файл, где токен и будет лежать, вместе с идом ВКонтакте.
 

Randewoo

Потрачен
110
33
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если соберётся распространять, то уж понятно что для юзеров сделает ини файл, где токен и будет лежать, вместе с идом ВКонтакте.
Чтобы его можно было спиздить? Держать все на хостинге - самый лучший вариант.
 
  • Нравится
Реакции: Quasper